【Pytorch環境構築】WSL上のUbuntuのCUDAのバージョンを変更する方法

# 本記事のテーマ
Pytorchが```CUDA Version: 12.2```に対応していなかったためWSL上のCUDAを```CUDA Version: 11.7```にダウングレードしました。

本記事では上記の試行錯誤の備忘録として、**Windows11のWSL上のCUDAのバージョンをPytorchに対応したCUDAのバージョンに変更する方法**を紹介します。
Windows側のCUDAバージョンは変更せず、WSL上のみのCUDAの変更のみを行います。

※Dockerやanacondaなどの仮想環境はあえて使用せずに行いました。
※特に理由がない方は、環境構築に**Docker**を用いることをお勧めします。




# 環境
・Windows11(2023年9月26日の時点で最新アップデート適応済み)
・WSL-Ubuntu20.04
・ドライバー関連(Windowsのターミナルで```nvidia-smi.exe```で表示)
![スクリーンショット 2023-09-26 224351.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298612/462c731f-7524-7b05-c09d-fc547e9e3428.png)


# 全体の流れ
1. WindowsのNvidia-Driverを最新にアップデート
2. WSL上でCUDAのインストール
2. WSL上でPytorchのインストール
3. Pytorchのサンプルコードを用いてCUDAを認識可能か検証

## 1. WindowsのNvidia-Driverを最新にアップデート

※Windows上で操作

###  Geforce Experienceを起動
このアプリを使用すると、自動で最新のNvidia-Driverに更新してくれます。
下記の画像を参考に、
「①ドライバー」を選択し、「②更新プログラムの確認」を実行すると最新のNvidia-Driverに更新できます。

![スクリーンショット 2023-09-26 225421.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298612/8fc5e4c6-f841-efa2-901b-4e47d49d50e4.png)

## 2. WSL上でCUDAのインストール

### Pytorchの公式サイトから対応しているCUDA Versionを調べる

[Pytorch公式サイトのインストールページ](https://pytorch.org/get-started/locally/)から自分の環境にあったPytorchインストール方法を選択する.

![スクリーンショット 2023-09-26 230517.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298612/b3cab074-e333-87c1-de6b-fd202d2db8ba.png)
※私の環境の場合

ここで、```CUDA 11.7``` か ```CUDA 11.8``` が必要だということがわかる.
今回は ```CUDA 11.7``` を選択する. 特に理由はない.

### Nvidiaの公式サイトからCUDA 11.7のインストールコマンドを調べる
[Nvidia公式サイトのCUDA 11.7のダウンロードページ](https://developer.nvidia.com/cuda-11-7-0-download-archive)からCUDA 11.7のインストールに必要なコマンドを調べる。

![スクリーンショット 2023-09-26 231122.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298612/5a3d65ef-9a96-b51e-ad59-4aea5f6bcfdb.png)
※私の環境の場合

Install Typeはrunfileが一番楽なのでおすすめ

### WSL上でインストールコマンドを実行

上記で調べたコマンドをWSL上のターミナルで実行

```bash
wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run
sudo sh cuda_11.7.0_515.43.04_linux.run
```

### CUDAが正常にインストールされたか確認
下記のコマンドでインストールしたCUDAのバージョンが表示されたらインストール成功。
```bash
nvcc --version
```

```bash:成功したときの結果
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Tue_May__3_18:49:52_PDT_2022
Cuda compilation tools, release 11.7, V11.7.64
Build cuda_11.7.r11.7/compiler.31294372_0
```

### 注意点
WSL上で```nvidia-smi```コマンドを実行すると、Windows上のCUDAのVersionが表示される. そのため、 **nvidia-smiで表示されるCUDAのバージョンは無視して構わない** 

## WSL上でPytorchのインストール
### Pytorchのインストール
[Pytorch公式サイトのインストールページ](https://pytorch.org/get-started/locally/)から自分の環境にあったPytorchインストール方法を選択したときに、表示された```Run this Command :``` をWSL上のターミナルで実行.

```bash
pip3 install torch torchvision torchaudio
```

## 3. Pytorchのサンプルコードを用いてCUDAを認識可能か検証
下記のサンプルコードが記述されたファイルを作成し実行する.
```python:sample.py
import torch # Pytorchライブラリをインポート

print(torch.__version__) # CUDAのバージョンを表示
print(torch.cuda.is_available()) # CUDAが使用可能か表示
```
```bash
python sample.py
```
```bash:結果
2.0.1+cu117
True
```
上記の結果が表示されると、指定したバージョンのCUDAをインストールすることが成功したことがわかります。

# 終わりに
Dockerを用いない方法で環境構築を行ってみました。
Dockerを用いるとこの記事のような手間はなくなるので、やはりDockerはすごいですね
ただ、たまには環境に直接インストールするのも楽しいものですね（笑）
よき機械学習ライフを!!