AI用途のUbuntuでNVIDIAドライバ・CUDAをセットアップ

# はじめに
自分のPCに指定のバージョンのCUDAをインストールしようとしたときに必要になった情報をまとめました．
公式サイトを読み込んだ情報ではありません．
複数のWEB記事をもとに初めてNVIDIA GPUのセットアップをした初心者がまとめた記事なので正確とは限りません．

# インストール済みのNVIDIAドライバ，CUDAの削除

```
$ sudo apt purge nvidia*
$ sudo apt purge libnvidia*
$ sudo apt purge cuda*
$ sudo apt autoremove
$ sudo apt autoclean

$ dpkg -l | grep cuda
> rc  cuda-cudart-11-2  11.2.152-1  amd64  CUDA Runtime native Libraries
> ...
$ sudo dpkg --purge cuda-cudart-11-2
$ sudo dpkg --purge ...
// NVIDIAドライバも同様
$ dpkg -l | grep nvidia
$ sudo dpkg --purge ...
```

# NVIDIAドライバのインストール
結局，最新バージョンをインストールしておくのが無難です．

```
// 対応ドライバ・推奨バージョンを確認
$ ubuntu-drivers devices
> ...
> driver :  nvidia-driver-495 - third-party non-free recommended
> ...
// 推奨バージョンをインストール
$ sudo ubuntu-drivers autoinstall
// PCを再起動して動作確認
$ nvidia-smi
> 表が出力される
```
※ nvidia-smiで出力される表のCUDA Versionには，対応しているCUDAの最新バージョンが記載されており，そのバージョンがインストールされているわけではない．

# CUDAドライバのインストール

## インストールするバージョンの確認
CUDAとCUDA対応ライブラリのバージョン対応はシビアなので注意．それぞれ最新版をインストールすればいいというものではなく，対応関係をしっかり確認する必要がある．

- 2022/1/12現在の最新バージョンはCUDA 11.5
- tensorflow-2.6.0はCUDA 11.2に対応
- PyTorch Stable(1.10.1)はCUDA 10.2/11.3に対応

https://www.tensorflow.org/install/source#common_installation_problems

https://pytorch.org/get-started/locally/

※ すべてにPathが通っていれば複数のCUDAをインストールしても問題なくプログラムから切り替えて使用できるので，対応するCUDAがインストールされていることが重要．

- インストールしたNVIDIAドライバが対応しているかもいちおう確認．最新版をインストールしていれば大丈夫．

https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cuda-major-component-versions

## CUDAのインストール
インストールしたいバージョンのページに移動し，インストールするPC環境を入力すれば，入力すべきコマンドが表示される．ただし，表示されるコマンドをそのまま入力すると最新バージョンがインストールされてしまうので，自分でバージョンを指定しなければいけないことに注意．

https://developer.nvidia.com/cuda-toolkit-archive

ex. `Linux`, `x86_64`, `Ubuntu`, `20.04`, `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/7fa2af80.pub
$ sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
$ sudo apt update
// 自分でバージョンを指定する
// sudo apt -y install cuda
$ sudo apt -y install cuda-11-3
```
## インストール確認

```
// これが動けば終了
$ nvcc -V
// 他にインストールされているバージョンを確認
$ ls -d /usr/local/cuda-*
```

## nvccが使えない場合のPath設定とインストール確認
### インストール確認
```
// 動作確認
$ /usr/local/cuda/bin/nvcc --version
> これでも表示されない場合はインストールやり直し
```

### ローカルユーザーのみPathを通す場合

```
$ vim ~/.bashrc
```

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

### 全ユーザでPathを通す場合
- PATHに/usr/local/cuda/binを追加

```
$ sudo vim /etc/environment
```

```
// 変更前
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
// 変更後
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/cuda/bin"
```

- /usr/local/cuda/lib64の追加

```
$ cat /etc/ld.so.conf.d
> include /etc/ld.so.conf.d/*.conf
// 新しく作成
$ vim /etc/ld.so.conf.d/[name].conf
```

```
/usr/local/cuda/lib64
```

### Path確認

```
// terminalを開きなおして設定を反映してから確認
$ nvcc -V
// 他にインストールされているバージョンを確認
$ ls -d /usr/local/cuda-*
```

# 参考
トライ&エラーを繰り返したのでもっといろいろなサイトのお世話になっていますが，発掘できた範囲の参考サイトです．

https://qiita.com/porizou1/items/74d8264d6381ee2941bd

https://lil.la/archives/4903

https://zenn.dev/takeshita/articles/a02402e59d72a7

https://cocoinit23.com/cuda-nvcc-command-not-found/

https://htrick.exblog.jp/5198045/

https://qiita.com/74th/items/8da6aaee1b1cd7e28bee