kuroの覚え書き

96の個人的覚え書き

CentOS7上のDockerでDeep learning環境を構築

とりあえずDockerをインストールしてrunできる所まで来たのでいよいよDeep learning環境を構築していこうと思う。

やることとしてはまずCentOS7にnvidiaのドライバを入れる。

これは基本以前にやったとおりでいい。
k-kuro.hatenadiary.jp

[kkuro@E5800-T110f-E ~]$ su
パスワード:
[root@E5800-T110f-E kkuro]# yum -y install kernel-devel-$(uname -r) kernel-header-$(uname -r) gcc make
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                     | 3.8 kB     00:00     
 * base: mirrors.cat.net
 * epel: ftp.jaist.ac.jp
 * extras: mirrors.cat.net
 * updates: mirrors.cat.net
CityFan                                                  | 3.0 kB     00:00     
base                                                     | 3.6 kB     00:00     
docker-ce-stable                                         | 3.5 kB     00:00     
epel                                                     | 4.7 kB     00:00     
extras                                                   | 2.9 kB     00:00     
updates                                                  | 2.9 kB     00:00     
(1/2): epel/x86_64/updateinfo                              | 1.0 MB   00:00     
(2/2): epel/x86_64/primary_db                              | 6.9 MB   00:00     
パッケージ kernel-header-3.10.0-1160.31.1.el7.x86_64 は利用できません。
パッケージ gcc-4.8.5-44.el7.x86_64 はインストール済みか最新バージョンです
パッケージ 1:make-3.82-24.el7.x86_64 はインストール済みか最新バージョンです
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ kernel-devel.x86_64 0:3.10.0-1160.31.1.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package            アーキテクチャー
                                 バージョン                 リポジトリー   容量
================================================================================
インストール中:
 kernel-devel       x86_64       3.10.0-1160.31.1.el7       updates        18 M

トランザクションの要約
================================================================================
インストール  1 パッケージ

総ダウンロード容量: 18 M
インストール容量: 38 M
Downloading packages:
No Presto metadata available for updates
kernel-devel-3.10.0-1160.31.1.el7.x86_64.rpm               |  18 MB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : kernel-devel-3.10.0-1160.31.1.el7.x86_64        1/1 
  検証中                  : kernel-devel-3.10.0-1160.31.1.el7.x86_64        1/1 

インストール:
  kernel-devel.x86_64 0:3.10.0-1160.31.1.el7                                    

完了しました!
[root@E5800-T110f-E kkuro]# lspci | grep VGA
01:00.0 VGA compatible controller: NVIDIA Corporation GK208B [GeForce GT 710] (rev a1)
39:00.0 VGA compatible controller: Matrox Electronics Systems Ltd. MGA G200e [Pilot] ServerEngines (SEP1) (rev 02)
[root@E5800-T110f-E kkuro]# wget http://jp.download.nvidia.com/XFree86/Linux-x86_64/460.84/NVIDIA-Linux-x86_64-460.84.run
--2021-07-11 18:22:23--  http://jp.download.nvidia.com/XFree86/Linux-x86_64/460.84/NVIDIA-Linux-x86_64-460.84.run
jp.download.nvidia.com (jp.download.nvidia.com) をDNSに問いあわせています... 2606:2800:247:2063:46e:21d:825:102e, 192.229.232.112
jp.download.nvidia.com (jp.download.nvidia.com)|2606:2800:247:2063:46e:21d:825:102e|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 177840337 (170M) [application/octet-stream]
`NVIDIA-Linux-x86_64-460.84.run' に保存中

100%[======================================>] 177,840,337 31.2MB/s 時間 6.3s   

2021-07-11 18:22:30 (26.9 MB/s) - `NVIDIA-Linux-x86_64-460.84.run' へ保存完了 [177840337/177840337]

[root@E5800-T110f-E kkuro]# bash NVIDIA-Linux-x86_64-460.84.run
Verifying archive integrity... OK
Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 460.84........................................................................................

こんな感じ。

[kkuro@E5800-T110f-E ~]$ sudo nvidia-smi
[sudo] kkuro のパスワード:
Sun Jul 11 18:25:13 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.84       Driver Version: 460.84       CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce GT 710      Off  | 00000000:01:00.0 N/A |                  N/A |
| 50%   57C    P0    N/A /  N/A |      0MiB /   980MiB |     N/A      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

さて、ここからは
Installation Guide — NVIDIA Cloud Native Technologies documentation
こちらのnvidiaの中の人の解説に従ってインストールを進めていく。

