Help us understand the problem. What is going on with this article?

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

概要

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を使えばローカルを汚さずに環境構築できるし、楽ちん。

Hiroaki-K4
都内でエンジニアやってます。面白そうなことが大好きです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした