Tesla P100 / CentOS7

Share on:

さくらインターネットさんから一時的に高火力サーバ(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にも関わらずこのぐらいの性能で動いてるのは良いよな。だからまだ使い続けているのだけど。