[kkuro@E5800-T110f-E ~]$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
>    && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
[libnvidia-container]
name=libnvidia-container
baseurl=https://nvidia.github.io/libnvidia-container/stable/centos7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://nvidia.github.io/libnvidia-container/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

[libnvidia-container-experimental]
name=libnvidia-container-experimental
baseurl=https://nvidia.github.io/libnvidia-container/experimental/centos7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=0
gpgkey=https://nvidia.github.io/libnvidia-container/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

[nvidia-container-runtime]
name=nvidia-container-runtime
baseurl=https://nvidia.github.io/nvidia-container-runtime/stable/centos7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://nvidia.github.io/nvidia-container-runtime/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

[nvidia-container-runtime-experimental]
name=nvidia-container-runtime-experimental
baseurl=https://nvidia.github.io/nvidia-container-runtime/experimental/centos7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=0
gpgkey=https://nvidia.github.io/nvidia-container-runtime/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

[nvidia-docker]
name=nvidia-docker
baseurl=https://nvidia.github.io/nvidia-docker/centos7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://nvidia.github.io/nvidia-docker/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
[kkuro@E5800-T110f-E ~]$ sudo yum clean expire-cache
読み込んだプラグイン:fastestmirror, langpacks
リポジトリーを清掃しています: CityFan base docker-ce-stable epel extras
     ...: libnvidia-container nvidia-container-runtime nvidia-docker updates
9 個の metadata ファイルを削除しました
[kkuro@E5800-T110f-E ~]$ sudo yum install -y nvidia-docker2
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                     | 3.8 kB     00:00     
 * base: mirrors.cat.net
 * epel: ftp.jaist.ac.jp
 * extras: mirrors.cat.net
 * updates: mirrors.cat.net
CityFan                                                  | 3.0 kB     00:00     
base                                                     | 3.6 kB     00:00     
docker-ce-stable                                         | 3.5 kB     00:00     
extras                                                   | 2.9 kB     00:00     
libnvidia-container/x86_64/signature                     |  833 B     00:00     
https://nvidia.github.io/libnvidia-container/gpgkey から鍵を取得中です。
Importing GPG key 0xF796ECB0:
 Userid     : "NVIDIA CORPORATION (Open Source Projects) <cudatools@nvidia.com>"
 Fingerprint: c95b 321b 61e8 8c18 09c4 f759 ddca e044 f796 ecb0
 From       : https://nvidia.github.io/libnvidia-container/gpgkey
libnvidia-container/x86_64/signature                     | 2.1 kB     00:00 !!! 
nvidia-container-runtime/x86_64/signature                |  833 B     00:00     
https://nvidia.github.io/nvidia-container-runtime/gpgkey から鍵を取得中です。
Importing GPG key 0xF796ECB0:
 Userid     : "NVIDIA CORPORATION (Open Source Projects) <cudatools@nvidia.com>"
 Fingerprint: c95b 321b 61e8 8c18 09c4 f759 ddca e044 f796 ecb0
 From       : https://nvidia.github.io/nvidia-container-runtime/gpgkey
nvidia-container-runtime/x86_64/signature                | 2.1 kB     00:00 !!! 
nvidia-docker/x86_64/signature                           |  833 B     00:00     
https://nvidia.github.io/nvidia-docker/gpgkey から鍵を取得中です。
Importing GPG key 0xF796ECB0:
 Userid     : "NVIDIA CORPORATION (Open Source Projects) <cudatools@nvidia.com>"
 Fingerprint: c95b 321b 61e8 8c18 09c4 f759 ddca e044 f796 ecb0
 From       : https://nvidia.github.io/nvidia-docker/gpgkey
