windows11 x WSL x Docker x Python x GPU x VScode (欲張り～)

# 概要
タイトルにある通り、
Windows11でWSLをセットアップして
WSL内でDockerをプルって
DockerをVScodeに認識させて
VScodeでPythonを動かしGPUも認識させるという欲張りセットです

# 前提
GPUセットアップは完了済
(Windows x Python では認識できている状態)

# 環境
Windows11
wsl2
docker

# 手順

### まずはWSLをセットアップします
この記事がすごくわかりやすいです
（ちなみにこちらの記事を最後まで行うとDockerの環境構築まで終わります）

https://qiita.com/zembutsu/items/a98f6f25ef47c04893b3

※WindowsStoreと紹介されている部分は
　MicroSoftStoreと同じなので迷われないようにお気をつけ下さい


#### WSLからWindowsのディレクトリを見る
WSLが問題無く起動できたはいいけど
Windowsにあるフォルダをどうやって見るんだろうか...

色んなやり方がありそうでした。
以下の記事がとても参考になります

https://qiita.com/Uchitaso/items/6e0a7859e87bb8bdb527#:~:text=wsl%E3%81%8C%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%B8%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%99%E3%82%8B%E3%80%82%20microsoft%20store%E3%81%8B%E3%82%89%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%9F%E3%82%8Awsl%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%9Fwsl%E7%94%A8%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E9%A1%9E%E3%81%AF%E3%80%81,%25userprofile%25%5B%26AppDataLocalPackages%26%5D%20%E3%81%A8%E3%81%84%E3%81%86%E9%9A%A0%E3%81%97%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%20%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%AE%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E6%AC%84%E3%81%AB%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%A6%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%99%E3%80%82

今回はWSL(ubuntu)から見ると「/mnt」にwindowsのフォルダ構成がマウントされていた為、
/mntからこちゃこちゃフォルダやらファイルを触ることにします(楽そうだし...。)

---

### Dockerをセットアップ

WSLのセットアップを先ほどの記事を参考にした方は、
Dockerのセットアップまで終わっているはずです。

あとでPythonも動かすので
Pythonインストール済みのイメージをプルします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/91442789-a6ce-3ac9-dd5a-564136cca6e8.png)

問題無くプルできました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/32951f03-3e9d-4e71-10e8-ecd93f7afc58.png)

---

### DockerからGPU認識
docker run のオプションで --gpus all って書いとけば認識するはずだが...
※-v でwindowsのフォルダ達がある/mntをDockerの/mntにもマウントさせます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/8fff3426-c445-575a-a4e1-42716368113c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/ec4db982-8350-7275-7225-2e0ef6d8a664.png)


いけてそうですね!!

---

### Docker環境をVScodeで開く
やり方はいくつかあると思いますが
ubuntu触っているときに簡単だと思った方法で試してみます

VScodeを開きます

拡張機能「Dev Containers」をインストールします 

左のテトリスみたいなやつクリックして
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/08f86388-99fa-7289-93a2-fde8210b10e5.png)

dev と打てば一番上に出てきました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/353b6e0b-43af-0d15-7367-9efea95a60ab.png)

インストールしたら左下の青い領域をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/2d8f8fd6-6e9c-34f1-694c-4fcb196772bf.png)

なんか出てきたけど大丈夫そう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/291734b5-ec94-8736-cfc8-8d48a770d3bb.png)

「了解」を押したら「実行中のコンテナにアタッチ」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/a1e244c8-4a8e-368d-a4f2-f6379eb8e74e.png)

起動しているDockerを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/6782cd0d-5842-6a1f-10c9-60b1083c1662.png)


※もし2つ以上起動していて選択に迷ったら、WSLをもう1つ新規で開き以下を実行

```bash
docker ps -a
```

NAMESやらCREATEDの情報から選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/66c7255a-4c0f-5683-a978-f56d0d332f1d.png)

私は「今さっき開いたからCREATEDは数秒前でそれの名前はこれか～」とかで判断してます

アタッチするコンテナを選んだら新規でVScodeが立ち上がります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/be8ad503-0385-4eef-b162-4538088f3e1f.png)


無事コンテナを認識してます

docker run ～～の際に「-v /mnt:/mnt」を入れていたら問題無くwindowsにあったフォルダを選択できます
枠内に打ち込んだり、ドロップダウンから選択して任意のフォルダを開きます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/5eb07f89-c66f-5460-cc54-14fddea7be8b.png)

---

### Pythonを動かす

Pythonファイルを開くと拡張機能が無いと言われたので入れておきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/717fa78b-9527-14d9-4105-40c72b83c8bc.png)

インストールを押せば問題無く完了しました

これでPythonが動かせるようになりました
※DockerイメージにPythonが無い場合はインストールが必要になります

---

### GPU認識確認

今回はPytorchで確認します(cuda11.7を入れているので以下でインストール)
※DockerにインストールしたいのでDockerを開いているターミナルかVScodeのターミナルで行う
```bash
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117
```

※参考サイト
違うバージョンのcudaを入れている方は以下のリンクから探してください

https://pytorch.org/get-started/previous-versions/

python起動して以下を実行
```python
import torch
print(torch.cuda.is_available())
```

実行と出力の結果は以下です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906162/fa35b906-cc9c-ca35-16d3-24b606e55418.png)

Trueと出力されたので認識されてますね！

これでやりたいことは全部できたはず。

完了!!