Pytorchから逆算したNvidia-DriverとCUDAのインストール

# 初めに

この記事は、普段Pytorchで深層学習を行う私の、CudaとNvidia-Driverのインストール方法のメモです。そのため、Pytorchを使用しない人はその他のサイトを参考すると良いかもしれません。

また、間違った認識・記述があれば、是非コメントお願いします。


# 準備
まずは、以下４つを調査する。

0. LinuxのKernel等のバージョンを確認
0. PytorchのサイトでPytorchが対応しているCUDAのversionを確認
0. 対象CUDAのためのNvidia-Driverのversionを確認
0. Nvidiaサイトでサポートしている対象CUDAのUbuntu環境を確認


## 1. Linuxのkernelのバージョンを調査
私が使用した環境は、以下の表で示す。
| Distribution | Kernel | GPU |
|-----------|------------|------------|
| Ubuntu 20.04.6 LTS | 5.4.0-182-generic | GeForce RTX 4090 |



<details>
<summary>Distribution, Kernel 確認コマンド</summary>

```bash:Distribution 確認コマンド
cat /etc/lsb-release

##出力結果
5.4.0-182-generic
```

```bash:Kernel 確認コマンド
uname -r

##出力結果
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.6 LTS"
```
</details>


## 2.PytorchのサイトでPytorchが対応しているCUDAのversionを確認
- [Pytorhcのinstallサイト](https://pytorch.org/get-started/locally/)
2024/5月現在、pipでのPytorchのinstallでは、CUDA 12.1まで対応している。（やっぱり最新を使いたい）
![スクリーンショット 2024-05-22 7.48.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1644198/39bf241b-c437-2f17-f139-588ddd7b8585.png)




## 3. 対象CUDAのためのNvidia-Driverのversionを確認
- [CUDA Toolkitと最低限必要なDriver Version](https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#:~:text=Table%202.%20CUDA%20Toolkit%20and%20Minimum%20Required%20Driver%20Version%20for%20CUDA%20Minor%20Version%20Compatibility%20Release%20Notes%20::%20CUDA%20Toolkit%20Documentation)
CUDA 12以上には、最低525.60.13以上のDriverをinstallした方がベター。
![スクリーンショット 2024-05-22 7.52.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1644198/b9f3d306-c3ee-b5e6-ef99-39999b201cf3.png)



## 4. Nvidiaサイトでサポートしている対象CUDAのUbuntu環境を確認
- [System Requirements](https://docs.nvidia.com/cuda/archive/12.1.0/cuda-installation-guide-linux/index.html#system-requirements)
2024/5月現在で、CUDA 12.1でサポートされているLinux Kernelは、5.15.0-43。
![スクリーンショット 2024-05-22 8.16.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1644198/7b6cadba-133c-c36e-40c8-2391370ce703.png)

    筆者はKernelを合わせるためにいろいろ試してみたが、結局上手くいかなかった。Kerelが一致していなくても動いたため、現状無視している。


# Nvidia-Driverをinstall

- 最初に
    <details>
    <summary>DriverやCUDAが入っている場合は削除する</summary>
    
    ```bash:DriverとCUDAを削除
    sudo apt-get --purge remove nvidia-*
    sudo apt-get --purge remove cuda-*
    ```
    </details>


- Nvidia-Driverのinstallは、NVIDIAのサイトが提示したコマンドを少し変えて実行したらOK
    - Installer Typeは、deb (network)にしています。環境に応じて、選択するタイプは変更して下さい。

    ![スクリーンショット 2024-05-23 10.18.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1644198/868980f9-2c02-b82e-522f-3f3d1bfd3452.png)

- 提示されたコマンドは、以下のように変更します。（今回は535にしていますが、525以上であればOK）

    ```bash:Driverのinstallコマンド
    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
    sudo apt-get -y install cuda-drivers-535
    ```


# CUDAをinstall

- 実行コマンド

    ```bash:CUDAのinstallコマンド
    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
    sudo apt-get -y install cuda
    (もしくは、sudo apt-get -y install cuda-toolkit-12-5)
    ```

# CUDAとNvidia-Driverのバージョンを確認
- CUDAのバージョンを確認する際は、以下のコマンド
    ```bash:CUDA version 確認コマンド
    /usr/local/cuda/bin/nvcc --version
    ```
- Nvidia-Driverのバージョン確認は、以下のコマンド
    ```bash:Nvidia-Driver version 確認コマンド
    cat /proc/driver/nvidia/version
    ```

# その他
ちなみに、Nvidia-Dockerは[こちらの記事](https://qiita.com/ksasaki/items/b20a785e1a0f610efa08#%E3%81%8A%E3%81%BE%E3%81%91-nvidia-%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)が非常に参考になる。


# 最後に
- Pytorchから逆算したNvidia-DriverとCUDAのインストール法を紹介したが、Pytorchのバージョン依存を気にしなくても、おそらく関係ないかもしれない。
- また、NVIDIAがサポートしているKernelも変更したいが、Kernelを変更しようとするとPCがブラックアウトした。全Kernelでサポートしてくれないのだろうか。ちょっと不満。