データ解析をする上で無視できない深層学習(deep learning)を使えるように勉強中なのだが、手元に実機があったほうがいろいろと試せて良いだろう、ということでサーバの1ノードを深層学習用GPUマシンにすることにした。
当初RX200S7 (XEON E5-2620 x2)の1UサーバにGPUを乗っけてテストを開始したのだが、流石に1Uでは窮屈かなと、2UのRX300S7 (XEON E5-2630L)を入手してみた。
#春は中古サーバが安く出回っていいね。
本当は2UだとフルハイトのPCIカードが刺さらないので、タワー型のサーバ機のほうが良いのだけど、そういう汎用性のありそうな機械はヤフオクでも結構値がつり上がっちゃうので、やむなく2Uラックサーバで我慢する。
GPUは画像を表示させるわけでもないのでx16フルに繋がっている必要はないから、仮想通貨マイナー御用達の外付けx1 PCI-eの基板などで外付けにすればいいのだろうが(そうするとRX300でなくてもいいとも言えるが)、とりあえずはテスト環境として、一番安価でCUDA対応しているNVIDIA GeForce GT710というロープラファイルでローエンドなグラフィックボードを入れてみた。
まずはいろいろとサイトを巡って情報収集。
いつもお世話になっています
CentOS 7 : CUDA 9.1 インストール : Server World
まずはここを参考にCUDAをインストールしてみる。
このページではCUDA9.1を入れているが、こういう情報はすぐに更新されていってしまうので、そのままやるという訳にはいかない。
そもそもいろいろ関係するもののバージョンの組み合わせによって動いたり動かなかったりするわけで、いつの間にか情報のあるバージョンがダウンロードできなくなっていたりするので厄介だ。かといってすべて最新バージョンにしたらだいたいはうまくいかないというのがこの世界。試行錯誤するしか無いのな。
2019年4月18の段階の各種最新バージョンは以下の通り
anaconda3-5.3.1
python 3.7.2
tensorflow-gpu-1.13.1
CUDA-10.1
nvidia-driver-418.43
まずはグラボをインストール。RX300S7のマニュアルを見るとグラボはPCI-slot5に挿せ、とあったので素直に従ってみたところ認識しないし。マニュアルをよくよく見てみると、slot5,6は2CPUでないと使えないとか書いてるし。どういうこっちゃ。結局グラボの装着順は(1) slot5, (2) slot4ということらしく、1CPUのときは(1)は飛ばして(2) slot4に挿す必要があるようで、わかりにくいことこの上ない。ついでにグラボを挿すとオンボードのVGAは使えなくなるというおまけ付き。
とりあえずnvidiaのドライバを入れるために標準ドライバを切る。
# lsmod | grep nouveau nouveau 1869689 0 mxm_wmi 13021 1 nouveau video 24538 1 nouveau wmi 21636 2 mxm_wmi,nouveau drm_kms_helper 179394 2 mgag200,nouveau ttm 114635 2 mgag200,nouveau drm 429744 5 ttm,drm_kms_helper,mgag200,nouveau i2c_algo_bit 13413 3 igb,mgag200,nouveau
# nano /etc/modprobe.d/blacklist-nouveau.conf # cat /etc/modprobe.d/blacklist-nouveau.conf blacklist nouveau options nouveau modeset=0 # dracut --force # reboot
次にドライバをインストール
必要なパッケージをインストール
# yum -y install kernel-devel-$(uname -r) kernel-header-$(uname -r) gcc make
インストールされているグラボを確認
# lspci | grep VGA 04:00.0 VGA compatible controller: NVIDIA Corporation GK208B [GeForce GT 710] (rev a1) 08:00.0 VGA compatible controller: Matrox Electronics Systems Ltd. MGA G200e [Pilot] ServerEngines (SEP1) (rev 05)
ドライバをダウンロード
# wget http://jp.download.nvidia.com/XFree86/Linux-x86_64/418.43/NVIDIA-Linux-x86_64-418.43.run
インストール
# bash NVIDIA-Linux-x86_64-418.43.run Verifying archive integrity... OK Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 418.43................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
途中のメッセージはすべてyesで進む
ちゃんと入ったか確認
# nvidia-smi +-----------------------------------------------------------------------------+ | NVIDIA-SMI 418.43 Driver Version: 418.43 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GT 710 Off | 00000000:04:00.0 N/A | N/A | | 50% 28C P0 N/A / N/A | 0MiB / 980MiB | N/A Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 Not Supported | +-----------------------------------------------------------------------------+
Not Supportedは気になるが、ローエンド機種なのでそういうものらしい
続いてCUDA10.1をダウンロードしてインストール
# wget https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-10.1.105-1.x86_64.rpm # rpm -Uvh cuda-repo-rhel7-10.1.105-1.x86_64.rpm # sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/cuda.repo # yum --enablerepo=cuda,epel install cuda-10-1 xorg-x11-drv-nvidia dkms gcc make
いろいろ情報を見てもCUDA10.0までしか実績はなさそうだけど
gcc, makeはすでに最新版だったらしくインストールはされないのはいいが、DKMSのインストールでコケた
# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # yum --enablerepo=cuda,epel install cuda-10-1 xorg-x11-drv-nvidia dkms
とすることで回避
# nano /etc/profile.d/cuda101.sh # cat /etc/profile.d/cuda101.sh export PATH=/usr/local/cuda-10.1/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
ここで一旦再起動
# reboot
一般ユーザでログインして、テストプログラムを走らせてみる
$ cuda-install-samples-10.1.sh ./ Copying samples to ./NVIDIA_CUDA-10.1_Samples now... Finished copying samples. $ cd NVIDIA_CUDA-10.1_Samples/1_Utilities/deviceQuery $ make $ ./deviceQuery ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) cudaGetDeviceCount returned 35 -> CUDA driver version is insufficient for CUDA runtime version Result = FAIL
ここでまたエラーが出た。
NVIDIAのドライバを入れ直すと良いらしい
# bash NVIDIA-Linux-x86_64-418.43.run
改めてテスト
$ cd NVIDIA_CUDA-10.1_Samples/1_Utilities/deviceQuery $ ./deviceQuery ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "GeForce GT 710" CUDA Driver Version / Runtime Version 10.1 / 10.1 CUDA Capability Major/Minor version number: 3.5 Total amount of global memory: 981 MBytes (1028587520 bytes) ( 1) Multiprocessors, (192) CUDA Cores/MP: 192 CUDA Cores GPU Max Clock rate: 954 MHz (0.95 GHz) Memory Clock rate: 800 Mhz Memory Bus Width: 64-bit L2 Cache Size: 524288 bytes Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096) Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 1 copy engine(s) Run time limit on kernels: No Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): Yes Device supports Compute Preemption: No Supports Cooperative Kernel Launch: No Supports MultiDevice Co-op Kernel Launch: No Device PCI Domain ID / Bus ID / location ID: 0 / 4 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.1, CUDA Runtime Version = 10.1, NumDevs = 1 Result = PASS
これでCUDAはちゃんとインストールできたっぽい
続く