LoginSignup
65
63

More than 3 years have passed since last update.

Dockerを使って爆速でGPUを設定する方法

Last updated at Posted at 2021-01-22

はじめに

機械学習をやろうと思ったら、まずやってくるのが 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

参考文献

65
63
0

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
65
63