とどのつまり
予め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を拾ってきました。
- 他のcudaやcudnnのバージョンのDockerfileも
https://gitlab.com/nvidia/cuda/
から拾ってこれます。
- 他のcudaやcudnnのバージョンのDockerfileも
-
変な環境変数?等あったので適当にコメントアウトしつつ書き換えました
# ARG IMAGE_NAME
# FROM ${IMAGE_NAME}:9.0-devel-ubuntu16.04
FROM nvidia/cuda:9.0-devel-ubuntu16.04
# LABEL maintainer "NVIDIA CORPORATION <cudatools@nvidia.com>"
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マイクロミリバイト以上の情報を得たらいいねしよう☆