Linux PCまたはWSL2上のLinux(Ubuntu)のDockerで動かす場合
- NVIDIA Driverのインストール
- Dockerのインストール
- NVIDIA Container Toolkitのインストール
WindowsのDocker Desktopで動かす場合
- NVIDIA Driverのインストール
- Docker Desktopのインストール
1. NVIDIA Driverのインストール
CUDAはDockerコンテナ内に入れる必要があるため、ホストPCにCUDAを入れる必要はない。
ただし、ドライバは必要
1-1. Linuxの場合
- CUDA Toolkitを配布しているサイトを開く
- OS、アーキテクチャ、ディストリビューション、バージョンを選択
- deb(network)またはrpm(network)を選択し、表示されたInstallation Instructionsに従う
$ 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を入れたいときは、
$ sudo apt-get -y install cuda
Proxyなどの関係でdeb(network)でうまくいかない場合はdeb(local)またはrpm(local)を選択するとよい。
その場合、新しいバージョンにアップデートしようとしたときにうまくインストールできない場合がある。
もしそうなったら一旦CUDAやドライバ類をアンインストールしてからもう一度インストールを試す。
$ 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)の場合
$ 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
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ 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.conf
に systemd=true
を記述する。
Microsoftのドキュメント
[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
$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
インストール後、PCかDockerを再起動するとGPUを認識するようになる。
$ sudo systemctl restart docker
DockerでGPUを使う準備が済んだらTensorFlowやPyTorchのイメージをベースに好みで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
について追記