CentOS installからCUDA installまで

CentOS7.6を入れて、CUDAの環境を作るまでをまとめました。

1. CentOSを入れる

今回はCentOS7.6を入れました。mac Mojaveで作業しています。

公式サイトのDownloadからminimal isoをダウンロード。 usbをブートデバイスにする。usbを挿れてから

$ diskutil list

で使いたいusbの名前を特定する。/dev/disk1とか。わからなければ一度出してからdiskutil listして、消えた名前を見れば良いと思う。

次に、usbをブート用にフォーマットする。

$ diskutil eraseDisk MS-DOS UNTITLED /dev/disk2

するか、macOSのアプリのディスクユーティリティFAT32にフォーマット。

isoイメージをdmgファイルに変換する。

$ hdiutil convert -format UDRW -o centosdvd.img CentOS-7.6-***-x86_64-DVD.iso

するとcentos.img.dmgが出来上がる。 イメージファイルを入れるために一度unmountする。

$ diskutil unmountDisk /dev/disk2

usbデバイスにイメージファイルを入れる。

$ sudo dd if=centosdvd.img.dmg of=/dev/disk2 bs=1m

これで完成。起動したいマシンに挿れて、BIOSからusbの順番を上にして再起動。 minimalを挿れているので、テキストベース(CLI?)でinstall作業をすることに注意。起動してグラフィックが途中までは起動したがそこから何もつかなくなって始めは困惑した。

具体的にはinstallの選ぶ画面でtabkeyを押して、なんか出てきたCLIの最後にinst.textと追加する。 ネットワークやらなんやらの設定が少し面倒。

いずれ追記。

CentOSの初期設定

最低限動かすためにyumで必要なものを入れる。 gcc, makeとか

2. NVIDIA driverのインストール

2.1 nouveauの無効化

gpunvidiaのツールだけで扱わせるためにもともと入っているnouveauを無効化しないといけない。

あとで書かないと。

2.2 NVIDIA-Linux-***-runのinstall

NVIDIAの公式サイトの

NVIDIAドライバダウンロード

からNVIDIA-Linux*-runというファイルを取ってくる。

入れようとすると以下のようなエラーが出た。

$ sudo sh NVIDIA-Linux-x86_64-***.run
ERROR: Unable to find the kernel source tree for the currently running kernel.  Please make sure you have installed the kernel source files for your kernel and that
         they are properly configured; on Red Hat Linux systems, for example, be sure you have the 'kernel-source' or 'kernel-devel' RPM installed.  If you know the
         correct kernel source files are installed, you may specify the kernel source path with the '--kernel-source-path' command line option.

--kernel-source-pathを指定する必要がある。

$ sudo sh NVIDIA-Linux-x86_64-***.run --kernel-source-path=/usr/src/kernels/***.x86_64

入れている最中に32bit版を入れるかとかX configurationがなんとか言われるが適当に進んで完了する。

uninstallするときは

$ sudo sh NVIDIA-Linux-x86_64-***.run --uninstall

注意

他の人の記事ですが以下参考になるかも。 yumのアップデートでカーネルのバージョンが上がった場合は、ドライバが正常に動作しなくなり、Xのサーバが起動しなくなります。それに伴って、デスクトップが表示されなくなってしまいます。

NVIDIAのドライバをインストールする - Qiita

補足:パッケージマネージャーの使用

適切なレポジトリを追加したら、yumnvidia driverの管理ができる。 その場合、runfileで入れたものは邪魔になるので消しておく必要がある。

3 cudaのinstall

nvidia driverにあったcudaを取ってくる。これを間違えるとインストールできない。 cuda-repo-rhel7-10-0-local-10.0***.x86_64.rpmを今回は取ってきた。 レポジトリに追加

$ rpm -i cuda-repo-rhel7-10-0-local-10.0***.x86_64.rpm

cudaをinstallする

$ yum install cuda-10-0

明示的にversionを指定しなくてもできるが複数のcuda**rpmを挿れてる時に何が起こるかは知らない。

あと、途中でこんなエラーが出ることも

エラー: パッケージ: 3:nvidia-driver-cuda-410.48-1.el7.x86_64 (cuda-10-0-local-10.0.130-410.48)
             要求: opencl-filesystem
エラー: パッケージ: 3:nvidia-driver-410.48-1.el7.x86_64 (cuda-10-0-local-10.0.130-410.48)
             要求: libva-vdpau-driver(x86-64)
エラー: パッケージ: 3:nvidia-driver-cuda-410.48-1.el7.x86_64 (cuda-10-0-local-10.0.130-410.48)
             要求: ocl-icd
エラー: パッケージ: 3:dkms-nvidia-410.48-1.el7.x86_64 (cuda-10-0-local-10.0.130-410.48)
             要求: dkms

これはepelレポジトリを追加して

$ sudo yum install epel-release

解決する。

cudnnの設定

NVIDIAのサイトからダウンロード。アカウント登録が必要で、wgetで取れない。

マシンにcudnn-10.0***.tgzを置いたら

$ tar -xzvf cudnn-10.0-linux-x64-***.tgz

で展開する。そして、Copy the following files into the CUDA Toolkit directory, and change the file permissions.

$ sudo cp cuda/include/cudnn.h /usr/local/cuda-10.0/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda-10.0/lib64
$ sudo chmod a+r /usr/local/cuda-10.0/include/cudnn.h /usr/local/cuda-10.0/lib64/libcudnn*

最後にpath設定を変えてインストールしたものを見てあげるようにする。

export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_DEVICE_ORDER=PCI_BUS_ID