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
ちゃんと起動するし、webブラウザでもJupyter notebookが起動し、コマンドも走るよ。

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