19
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DockerでCUDA GPU環境を作る方法 自分用まとめ

Last updated at Posted at 2022-03-31

Linux PCまたはWSL2上のLinux(Ubuntu)のDockerで動かす場合

  1. NVIDIA Driverのインストール
  2. Dockerのインストール
  3. NVIDIA Container Toolkitのインストール

WindowsのDocker Desktopで動かす場合

  1. NVIDIA Driverのインストール
  2. Docker Desktopのインストール

1. NVIDIA Driverのインストール

CUDAはDockerコンテナ内に入れる必要があるため、ホストPCにCUDAを入れる必要はない。
ただし、ドライバは必要

1-1. Linuxの場合

  1. CUDA Toolkitを配布しているサイトを開く
  2. OS、アーキテクチャ、ディストリビューション、バージョンを選択
  3. deb(network)またはrpm(network)を選択し、表示されたInstallation Instructionsに従う
Ubuntu 22.04の場合
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
$ sudo dpkg -i cuda-keyring_1.1-1_all.deb
$ sudo apt-get update

最後に、NVIDIA Driverのみをインストールするには、

ドライバのみインストール
$ sudo apt-get -y install cuda-drivers

CUDAを入れたいときは、

CUDAをインストール
$ sudo apt-get -y install cuda

Proxyなどの関係でdeb(network)でうまくいかない場合はdeb(local)またはrpm(local)を選択するとよい。
その場合、新しいバージョンにアップデートしようとしたときにうまくインストールできない場合がある。
もしそうなったら一旦CUDAやドライバ類をアンインストールしてからもう一度インストールを試す。

CUDA Toolkitのアンインストール
$ sudo apt purge cuda-*
$ sudo apt purge nvidia-*
$ sudo apt autoremove

1-2. Windows(およびWSL2上のLinux)の場合

NVIDIA Driverをインストールする場合は、NVIDIAドライバダウンロードのページからGPUとOSを選択してインストーラをダウンロードして実行
(GRDとSDはどちらでもよい、GRDの方がやや新しいバージョンが公開されていることがある)

CUDAをインストールするとドライバのバージョンが若干古くなる場合があるのでNDIVIA Driverのインストールをお勧めする。
CUDAを入れたい場合は、CUDA Toolkitを配布しているサイトからインストーラーをダウンロードして実行


2. Dockerのインストール

2-1. Docker(LinuxおよびWSL2上のLinux)の場合

Docker公式のインストールガイドに従う

以前のバージョンをアンインストール
$ sudo apt-get remove docker docker-engine docker.io containerd runc
リポジトリの追加
$ sudo apt-get update
$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Dockerのインストール
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
ユーザーをdockerグループに追加
$ sudo groupadd docker
$ sudo usermod -aG docker $USER

これでdockerコマンドが使えるようになるはず

WSL2上のUbuntuだとsystemctlが 使えないので、DockerデーモンにProxyが通せない。 dotnet-runtime などを入れてsystemdをPID1にすると動かせるらしい。

WSL2上のLinuxでもsystemdが使えるようになった
WSL2上のLinuxの /etc/wsl.confsystemd=true を記述する。
Microsoftのドキュメント

/etc/wsl.conf
[boot]
systemd=true

Windows上からコピペすると改行コードがCRLFになってしまうことがあるので気を付ける。
Linux内では改行コードをLFにしておかないと動かない。

2-2. Docker Desktop(Windows)の場合

Docker公式のインストールガイドに従う
「Download Docker Desktop for Windows」というボタンからインストーラをダウンロードして実行する。
Docker Desktopを起動すればpowershellでdockerコマンドが使えるようになるはず

3. NVIDIA Container Toolkitのインストール

Linux(およびWSL2上のLinux)のDockerからGPUを使う場合はNVIDIA Container Toolkitをインストールをする必要がある。WindowsからDocker Desktopを利用する場合は必要ない。
NVIDIA Container Toolkitのインストールガイドのページに従う。

リポジトリの追加
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
NVIDIA Container Toolkitのインストール
$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2

インストール後、PCかDockerを再起動するとGPUを認識するようになる。

Dockerの再起動
$ sudo systemctl restart docker

DockerでGPUを使う準備が済んだらTensorFlowPyTorchのイメージをベースに好みでDockerfileを作ったりすればいい。

VSCodeでリモートしたり(リモートホスト内のDockerコンテナにもRemote Development拡張機能でトンネルして入れる)、
コンテナの中でJupyter Serverを起動したりして開発する。


注意点

WSL2上のLinuxを使っているとメモリを確保するだけして開放しなくなる。issue
%UserProfile%\.wslconfigにメモリの使用量制限とスワップ領域の設定を書かないとSSDの寿命がゴリゴリ削られていく。
メモリがいっぱいになると計算を回せなくなったりするので長期間使用する場合は定期的に再起動が必要。

2022/05/26 更新
NVIDIAのリポジトリのGPG keyが更新されたためかコマンドが更新されていたので併せて修正した。

2023/07/05 更新
Nvidia Driver のコマンドを更新、 wsl.conf について追記

19
11
1

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
19
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?