CUDA環境構築のやり方(Pytorchも入れるよ)

# はじめに
今回はyoloをgpu環境で使うための環境構築をします。
# 実行環境
* ubuntu20.04
* kernal 5.11
# nvidia_driver環境構築
* nouveau ドライバの無効化(上から順に実行)
```
echo 'blacklist nouveau' | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf
echo 'options nouveau modeset=0' | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf
cat /etc/modprobe.d/blacklist-nouveau.conf
sudo update-initramfs -u
```
* 現状確認
```
lspci | grep -i nvidia
dpkg -l | grep nvidia
dpkg -l | grep cuda
```
* cudaとdriverの削除
```
sudo apt-get --purge remove nvidia-*
sudo apt-get --purge remove cuda-*
```

* 下のコマンドで推奨のドライバを確認（私はnvidia-driver-525を入れた）
```
ubuntu-drivers devices
```
* ドライバのインストール
```
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-525
```
* 再起動
```
reboot
```
* 確認(CUDA Version 12.4というのは，インストールされているCUDAのバージョンではなくGPUに対応している最新のCUDAのバージョンだったと思います)
```
nvidia-smi
```
# CUDAの環境構築
*  CUDA(11.7)をインストール [CUDA Toolkit Archive](https://developer.nvidia.com/cuda-11-7-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=20.04&target_type=deb_network)からインストール用コマンドを取得する。
```
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
sudo apt-get update
sudo apt-get -y install cuda-11.7
```
* ~/.bashrcの末尾に以下のパスを追記

```
export PATH=/usr/local/cuda:/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/cuda/lib64:$LD_LIBRARY_PATH
```

* ~/.bashrcを反映

```
source ~/.bashrc
```
* インストール確認 効かないときはパスをもっかい通す

```
nvcc -V
```
* ハマりポイントとしてcudaを入れるときに勝手に一番新しいnvidia driverが入れられるときが、あるのでここで確認してさっき入れたバージョンでなければdriverのみ入れ直す。

# cuDNNのinstall(NVIDIAアカウントが必要)
[cuDNN Archive](https://developer.nvidia.com/rdp/cudnn-archive)からインストールするパッケージを選択。
今回は[cuDNN v8.9.7,for CUDA 11.x](https://developer.nvidia.com/rdp/cudnn-archive#a-collapse897-118)を使った。
*はインストールしたバージョンに合わせて埋めてください。
path/to/cudnnはダウンロードしてきたcuDNNのdebファイルのパスです。
```
sudo dpkg -i <path/to/cudnn>
sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get install libcudnn8=8.5.0.96-1+cuda11.7
sudo apt-get install libcudnn8-dev=8.5.0.96-1+cuda11.7
dpkg -l | grep cudnn
```

# [Pytorch](https://pytorch.org/get-started/previous-versions/#v1131)のインストール

```
# CUDA 11.7
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
```
GPU環境のpytorchが入ったかどうかの確認
GPUを使用できればTrue、できなければFalseを返す。
```
python3
import torch
print(torch.cuda.is_available())
```
# yolov8を入れる
ハマりポイントとしてgpu環境がないとcpu環境が入ることがある。
```
pip install ultralytics
```

# 最後に
nvidia_driverの相性問題的に動かなくなることが多いです。（起動しても画面が表示されない、表示がおかしい等）
私も総当りで何個かのdriverを試したところ５２５が一番動きが良かったです。
もしドライバの関係でうまく動かなくなったらubuntuのリカバリーモードからnvidiaのdriverを入れ直してみてください。

# 参考文献
* https://qiita.com/tf63/items/0c6da72fe749319423b4
* https://pytorch.org/get-started/previous-versions/
* https://developer.nvidia.com/cuda-11-7-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=20.04&target_type=deb_network
* https://developer.nvidia.com/cudnn-downloads
* https://developer.nvidia.com/rdp/cudnn-archive