第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
これでインストールは完了です。ちなみに前述のとおり,