nvidia-docker/x86_64/signature                           | 2.1 kB     00:00 !!! 
updates                                                  | 2.9 kB     00:00     
(1/3): libnvidia-container/x86_64/primary                  |  17 kB   00:00     
(2/3): nvidia-docker/x86_64/primary                        | 8.0 kB   00:00     
(3/3): nvidia-container-runtime/x86_64/primary             |  11 kB   00:00     
libnvidia-container                                                     105/105
nvidia-container-runtime                                                  71/71
nvidia-docker                                                             54/54
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ nvidia-docker2.noarch 0:2.6.0-1 を インストール
--> 依存性の処理をしています: nvidia-container-runtime >= 3.5.0 のパッケージ: nvidia-docker2-2.6.0-1.noarch
--> トランザクションの確認を実行しています。
---> パッケージ nvidia-container-runtime.x86_64 0:3.5.0-1 を インストール
--> 依存性の処理をしています: nvidia-container-toolkit < 2.0.0 のパッケージ: nvidia-container-runtime-3.5.0-1.x86_64
--> 依存性の処理をしています: nvidia-container-toolkit >= 1.5.0 のパッケージ: nvidia-container-runtime-3.5.0-1.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ nvidia-container-toolkit.x86_64 0:1.5.1-2 を インストール
--> 依存性の処理をしています: libnvidia-container-tools < 2.0.0 のパッケージ: nvidia-container-toolkit-1.5.1-2.x86_64
--> 依存性の処理をしています: libnvidia-container-tools >= 1.4.0 のパッケージ: nvidia-container-toolkit-1.5.1-2.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ libnvidia-container-tools.x86_64 0:1.4.0-1 を インストール
--> 依存性の処理をしています: libnvidia-container1(x86-64) >= 1.4.0-1 のパッケージ: libnvidia-container-tools-1.4.0-1.x86_64
--> 依存性の処理をしています: libnvidia-container.so.1(NVC_1.0)(64bit) のパッケージ: libnvidia-container-tools-1.4.0-1.x86_64
--> 依存性の処理をしています: libnvidia-container.so.1()(64bit) のパッケージ: libnvidia-container-tools-1.4.0-1.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ libnvidia-container1.x86_64 0:1.4.0-1 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package                    アーキテクチャー
                                    バージョン  リポジトリー               容量
================================================================================
インストール中:
 nvidia-docker2             noarch  2.6.0-1     nvidia-docker             9.0 k
依存性関連でのインストールをします:
 libnvidia-container-tools  x86_64  1.4.0-1     libnvidia-container        43 k
 libnvidia-container1       x86_64  1.4.0-1     libnvidia-container        87 k
 nvidia-container-runtime   x86_64  3.5.0-1     nvidia-container-runtime  827 k
 nvidia-container-toolkit   x86_64  1.5.1-2     nvidia-container-runtime  764 k

トランザクションの要約
================================================================================
インストール  1 パッケージ (+4 個の依存関係のパッケージ)

総ダウンロード容量: 1.7 M
インストール容量: 4.6 M
Downloading packages:
(1/5): libnvidia-container-tools-1.4.0-1.x86_64.rpm        |  43 kB   00:00     
(2/5): nvidia-docker2-2.6.0-1.noarch.rpm                   | 9.0 kB   00:00     
(3/5): libnvidia-container1-1.4.0-1.x86_64.rpm             |  87 kB   00:00     
(4/5): nvidia-container-toolkit-1.5.1-2.x86_64.rpm         | 764 kB   00:00     
(5/5): nvidia-container-runtime-3.5.0-1.x86_64.rpm         | 827 kB   00:05     
--------------------------------------------------------------------------------
合計                                               288 kB/s | 1.7 MB  00:06     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : libnvidia-container1-1.4.0-1.x86_64             1/5 
  インストール中          : libnvidia-container-tools-1.4.0-1.x86_64        2/5 
  インストール中          : nvidia-container-toolkit-1.5.1-2.x86_64         3/5 
  インストール中          : nvidia-container-runtime-3.5.0-1.x86_64         4/5 
  インストール中          : nvidia-docker2-2.6.0-1.noarch                   5/5 
  検証中                  : nvidia-container-toolkit-1.5.1-2.x86_64         1/5 
  検証中                  : nvidia-container-runtime-3.5.0-1.x86_64         2/5 
  検証中                  : nvidia-docker2-2.6.0-1.noarch                   3/5 
  検証中                  : libnvidia-container1-1.4.0-1.x86_64             4/5 
  検証中                  : libnvidia-container-tools-1.4.0-1.x86_64        5/5 

インストール:
  nvidia-docker2.noarch 0:2.6.0-1                                               

依存性関連をインストールしました:
  libnvidia-container-tools.x86_64 0:1.4.0-1                                    
  libnvidia-container1.x86_64 0:1.4.0-1                                         
  nvidia-container-runtime.x86_64 0:3.5.0-1                                     
  nvidia-container-toolkit.x86_64 0:1.5.1-2                                     

完了しました!
[kkuro@E5800-T110f-E ~]$ sudo systemctl restart docker
[kkuro@E5800-T110f-E ~]$ sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
Unable to find image 'nvidia/cuda:11.0-base' locally
11.0-base: Pulling from nvidia/cuda
54ee1f796a1e: Pull complete 
f7bfea53ad12: Pull complete 
46d371e02073: Pull complete 
b66c17bbf772: Pull complete 
3642f1a6dfb3: Pull complete 
e5ce55b8b4b9: Pull complete 
155bc0332b0a: Pull complete 
Digest: sha256:774ca3d612de15213102c2dbbba55df44dc5cf9870ca2be6c6e9c627fa63d67a
Status: Downloaded newer image for nvidia/cuda:11.0-base
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.84       Driver Version: 460.84       CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce GT 710      Off  | 00000000:01:00.0 N/A |                  N/A |
| 50%   57C    P0    N/A /  N/A |      0MiB /   980MiB |     N/A      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

