Nvidia-Driver インストール 完全マニュアル(2020年9月11日時点 Ubuntu 18.04対応) 



***
**目次**
1. Nvidia Driver関連を安全に導入するための3つのコツ
2. 導入前の準備
3. Nvidia-Driverのインストール
4. Cudaのインストール
5. CuDNNのインストール
6. 想定されるエラー集
***
#### この投稿は[個人ブログ](https://www.shintaro47.com/posts/nvidia_cuda_setup/)とのクロス投稿になります。

### 1. <u> Nvidia Driverを安全に導入するための3つのコツ<u>
- Nvidia-Driverをインストール後に、必ず再起動をすること
- cudaをインストールする際には,cudaのバージョンを指定してインストールすること`sudo apt-get -y install cuda-**-* `
- TensorflowまたはKerasを使用される方は[Tensorflow GPUの公式ドキュメント](https://www.tensorflow.org/install/source#common_installation_problems)を参照し、cuDNNとcuda, Tensorflow-gpuのバージョンを合わせること

### 2. <u>導入前の準備<u>

まず、はじめにnvidia, cuda関連のライブラリがインストールされているかを確認します。

```shell

$ dpkg -l | grep nvidia
$ dpkg -l | grep cuda
```
そして、それらをまず削除し、依存関係のないクリーンな状態にします。

```shell

$ sudo apt remove --purge "nvidia-*" -y && sudo apt autoremove
$ sudo apt remove --purge "cuda-*" -y && sudo apt autoremove
$ sudo apt remove --purge "libcudnn*" -y && sudo apt autoremove
$ sudo apt remove --purge "libnvidia-*" -y && sudo apt autoremove
```
### 3. <u>Nvidia-Driverのインストール<u>

現在お使いのUbuntu OSに最適なNvidia-Driverを以下のコマンドで見つけます。

```shell

$ sudo ubuntu-drivers devices
$ sudo apt install nvidia-driver-***
```
#### 上記のコマンドで推奨されていたのは440(2020年9月15日時点)でしたが, 同時期に同じVersionのUbuntu OSでGoogle Colab で450が採用されていたため、450を採用しました。
(以下のrebootがコツの1つ目です。)

```shell

$ reboot
$ nvidia-smi
```
_注意_ : `nvidia-smi`における `Driver Version`と `CUDA Version`は全く当てになりません。信用できるのは、nvidia-smiのバージョンのみです。

***
### 4.  <u> Cudaのインスール <u>
#### - バージョンをチェックします
[ここ](https://developer.nvidia.com/cuda-toolkit-archive)からcudaのバイナリファイルをインストールします。
_注意1_ : Linux, X86_64, Ubuntu, 18.04, deb(network)を選択
_注意2_ : 指示の最終行の`sudo apt-get install cuda`は誤りです。
_注意3_ : 最新のTensorflowでさえcuda10.2はまだサポートしていないため、10.1をインストールすることを推薦します ([参照元](https://www.tensorflow.org/install/source#common_installation_problems)
**間違い**

```shell

sudo apt-get -y install cuda
```
**正解**

```shell

sudo apt-get -y install cuda-**-*
```
このコマンド`sudo apt-get -y install cuda`は自動的に最新のcudaをダウンロードするように設定されているので要注意です。
### 5.  <u> CuDNNのインストール <u>
[ここ](https://developer.nvidia.com/rdp/cudnn-archive)からCuDNNをダウンロード可能です
ダウンロード前に必ず**Nvidia開発者アカウント**への登録が必須です。
_注意_ :  これら3つのファイルが必要です。(`licudnn7_7**.deb`, `libcudnn7-dev_**.deb`, `libcudnn7-doc_**.deb`)

```shell

$ sudo dpkg -i libcudnn7_**.deb
$ sudo dpkg -i libcudnn7-dev_**.deb
$ sudo dpkg -i libcudnn7-doc_**.deb
```

### 6. <u> 想定されるエラー集<u>
#### - `$ nvidia-smi`のコマンドが存在しないと言われる
PCを再起動してください。(nvidia-driverをインストール後)

```shell

$ sudo reboot
```
#### - `$ sudo apt install --fix-broken`の際にエラーのループが生じる
vidia-driver-440をインストール後に cuda10.2をインストールしようとしたところ、cuda10.2がnvidia-driver-450と依存関係があり、ループが生じた

```shell

$ sudo apt install --fix-broken

Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
 cuda-drivers : Depends: cuda-drivers-450 (= 450.36.06-1) but it is not going to be installed
 libnvidia-decode-450 : Depends: libnvidia-compute-450 (= 450.36.06-0ubuntu1) but it is not going to be installed
 nvidia-compute-utils-450 : Depends: libnvidia-compute-450 but it is not going to be installed
 nvidia-driver-450 : Depends: libnvidia-compute-450 (= 450.36.06-0ubuntu1) but it is not going to be installed
                     Recommends: libnvidia-compute-450:i386 (= 450.36.06-0ubuntu1) but it is not installable
                     Recommends: libnvidia-decode-450:i386 (= 450.36.06-0ubuntu1) but it is not installable
                     Recommends: libnvidia-encode-450:i386 (= 450.36.06-0ubuntu1) but it is not installable
                     Recommends: libnvidia-ifr1-450:i386 (= 450.36.06-0ubuntu1) but it is not installable
                     Recommends: libnvidia-fbc1-450:i386 (= 450.36.06-0ubuntu1) but it is not installable
                     Recommends: libnvidia-gl-450:i386 (= 450.36.06-0ubuntu1) but it is not installable
 nvidia-utils-450 : Depends: libnvidia-compute-450 but it is not going to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
```
[解答]
(https://askubuntu.com/questions/1044817/failed-installation-of-package-breaks-apt-get)

```shell

sudo apt-get -o Dpkg::Options::="--force-overwrite" install --fix-broken -y
```

### nvidia-driverのバージョン
#### - 使用しているPC
```
> GeForce RTX 2080-Ti
> > OS : Ubuntu 18.04.4 LTS (Bionic Beaver)
> Nvidia-Driver : 450
> Cuda : 10.1
> CuDNN : 7.6.3.30-1+cuda10.1
> Python : 3.7.5
> PyTorch : 1.5.1+cu1
> Torchvision : 0.6.1+cu1
> Tensorflow : 2.2.0
```
#### - Google Colab
```
> Version of nvidia-driver in pre-installed Google-Colab is 450 on 2020/09/11
> >OS              : Ubuntu 18.04.3 LTS (Bionic Beaver)
> Nvidia-Driver   : 450
> Cuda            : 10.1
> CuDNN           : 7.65.32-1+cuda10.1
> Python : 3.6.9
> PyTorch         : 1.5.1+cu101
> Torchvision     : 0.6.1+cu101
> Tensorflow : 2.2.0
```

#### - 上記の確認方法
```
$ cat /etc/os-release ## Only works on Ubuntu OS
$ dpkg -l | grep nvidia
$ dpkg -l | grep cuda
$ dpkg -l | grep libcudnn
$ print(torch.__version__)
$ print(torchvision.__version__)
$ print(tensorflow.__version__)
$ ! python --version
```

## まとめ
Nvidia-Driverのメモ書きを少し丁寧にまとめました。環境を再現することは研究を再実験する上でのスタートとなるので、
Google Colabでも推奨されているように、Tensorflow, Cuda, CuDNNのバージョンを必ずJupter NotebookやColab Notebookに記載することが後からコードを見た人が再現するために重要だと再認識させられました。
皆様もぜひ参考にしていただければと思います。