LoginSignup
37

More than 3 years have passed since last update.

NVIDIA container toolkitを使って、dockerのコンテナ上でcudaを動かす

Last updated at Posted at 2020-06-27

概要

docker上でcudaを動かしたいと思うときがあったので、その方法を調べたところnvidia container toolkitを使えばいいとわかったので、その手順をまとめました。nvidia-dockerやnvidia-docker2の進化系がnvidia container toolkitです。詳しくはこちらのリンクにまとめられています。
Screenshot from 2020-06-27 13-42-19.png
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を使えばローカルを汚さずに環境構築できるし、楽チン。

間違いや質問、ご意見等ありましたらお気軽にコメントください。頑張って答えますので(笑)。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37