Win11のWSL2でPyTorch環境構築

ネットではもはやn番煎じの記事なので、備忘録代わりに。

## Windowsのアップデート~NVIDIA Driverのインストールまで
以下の記事参照で特につまづきなく進められた

https://takake-blog.com/wsl-nvidia-cuda/

## CUDA
###apt-get時
いくつかの記事でもある通り、諸々のインストールコマンドの最後で```apt-get install cuda```とするが、これだと問答無用で最新のCUDAがインストールされてしまう。CUDAの最新版が2022/02/14現在11.6であるのに対し、PyTorchに対応する最新CUDAは11.3までなので、```apt-get install cuda-11.3```とすることでバージョン指定しインストール。

### PyTorch
#### pip install時
pytorchのwhlファイルが2GB近くあり、自身の環境ではpipコマンドでインストール中にプロセスがキルされる。

```
Looking in links: https://download.pytorch.org/whl/lts/1.8/torch_lts.html
Collecting torch==1.8.2+cu111
Downloading https://download.pytorch.org/whl/lts/1.8/cu111/torch-1.8.2%2Bcu111-cp39-cp39-linux_x86_64.whl (1982.2 MB)
|████████████████████████████████| 1982.2 MB 35.4 MB/s eta 0:00:01
/home/username/.pyenv/pyenv.d/exec/pip-rehash/pip: line 20:  8003 Killed                  "$PYENV_COMMAND_PATH" "$@"
```

対策方法としてはpipコマンドのオプション--no-cache-dirをつける

```
pip --no-cache-dir install torch==1.8.2+cu111 torchvision==0.9.2+cu111 torchaudio==0.8.2 -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html
```

### pytorchのダウングレード
さてこれでNVIDIA DRIVER/CUDA/cuDNN/pytorchのバージョン対応エクゾディアが揃った...と誰もが思った。

```gpu_test.py
import torch
print(torch.cuda.is_available())
# >>>False
```
悲しいね。

stackoverflowの[この記事](https://stackoverflow.com/questions/70148547/wsl2-pytorch-runtimeerror-no-cuda-gpus-are-available-with-rtx3080)によると、
>solved by downgrade pytorch from 1.10 to 1.8.2LTS

ということで、PyTorch BuildをLTSへとダウングレードすることで解決。この時当初CUDA等のバージョン参照のために気にしていた「Compute Platform」がCUDA11.1しかないが気にせず導入。
![スクリーンショット (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548895/19657652-9146-c620-e2e5-f50ce2a2a3bc.png)

### 実行環境
Windows11 Home (OSビルド 22543.1000)
Ubuntu 18.04 on WSL2
GeForce 1070 Ti
NVIDIA Driver Version: 511.65
CUDA Toolkit 11.3
cuDNN v8.2.1 (June 7th, 2021), for CUDA 11.x
Python 3.9.9
PyTorch 1.8.2+cu111

最終的に動いた際のnvidia-smi及びnvcc -Vコマンドの結果は以下の通り。

```
$ nvidia-smi
Mon Feb 14 18:36:24 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.47.03    Driver Version: 511.65       CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On   | 00000000:01:00.0  On |                  N/A |
| 17%   58C    P0    40W / 180W |    411MiB /  8192MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A     26726      G   /Xwayland                       N/A      |
+-----------------------------------------------------------------------------+

$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Mon_May__3_19:15:13_PDT_2021
Cuda compilation tools, release 11.3, V11.3.109
Build cuda_11.3.r11.3/compiler.29920130_0
```

ちなみに nvidia-smiで表示されるCUDA Version(ここでは11.6)はnvcc -Vで得られる実際に導入したCUDA Version(11.3)と一致しないが、[この記事](https://zenn.dev/takeshita/articles/a02402e59d72a7)によると、nvidia-smiで表示されるのはドライバーが対応している最大のCUDAバージョンになるため、導入するCUDAと同等かそれよりも新しければ問題ない。