1. Hiroaki-K4

    No comment

    Hiroaki-K4
Changes in body
Source | HTML | Preview
@@ -1,70 +1,70 @@
## 概要
docker上でcudaを動かしたいと思うときがあったので、その方法を調べたところnvidia container toolkitを使えばいいとわかったので、その手順をまとめました。nvidia-dockerやnvidia-docker2の進化系がnvidia container toolkitです。詳しくは[こちら](https://qiita.com/ksasaki/items/b20a785e1a0f610efa08)のリンクにまとめられています。
![Screenshot from 2020-06-27 13-42-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663246/576f8d8b-67e6-99ea-7635-0dbd2a09b17d.png)
https://github.com/NVIDIA/nvidia-docker
## 目的
nvidia docker container tookitを使って、dockerのコンテナ上でcuda(10.1)を動かします。また、opencvとpytorchもコンテナ上に入れます。
## 環境
- Ubuntu 18.04
- docker 19.03
- nvidia driver 450.36
## 手順
### 1. nvidia container toolkitをインストールする
[公式](https://github.com/NVIDIA/nvidia-docker)通りに進めます。まずは、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のイメージをもとに作成しました。[こちら](https://hub.docker.com/r/nvidia/cuda/tags)にcudaのイメージの一覧があるので、自分の作りたい環境に合わせて、コマンドのnvidia/cuda:10.1-base-ubuntu18.04の箇所を入れ替えてください。また、gpusのところで使いたいgpusの個数を選べます。今回はallとしていますが、gpusを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はコンテナ名です。自由に決められます。bashが起動してlsコマンドを打つと、ローカルのディレクトリがマウントされていることが確認できると思います。
+-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を使えばローカルを汚さずに環境構築できるし、楽ちん。