よしよしちゃんと動くじゃないか。

tensorflowのdockerも試してみよう。

[kkuro@E5800-T110f-E ~]$ docker run --gpus all -it --rm --name tensorflow-gpu -p 8888:8888 tensorflow/tensorflow:latest-gpu-py3-jupyter
Unable to find image 'tensorflow/tensorflow:latest-gpu-py3-jupyter' locally
latest-gpu-py3-jupyter: Pulling from tensorflow/tensorflow
7ddbc47eeb70: Pulling fs layer 
c1bbdc448b72: Pulling fs layer 
8c3b70e39044: Pulling fs layer 
45d437916d57: Pulling fs layer 
d8f1569ddae6: Pulling fs layer 
85386706b020: Pulling fs layer 
ee9b457b77d0: Pulling fs layer 
bebfcc1316f7: Pulling fs layer 
644140fd95a9: Pull complete 
d6c0f989e873: Pull complete 
7a8e64f26211: Pull complete 
c33b03e4dd22: Pull complete 
bca93af797c1: Pull complete 
47f6c197be35: Pull complete 
e5da48aa9554: Pull complete 
ca68d98a90c4: Pull complete 
2059de27f7c8: Pull complete 
55d02aea1458: Pull complete 
32162ecb0c59: Pull complete 
47520dc72e8e: Pull complete 
3dafed94e1f2: Pull complete 
dc228e76e4f0: Pull complete 
2c6922dc5a5f: Pull complete 
a960e6d108fd: Pull complete 
6818a780ae00: Pull complete 
06dfbeeed7ba: Pull complete 
5890e026a0a0: Pull complete 
eeddfe30f3d2: Pull complete 
187170305445: Pull complete 
2e20a8960c42: Pull complete 
9f1bf726c909: Pull complete 
Digest: sha256:901b827b19d14aa0dd79ebbd45f410ee9dbfa209f6a4db71041b5b8ae144fea5
Status: Downloaded newer image for tensorflow/tensorflow:latest-gpu-py3-jupyter

________                               _______________                
___  __/__________________________________  ____/__  /________      __
__  /  _  _ \_  __ \_  ___/  __ \_  ___/_  /_   __  /_  __ \_ | /| / /
_  /   /  __/  / / /(__  )/ /_/ /  /   _  __/   _  / / /_/ /_ |/ |/ / 
/_/    \___//_/ /_//____/ \____//_/    /_/      /_/  \____/____/|__/


WARNING: You are running this container as root, which can cause new files in
mounted volumes to be created as the root user on your host machine.

To avoid this, run the container by specifying your user's userid:

$ docker run -u $(id -u):$(id -g) args...

[I 09:46:31.559 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
jupyter_http_over_ws extension initialized. Listening on /http_over_websocket
[I 09:46:31.739 NotebookApp] Serving notebooks from local directory: /tf
[I 09:46:31.739 NotebookApp] The Jupyter Notebook is running at:
[I 09:46:31.739 NotebookApp] http://dea93aef777e:8888/?token=95c9c68d822e8403e3a886e916eaf1ba3c7981e5cbb5f789
[I 09:46:31.739 NotebookApp]  or http://127.0.0.1:8888/?token=95c9c68d822e8403e3a886e916eaf1ba3c7981e5cbb5f789
[I 09:46:31.739 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 09:46:31.743 NotebookApp] 
    
    To access the notebook, open this file in a browser:
        file:///root/.local/share/jupyter/runtime/nbserver-1-open.html
    Or copy and paste one of these URLs:
        http://dea93aef777e:8888/?token=95c9c68d822e8403e3a886e916eaf1ba3c7981e5cbb5f789
     or http://127.0.0.1:8888/?token=95c9c68d822e8403e3a886e916eaf1ba3c7981e5cbb5f789

f:id:k-kuro:20210711193603p:plain

ちゃんと起動するし、webブラウザでもJupyter notebookが起動し、コマンドも走るよ。
f:id:k-kuro:20210711193315p:plain

ちなみにホスト名からも分かる通りHaswell世代のポンコツサーバ(2000円でゲット)にGT710などという最底辺グラボなんで、実際のところヤクタタズなんだが。