第456回ではUbuntu 16.
NVIDIAのDocker
第458回で紹介しているようにDockerはカーネルのコンテナ技術などを利用して,
カーネルが共通であるということは,
- ※1
- CUDAのインストーラーはNVIDIAのドライバーもインストールしてくれます。ただし今回はコンテナの中でCUDAをインストールするため,
ホストでも別途NVIDIAドライバーをインストールしておく必要があります。これが第456回のCUDAの紹介とは独立した記事として, 第454回においてドライバーのインストール方法を紹介した理由です。
つまりDockerコンテナの中でCUDAのようなデバイスファイルの操作を行いたい場合,
- Control Groupを用いてコンテナからGPUのデバイスファイルへの読み書きの権限を与える
( --device
オプション) - Linuxのcapabilities(7)を用いて非特権ユーザーにも一部の特権操作を行えるようにする
( --cap-add
オプション)
CUDAを動かしたいだけであれば,/dev/
」nvidia-uvm
のようにCUDAの利用によって動的にロードされうるモジュールも存在するため,
NVIDIA DockerはCUDA入りのDockerイメージを構築・
- ※2
- Dockerコマンドを完全に置き換えるコマンドラインツールである
nvidia-docker
コマンドと,Dockerのプラグインとして作られた nvidia-docker-plugin
の2種類が存在します。後者はデーモンとして常駐し,GPUと nvidia-docker
コマンドとの連携を行うためのAPIを提供します。前者はdocker
コマンドの代わりに使います。主にコンテナの中にホストのデバイスファイルを追加するなどの処理を行っています。NVIDIA Dockerのドキュメントによると,将来的に --device
オプションを肩代わりする仕組みがDockerプラグインシステムに実装されたら、nvidia-docker
コマンドは不要になるようです。
CUDAをDocker上で使う最大のメリットは,
このようにメリットの多いNVIDIA Dockerですが,
NVIDIA Dockerのインストール
あらかじめ第458回に従って,
NVIDIA Dockerもこれまでと同様に,
- リリース版のDebファイルをダウンロードしてインストールする
- リリース版のソースコードをダウンロードしてビルド&インストールする
- Gitリポジトリの最新版ををcloneしてビルド&インストールする
Ubuntuの場合は,
$ wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb $ sudo apt install /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb $ ps -fe | grep nvidia nvidia-+ 1259 1 3 20:06 ? 00:00:00 /usr/bin/nvidia-docker-plugin -s /var/lib/nvidia-docker root 1293 2 0 20:06 ? 00:00:00 [irq/132-nvidia] root 1294 2 0 20:06 ? 00:00:00 [nvidia] shibata 1653 22617 0 20:06 pts/2 00:00:00 grep --color=auto nvidia $ systemctl is-enabled nvidia-docker enabled
これでインストールは完了です。ちなみに前述のとおり,