runtimeではnvccが使えないので注意[nvidia-docker2]

教訓

nvidia-dockerで環境を立てるときには、develを選ぶのが吉

説明

さて、nvidia-docker2を使ってコンテナを作成しようとしたのだが

$ docker run -it --runtime=nvidia nvidia/cuda:8.0-cudnn5-runtime-ubuntu16.04

いざ、コンテナ内でCUDAのバージョンを確認しようnvccコマンドを打つも見つからないと言われる。

$ nvcc -V
bash: nvcc: command not found

パスが通ってないだけかと思い、以下を~/.bashrcに追記するエラー。

export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH

その後、色々と試すうちに、そもそも /usr/local/cuda-8.0/bin のフォルダが無いということに気がついた。

で、調べてみると以下の記述に辿り着いた。

  • base: starting from CUDA 9.0, contains the bare minimum (libcudart) to deploy a pre-built CUDA application. Use this image if you want to manually select which CUDA packages you want to install.

  • runtime: extends the base image by adding all the shared libraries from the CUDA toolkit. Use this image if you have a pre-built application using multiple CUDA libraries.

  • devel: extends the runtime image by adding the compiler toolchain, the debugging tools, the headers and the static libraries. Use this image to compile a CUDA application from sources.

github.com

どうやら、3つのフレーバーに分かれているようだ。 そして、私が先ほどインストールしたイメージはruntimeで、複数のCUDAライブラリを使う為のイメージだったことが判明した。

そうか、複数のCUDAライブラリの使用が前提だったから、nvccの設定はされていなかったのか。そもそも、複数のCUDAライブラリの使用が前提のイメージって誰が使うのって思い、runtimeとかややこしいの作るなよって、文句がでてしまった。

が、文句を言っても仕方ないので、上3つのフレーバーの中で1番拡張されているdevelをインストールし、nvccコマンドを確認。

$ docker run -it --runtime=nvidia nvidia/cuda:8.0-cudnn5-devel-ubuntu16.04
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Tue_Jan_10_13:22:03_CST_2017
Cuda compilation tools, release 8.0, V8.0.61

良かった、ちゃんと使えた!