Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
30
Help us understand the problem. What are the problem?
Organization

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

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

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
30
Help us understand the problem. What are the problem?