nvidia-docker+Dockerfileなコンテナの立て方


とどのつまり

予めDockerfileをしっかり書きたい、しかしnvidia-docker(2)使うときは、

# Test nvidia-smi with the latest official CUDA image
$ docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi

みたいにnvidia製のイメージを使わないとうまくいかなそう、どうすればいいの...?って思ったのでいろいろやってみた

結論、

$ docker run --runtime=nvidia オリジナルのDockerfileをビルドしたイメージ

でいけた。ただしDockerfileは本家に倣う必要あり。

ホスト環境

  • ubuntu16.04
  • cuda9.0
  • nvidia-docker2

作りたいコンテナ

  • ubuntu16.04
  • cuda9.0 + cudnn7
  • とりあえず nvidia-smi が動いてほしい

やったこと

Dockerfileを書く

  • 本家nvidia/cudaのDockerfileを拾ってきました。

  • 変な環境変数?等あったので適当にコメントアウトしつつ書き換えました

# ARG IMAGE_NAME
# FROM ${IMAGE_NAME}:9.0-devel-ubuntu16.04
FROM nvidia/cuda:9.0-devel-ubuntu16.04
# LABEL maintainer "NVIDIA CORPORATION <[email protected]>"
ENV CUDNN_VERSION 7.5.0.56
# LABEL com.nvidia.cudnn.version="${CUDNN_VERSION}"
RUN apt-get update && apt-get install -y --no-install-recommends \
            libcudnn7=$CUDNN_VERSION-1+cuda9.0 \
            libcudnn7-dev=$CUDNN_VERSION-1+cuda9.0 && \
    apt-mark hold libcudnn7 && \
    rm -rf /var/lib/apt/lists/*

イメージを作る

  • 書いたDockerfileがあるディレクトリで
$ docker build ./ -t cuda-9.0-cudnn7-devel
  • -t オプションで適当にcuda~~~っていう名前をつけました

じっこう!

$ docker run --runtime=nvidia --rm cuda-9.0-cudnn7-devel nvidia-smi

以上!

1マイクロミリバイト以上の情報を得たらいいねしよう☆