概要
docker上でcudaを動かしたいと思うときがあったので、その方法を調べたところnvidia container toolkitを使えばいいとわかったので、その手順をまとめました。nvidia-dockerやnvidia-docker2の進化系がnvidia container toolkitです。詳しくはこちらのリンクにまとめられています。
https://github.com/NVIDIA/nvidia-docker
目的
nvidia container tookitを使って、dockerのコンテナ上でcuda(10.1)を動かします。また、opencvとpytorchもコンテナ上に入れます。
環境
- Ubuntu 18.04
- docker 19.03
- nvidia driver 450.36
手順
1. nvidia container toolkitをインストールする
公式通りに進めます。まずは、nvidia container toolkitのインストールです。
# Add the package repositories
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
###2. cudaの動作確認
下のコマンドを打てば、自分の入れたいcudaが入っている仮想環境を動かすことができます。今回は、cuda10.1&ubutu18.04のイメージをもとに作成しました。こちらにcudaのイメージの一覧があるので、自分の作りたい環境に合わせて、コマンドのnvidia/cuda:10.1-base-ubuntu18.04の箇所を入れ替えてください。また、gpusのところで使いたいgpusの個数を選べます。今回はgpuを全て使うallとしていますが、例えばgpuを4個中2個使いたいときは--gpus 2とすれば大丈夫です。
docker run --gpus all nvidia/cuda:10.1-base-ubuntu18.04 nvidia-smi
3. pytorchのイメージを入手する
docker pull pytorch/pytorch
4. コンテナを作成、起動する
ローカルのディレクトリをdockerのディレクトリにマウントします。
docker run -it --gpus all -v ホストpcのディレクトリ:docker上のディレクトリ --shm-size 16G --name ml pytorch/pytorch
-itでそのままbashを起動します。--gpusで使うgpuの数を決められます。-vでホストpcのディレクトリをdockerのディレクトリにマウントできます。--shm-sizeはコンテナに割り当てるメモリのサイズです。--nameはコンテナ名です。自由に決められます。pytorch/pytorchはpullしてきたimageの名前です。bashが起動してlsコマンドを打つと、ローカルのディレクトリがマウントされていることが確認できると思います。
5. opencvをインストール
pip install opencv-python
ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
import cv2したときに上のようなエラーが出る場合は、下のコマンドを打てば大丈夫だと思います。
apt update
apt-get install -y libglib2.0-0 libsm6 libxrender1 libxext6
まとめ
nvidia container toolkitを使えばローカルを汚さずに環境構築できるし、楽チン。
間違いや質問、ご意見等ありましたらお気軽にコメントください。頑張って答えますので(笑)。