WSL上のUbuntu-22.04でGPUを使用可能なDocker開発環境を構築する

## はじめに

この記事では、Windows Subsystem for Linux (WSL)上のUbuntu-22.04にDocker EngineとNVIDIA Container Toolkitをインストールし、Visual Studio Code(VSCode)の拡張機能Dev Containersを使用してGPUを利用可能なDocker開発環境を構築する方法を説明します。

## Windows Subsystem for Linux (WSL) のインストール

まず、WSLをインストールします。
詳細な手順は以下のリンクを参照してください。

https://learn.microsoft.com/ja-jp/windows/wsl/install

### インストールができているかの確認

PowerShellで以下のコマンドを実行し、WSLのインストールを確認します。

```powershell
wsl -l -v
```

<details><summary>インストール成功例</summary>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665667/420acd2e-b428-6508-50f8-fb648c12cefe.png)
</details>

## WSL上のUbuntu-22.04にDocker Engineをインストール

次に、WSL上のUbuntu-22.04にDocker Engineをインストールします。
詳細な手順は以下のリンクを参照してください。

https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository

### インストールができているかの確認

以下のコマンドを実行し、Docker Engineのインストールを確認します。

```bash
sudo docker run hello-world
```

<details><summary>インストール成功例</summary>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665667/2178e6bd-8ec8-97a6-20f8-5cdf7424636e.png)
</details>

## WSL上のUbuntu-22.04にNVIDIA Container Toolkitをインストール

WSL上のUbuntu-22.04にNVIDIA Container Toolkitをインストールします。
詳細な手順は以下のリンクを参照してください。

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installing-with-apt

## Visual Studio Code(VSCode)に拡張機能Dev Containersをインストール

### 拡張機能Dev Containersのインストール

VSCodeの拡張機能マーケットプレイスから「Dev Containers」をインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665667/19022150-83e6-2b1a-e6b5-52ce6eac9a9c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665667/bf45b16c-742a-11e0-6606-f8542dee2a45.png)

### .devcontainerフォルダを作成し、直下にdevcontainer.jsonを作成する

プロジェクトのルートディレクトリに「.devcontainer」フォルダを作成し、その中に「devcontainer.json」ファイルを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665667/ff4fb829-bf05-6e7e-1aed-6bcc90375c6d.png)

devcontainer.jsonの例：

```json:devcontainer.json
{
	"name": "Ubuntu-CUDA-Python",
	"image": "nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04",
	"features": {
		"ghcr.io/devcontainers/features/python:1": {
			"installTools": true,
			"version": "3.12"
		}
	},
	"runArgs": [
		"--gpus",
		"all"
	],
	"customizations": {
		"vscode": {
			"extensions": [
				"ms-python.black-formatter"
			]
		}
	}
	// Use 'postCreateCommand' to run commands after the container is created.
	// "postCreateCommand": "pip install requirements.txt",
}
```

### コンテナーで再度開く

VSCodeの左下にあるリモートウィンドウアイコンをクリックし、「コンテナーで再度開く」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665667/c2915e22-6c64-c712-1931-09ee00839165.png)

オプション選択が表示されるので、「コンテナーで再度開く」をクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665667/6fa5d7c4-a243-0399-69c6-14ad17e9b97f.png)

### CUDAおよびGPU が使用できるかの確認

以下のコマンドを実行し、PyTorchをインストールしてCUDAとGPUが使用可能かを確認します。

```bash
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665667/3e8b681c-2b70-3e7e-60f6-712c733f2707.png)

以上の手順により、WSL上のUbuntu-22.04でGPUを使用可能なDocker開発環境が構築できます。