Manjaro LinuxとDockerでTensorflow+CUDA+Jupyter環境を構築(後編)

Manjaro LinuxとDockerでTensorflow+CUDA+Jupyter環境を構築(後編)
どうもfkdm(@fkdm88)です。
前回はCUDAの導入までをこの記事で説明しました。今回はDockerを用いてTensorflow+CUDA+Jupyter環境を構築します。
Docker+Tensorflow+CUDA構築 〜後編〜
Dockerのインストールは省きます。まだの方はArchwiki – Dockerなど参照してインストールしましょう。
NVIDIA container runtimeをインストール
DockerでGPUを使うためのパッケージをインストールします。AURリポジトリのパッケージになりますので、yayを使います。(前編でも断りなしで使ってましたね。便利ですのでぜひ導入を)
インストール後はDockerサービスを再起動しておきましょう。
$ yay -Sy nvidia-container-runtime
$ sudo systemctl restart docker.service
nvidiaが提供しているDockerイメージを使用して動作確認します。こんな出力が返ってきたら、Docker上でGPU認識しCUDA動かせている証拠です。
$ docker run --gpus all --rm nvidia/cuda nvidia-smi
Sat Jan 16 13:13:06 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 455.45.01 Driver Version: 455.45.01 CUDA Version: 11.1 |
|-------------------------------+----------------------+----------------------+
| 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 750M Off | 00000000:04:00.0 N/A | N/A |
| N/A 48C P8 N/A / N/A | 3MiB / 2002MiB | N/A Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
必要イメージを取得
TensorflowのOfficialイメージが公開されています。便利ですね。GPU+JupyterのDockerイメージがほしいのでxxx-gpu-jupyter
のタグがついたイメージを取得します。
ここで注意が1点。筆者環境のGPU(GK107M)が古く、最新のTensorflowを使用することができませんでした。原因はGPUに紐づくCUDA capabilityが3.0であるのに対し、最近のTensorflowのHW Requirementは3.5以上であるためです。試行錯誤したところ1.8.0-rc1-gpu
が3.0が使える最後のバージョンでしたのでやむなく、旧版を使用します。py3ではだめです。Jupyterも使えない・・・;;
# CUDA capability >= 3.5
$ docker pull tensorflow/tensorflow:latest-gpu-jupyter
# CUDA capability < 3.5
$ docker pull tensorflow/tensorflow:1.8.0-rc1-gpu
# 動作確認 (1.8.0)
$ docker run --rm --gpus=all -it tensorflow/tensorflow:1.8.0-rc1-gpu python -c "import tensorflow as tf; from tensorflow.python.client import device_lib; print(tf.__version__); print(device_lib.list_local_devices())"
... 中略 ...
1.8.0-rc1
... 中略 ...
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 11330876312730105417
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 1802371072
locality {
bus_id: 1
links {
}
}
incarnation: 4104563608929056630
physical_device_desc: "device: 0, name: GeForce GT 750M, pci bus id: 0000:04:00.0, compute capability: 3.0"
]
Jupyterサーバとして稼働させる (CUDA capability >= 3.5 only)
仕上げに、以下コマンドでコンテナ立ち上げておけば完了です。http://localhost:8888 にアクセスすればJupyterが開きます。
$ docker run --gpus=all --name tensorflow -p 8888:8888 -it tensorflow/tensorflow:latest-gpu-jupyter
# ログインの際に必要なtokenを確認する方法(この出力例だと8120f8ba826c6bb99e8c34c149c9e1a0151802bb3d2c83a9がtoken)
docker exec -it tensorflow jupyter-notebook list
Currently running servers:
http://0.0.0.0:8888/?token=8120f8ba826c6bb99e8c34c149c9e1a0151802bb3d2c83a9 :: /tf
先程書きましたが、CUDA capability=3.0に対応するDockerイメージにはJupyter対応済みのものがない。。GPUを諦めるかJupyterを諦めるか、自作Dockerイメージを作るか、の3択です。余力があれば自作版を書こう。GPU買うかぁ。
まとめ
出たとこ勝負で始めてしまった本記事ですが、結果的に筆者環境ではJupyter立ち上げならず。ということでまとめです。
- まず先にGPUのCUDA capabilityを確認すべし!
- capabilityが古いと最新TFは使用できない。Jupyterも。
- CUDAのインストールはDockerを活用することでかなり楽。
参考文献
-
前の記事
Manjaro LinuxとDockerでTensorflow+CUDA環境を構築(前編) 2021.01.15
-
次の記事
【IoT】Raspberry Pi PicoでLEDを光らせてみた 2021.02.06