深層学習のためのDocker(1)
機械学習のために利用可能な実験サーバーが複数ある状況を考える. この時,コードの実行に必要なライブラリをそれぞれのサーバーにおのおのインストールすることには,いくつかの問題がある:
- 手間: 全てのサーバーにいちいちライブラリをインストール/更新していくのは面倒
- 副作用: サーバーを他者と共有している場合,ライブラリのバージョン変更などの影響がお互いに気になる
Docker利用の意義
以上の議論から,いくつかのライブラリをまとめてdocker imageとして持っておくと便利だと言える.
この時,それぞれの実験サーバーが異なるcompute capabilityのGPUを搭載していることが想定されるが,CUDAより上のレイヤをできるだけ新しいバージョンにしておけば,いずれのノードにおいても同じDockerイメージを利用できる.これについて次の章で述べる.
GPU/ドライバ/CUDA/cuDNN/深層学習ライブラリの互換性
NVIDIAのGPUで深層学習をやるには,5つのレイヤ: GPU/ドライバ/CUDA/cuDNN/深層学習ライブラリ を理解する必要があり,これを復習する.
- ドライバはGPUに対して後方互換性がある.つまりGPUを固定してドライバを更新し続けることができる.[1]
- ドライバはCUDAに対しても後方互換性がある.つまりCUDAを固定してドライバを更新し続けることができる.
- 特定のCUDAを使うには,対応するドライバの最低バージョンがある.つまり新しいCUDAには一定以上新しいドライバしか使えない.[2]
- Compute capabilityの概念によれば,新しいGPUに対応しているCUDAは新しいバージョンだけ.つまりGPUをアップグレードするとCUDAも必然的にアップグレードしないといけない.[3]
- 逆に,新しいCUDAは割と古いGPUにも対応している
- 大抵,新しいCUDAには新しい深層学習ライブラリしか対応していない.CUDA/cuDNN/深層学習ライブラリはセットでバージョンを揃える.
- つまり:
- コード/深層学習ライブラリ/cuDNN/CUDAはセットにして,最新を追従するよう努める
NVIDIA Container Toolkit
DockerコンテナとNVIDIA driverの接続が面倒らしい.
そこを自動でやってくれるのがNVIDIA Container Toolkit (NVIDIA Docker).
ドライバはホストOSにインストールしておく必要がある.[4]
前述の通りこれは最新を入れれば良い.
ベースとなるimageはNVIDIAが色々公開しているので利用すると楽できる.
参考文献
[1] NVIDIAドライバダウンロード. https://www.nvidia.co.jp/Download/index.aspx?lang=jp
[2] NVIDIA CUDA Toolkit Release Notes. https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
[3] GPUs supported. https://en.wikipedia.org/wiki/CUDA#GPUs_supported
[4] NVIDIA Container Toolkit. https://github.com/NVIDIA/nvidia-docker