さくらインターネットさんから一時的に高火力サーバ(Tesla P100)を借りています。諸々の事情があってなかなか試用希望学生がほとんどいないので、私の方で仮に環境構築してみました。というお話。
使ってみたい学生いたら當間まで連絡ください。ちなみに1,2台しか借りてませんので、集まり過ぎたらその時点で打ち切ります。
参考サイト
・GPUを使えるようにする for tensorflow
GPU, OS, gcc, pythonの確認
[tnal@localhost ~]$ head /proc/cpuinfo | grep “model name”
model name : Intel(R) Xeon(R) CPU E5-2623 v3 @ 3.00GHz
[tnal@localhost ~]$ lspci | grep NVIDIA
02:00.0 3D controller: NVIDIA Corporation GP100GL [Tesla P100 PCIe 16GB] (rev a1)
[tnal@localhost ~]$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[tnal@localhost ~]$ gcc –version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
[tnal@localhost ~]$ python –version
Python 2.7.5
Pythonを3.xにしたいので、まずはそちらから。Anacondaで良いか。
Anacondaのインストール
[tnal@localhost ~]$ curl -O https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh
[tnal@localhost ~]$ sudo sh Anaconda3-2019.03-Linux-x86_64.sh
*ライセンス確認=> yes
*インストール先=> /anaconda3
*/anaconda3/bin をPATHに追加。
[tnal@localhost ~]$ which python
/anaconda3/bin/python
[tnal@localhost ~]$ python –version
Python 3.7.3
Anaconda3でインストールしたPythonが実行できることを確認。
CUDA Toolkitのインストール
参考1: NVIDIA CUDA Installation Guide for Linux
参考2: 専用サーバ:CUDA Toolkit/GPUカードドライバー導入手順
Download Installer for Linux CentOS 7 x86_64を参考に、以下の通り実行。さくらサーバの場合は、runfile (local) を選択するらしい。
[tnal@localhost ~]$ sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
[tnal@localhost ~]$ curl -O https://developer.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.168_418.67_linux.run
[tnal@localhost ~]$ chmod u+x cuda_10.1.168_418.67_linux.run
[tnal@localhost ~]$ sudo ./cuda_10.1.168_418.67_linux.run –toolkit –samples –samplespath=/usr/local/cuda-samples –no-opengl-libs
*ライセンス確認=> accept
*インストール対象(Driver, Toolkit, Samples, Demo Suite, Documentations)を選択して、Install。
環境変数の設定1。
/etc/profile.d/cuda.sh
export CUDA_HOME=”/usr/local/cuda”
export PATH=”$CUDA_HOME/bin:$PATH”
export LD_LIBRARY_PATH=”/usr/local/lib:$CUDA_HOME/lib64:$LD_LIBRARY_PATH”
export CPATH=”/usr/local/include:$CUDA_HOME/include:$CPATH”
export INCLUDE_PATH=”$CUDA_HOME/include”
環境変数の設定2。
/etc/profile.d/cuda.csh
setenv CUDA_HOME “/usr/local/cuda”
setenv PATH “$CUDA_HOME/bin:$PATH”
setenv LD_LIBRARY_PATH “/usr/local/lib:$CUDA_HOME/lib64:$LD_LIBRARY_PATH”
setenv CPATH “/usr/local/include:$CUDA_HOME/include:$CPATH”
setenv INCLUDE_PATH “$CUDA_HOME/include”
設定反映させるため、一度ログアウト&ログインし直し。
echo $HOME ぐらいで環境変数の反映確認。
GPUカード用ドライバーのインストール
NVIDIA Driver Downloadsから、Tesla P100, Linux 64-bitを選択。名前とか記入してダウンロード。
[tnal@localhost ~]$ chmod u+x NVIDIA-Linux-x86_64-418.67.run
[tnal@localhost ~]$ sudo ./NVIDIA-Linux-x86_64-418.67.run –no-opengl-files –no-libglx-indirect –dkms
*dkmsインストールされてないと怒られる。
*ぐぐる感じでは、dkmsはEPELに含まれているようだけど、EPSLはインストール済み。また、yumでインストールできると書いてる記事も見つかるが、古の話らしく、現時点ではrpm見つからず。個別にdkmsリポジトリからmakeするなりしてるケースも見つかるけど、今回は一先ず使わない(オプション削除)ことにしてインストール。
[tnal@localhost ~]$ sudo ./NVIDIA-Linux-x86_64-418.67.run –no-opengl-files –no-libglx-indirect
[tnal@localhost ~]$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Apr_24_19:10:27_PDT_2019
Cuda compilation tools, release 10.1, V10.1.168
*この時点でnvcc(NVIDIA Cuda compiler)が動いているっぽい。
cuDNNのインストール
NVIDIA cuDNNからcuDNNをダウンロード。メンバーシップ登録が必要。
「cuDNN Library for Linux」をダウンロード。
明らかにUbuntuのライブラリが充実してるので、そっち使ったほうが良い(楽)のでしょうね。
[tnal@localhost ~]$ tar xvfz cudnn-10.1-linux-x64-v7.6.0.64.tgz
[tnal@localhost ~]$ sudo mv cuda/include/cudnn.h /usr/local/cuda/include/
[tnal@localhost ~]$ sudo mv cuda/lib64/* /usr/local/cuda/lib64/
GPUの動作確認
[tnal@localhost ~]$ nvidia-smi
Fri May 24 16:29:38 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67 Driver Version: 418.67 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-PCIE... Off | 00000000:02:00.0 Off | 0 |
| N/A 32C P0 28W / 250W | 0MiB / 16280MiB | 5% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
TensorFlow/Kerasのインストール
[tnal@localhost ~]$ sudo /anaconda3/bin/conda install tensorflow-gpu
比較用にGPUを使っていないTensorflow/Kerasもインストール
[tnal@localhost ~]$ conda init bash
(base) [tnal@localhost ~]$ conda create –name py37-no-gpu
(base) [tnal@localhost ~]$ conda activate py37-no-gpu
(py37-no-gpu) [tnal@localhost ~]$ conda info -e
# conda environments:
#
base /anaconda3
py37-no-gpu * /home/tnal/.conda/envs/py37-no-gpu
動作確認
MNISTのあれで、epochs=10までの設定で、model.fit()までに要する時間を計測してみました。
# GPUあり (Intel Xeon E5-2623 v3 3.00GHz, Tesla P100)
real 0m38.566s
user 1m4.615s
sys 0m9.587s
# GPU なし
real 0m46.104s
user 1m22.466s
sys 0m14.364s
*ちゃんと動いてるようにみえるのだけど、変な出力も出てるので、何かインストールで不具合起きてるかも。
# 自分のPC (MacBook Pro 15, Late 2013)
482.48s user 484.70s system 662% cpu 2:26.06 total
流石に1分前後で終わるぐらいのものだとあまり差は出ていませんが、より現実的なものだとこの差が開いていくのでしょう。おまけでやった私の環境だとこのぐらいでも2分強かかってるのはご愛嬌というか、2013年のノートPCにも関わらずこのぐらいの性能で動いてるのは良いよな。だからまだ使い続けているのだけど。