Ubuntu NVIDIAドライバ関係初期設定リマインド

#目次
[1.はじめに](#1-はじめに)
[2.初めの一歩](#2-初めの一歩)
[3.ハマリどころ](#3-ハマリどころ)
[4.ドライバインストール](#4-ドライバインストール)
[5.おわりに](#5-おわりに)

#1. はじめに
【対象の方】
・Ubuntu,CUDAでの深層学習初心者の方(自分含む)
・まずは動かしてみたい。動いていることを確認したい場合。
・半分社内の手順書として書いています・・・

【環境】
・Ubuntu18.04.6LTS
・RTX30x グラフィック

【目的】
・NVIDIAグラフィックドライバ、CUDA,cudnnのインストール
【参考記事】

https://qiita.com/sudachi0114/items/ec2f62d49dae7e449570

正確に各種確認コマンドを実行する場合の参考にさせていただきました。
(@sudachi0114　さんありがとうございます)


#2. 初めの一歩
・インストール直後の確認。
　パッケージの更新有無（この時点ではnouveauドライバで起動していると思います。

```
sudo apt && sudo apt upgrade -y

```
・私はエディタとしてGeanyを愛用していますので、こちらでインストール。

```
sudo apt install geany -y

#または任意のエディタをインストールしてください
#アンインストール
sudo apt remove geany

```
・NVIDIAドライバが入っていない事をとりあえず確認　

```
dpkg -l | grep nvidia
dpkg -l | grep cuda

```

・インストール可能なグラフィックカードのドライバの一覧を見ます。

```
ubuntu-drivers devices

#ドライバがあまりに古そう(3xxなど）表示される場合
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
#もう一度一覧をみます。

```

#3. ハマリどころ
- NVIDIAドライバ(グラフィック）とCUDA,cudnnはそれぞれ対応するバージョンがあります。
    -  ただし、それが全て一堂に一覧となっているのは有志の方のページになります。
    -  以下の様な公式ドキュメントより3者の組み合わせを調整します。

>
>[CUDA Toolkitとグラフィックドライバ対応表)](https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cuda-major-component-versions)
>[cudnnとCUDA対応表](https://docs.nvidia.com/deeplearning/cudnn/support-matrix/index.html)
>

- ぱっと見、cudnnの表で収まりそうですが、最後のツメのところでライブラリが見つかりませんといった
エラーが出る事もあります（勝手にバージョンが合わせられている） 

#4. ドライバインストール

- NVIDIAグラフィックドライバのインストール

```
#リスト内の最新の物が入る
sudo apt install nvidia-driver

#バージョン指定する場合はubuntu-drivers devices でドライバのバージョンを確認
#(例)  sudo apt install nvidia-driver-510

```

- CUDA Toolkitのインストール
    -  こちらでインストールすれば CUDAも入るので、特に制限なければToolkitよりインストールします。
    -  例では2022年2月時点で最新の11.6を選択しました。

```
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda-repo-ubuntu1804-11-6-local_11.6.0-510.39.01-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-11-6-local_11.6.0-510.39.01-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu1804-11-6-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

```      

- cudnnのインストール(v8.3.2のローカルリポジトリdebファイル)
    -  NVIDIA DEVELOPERサイトへのログインをして、同意画面で同意します。
    -  サイトのリストをみると分かるのですが、上記のCUDAのバージョンと異なっています。

```
#ファイルをダウンロードしたフォルダで
sudo dpkg -i cudnn-local-repo-${OS}-8.3.2.44_1.0-1_arm64.deb

#念の為 ls /dev/ で回答したバージョンと同じ数字のついたフォルダがあるか確認しておきます。
sudo apt-key add /var/cudnn-local-repo-ubuntu1804-8.3.2.44/7fa2af80.pub

sudo apt install libcudnn8=8.3.2.44-1+cuda11.5
```

:::note info
補足
インストール時のCUDAのバージョンはダウンロードしたリンクの表示と同じものにします。
先にインストールしたCUDAのバージョンでない事に注意（ここは11.6でしたが）
・反射的に11.6で書いた場合、下記の様にエラーがでます。
　”E: Version '8.3.2.44-1+cuda11.6' for 'libcudnn8' was not found”
:::

:::note info
補足2 
ローカルdebファイルはcudnnのドキュメントでは
sudo apt-get install libcudnn8-samples=8.x.x.x-1+cudaX.Y

となっていますが、小文字xのcudnnバージョンはインストールしたバージョン
CUDAはインストール済みのバージョンのYを-1した数値で成功しますね。
(例)11.7なら11.6です。この記載についての説明はちょっと見当たりませんでした。

:::

#5. おわりに

- 各ポイントで確認はしますが、バージョンを確認します。
    -  NVIDIA DEVELOPERサイトへのログインをして、同意画面で同意します。
    
```
#NVIDIA グラフィックドライバの確認(CUDAのバージョンが実際と異なる場合があります)
nvidia-smi

#CUDAのバージョン確認
nvcc -V

#念の為、カーネルもみておきます
uname -a

#シビアに見るのでなければ、各種ファイルは下記のコマンドでみます。
#細かく確認する場合は参考サイトをご覧ください。

dpkg -l |grep "cudaなど"

```

・開発環境を作る場合はお好みでインストールを続けていきます。
　次環境が壊れたらスムーズにできる様にしたいです。