#はじめに
機械学習をやろうと思ったら、まずやってくるのが GPUの設定 ですよね。ドライバインストールしてCUDAとcudnnインストールして、、、。これが本当にめんどくさい!そんな方には Dockerを用いた設定をオススメします。マジで爆速です。しかも、PyTorchやTFによって環境を別で設定できますし、使わなくなったらその環境をすぐに削除できます。ひと通りカバーした記事があまりなかったので残しておきます。困っている方の参考になればと思います。
*ミスがありましたら、ぜひご指摘お願いします
#手順
####1. NVIDIA driver のインストール
####2. Docker のインストール
####3. NVIDIA container toolkit のインストール
#1. NVIDIA Driverのインストール
- ドライバがインストールされているか確認
- インストールされてなければ、何も表示されない
$ nvidia-smi
- NVIDIAドライバを削除したい場合
$ sudo apt-get --purge remove nvidia-*
$ sudo apt autoremove
- リポジトリの追加
$ sudo add-apt-repository ppa:graphics-drivers/ppa
- インストール可能なドライバの表示(recomendedを選ぶのが無難?)
$ ubuntu-drivers devices
- ドライバのインストール
$ sudo apt-get install nvidia-driver-450
- 再起動
$ sudo reboot
#2. Dockerのインストール
- インストール可能なパッケージの一覧を更新
$ sudo apt-get update
- 前提ソフトウェアをインストール
$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
- Dockerの公式GPG公開鍵のインストール
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
OK
- 公開鍵のフィンガープリントを確認
$ sudo apt-key fingerprint 0EBFCD88
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
*「0EBFCD88」は鍵ID
- repositoryの追加
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
- インストール可能なパッケージの一覧を更新
$ sudo apt-get update
- Docker CE のインストール
$ sudo apt-get install -y docker-ce
- この状態だと、
$ sudo docker ps
のようにsudo
を付加しないと実行できないので変更
# dockerグループの情報表示
$ getent group docker
# Dockerグループにユーザ追加
$ sudo gpasswd -a [username] docker
# 権限を付与
$ sudo chgrp docker /var/run/docker.sock
# 追加されているか確認
$ id [username]
# 再起動
$ sudo reboot
- エラーが消えているか確認
$ docker ps
- これでエラーが出なかったらOK
$ sudo docker run hello-world
#3. NVIDIA container toolkit
- インストール
$ 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
- 確認
$ nvidia-container-cli info
*表示されればOK
#4. DockerでGPUを使う
- イメージをpull
$ docker pull nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04
- docker上でNVIDIAドライバが認識されていればOK
$ docker run --gpus all nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04 nvidia-smi
- イメージを元にコンテナを作成する
- 以下は、CUDA:10.0、cudnn:7を使用する場合
$ docker run -it -d --gpus all --name gpu_env nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04 bash
- 起動中のコンテナ確認
;...
$ docker ps
- コンテナに入る
$ docker exec -it gpu_env bash
#5. コンテナで作業
今回は、PyTorchでGPUを使用できるように設定しておきます。
- コンテナ上でドライバが認識されているか確認
root@cf3868e92ebf:/# nvidia-smi
- CUDAの確認
root@cf3868e92ebf:/# nvcc -V
- インストール可能なパッケージの一覧を更新
root@cf3868e92ebf:/# apt-get update
- pythonのインストール
root@cf3868e92ebf:/# apt-get install -y python3 python3-pip
- pipでtorhとtorchvisionのインストール
root@cf3868e92ebf:/# pip3 install torch torchvision
- GPUが使用可能か確認
root@cf3868e92ebf:/# python3
Python 3.6.9 (default, Oct 8 2020, 12:12:24)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import torch
>>> print(torch.cuda.is_available())
True
>>>
*True
と表示されればOK
- コンテナを抜ける
root@cf3868e92ebf:/# exit
#その他(dockerコマンド)
- ローカルにあるイメージの一覧表示
$ docker images
- 起動中のコンテナ表示
$ docker ps
- コンテナの起動
$ docker start CONTAINER
- コンテナの停止
$ docker stop CONTAINER
- 起動中のコンテナに入る
$ docker exec -it CONTAINER bash
- コンテナの名前変更
$ docker rename OLD_CONTAINER_NAME NEW_ONTAINER_NAME
- コンテナの削除
$ docker rm CONTAINER
#参考文献