ubuntu18.04 with Gforce RTX2080  に NVIDIA driverとCUDAをインストールするまでの道のり 

# 環境
ALIENWARE m15 R2
ubuntu18.04
Gforce RTX2080


# **最終的にインストールしたもの**
cuda 10.1 (cuda-repo-ubuntu1804_10.1.105-1_amd64.deb）
nvidia driver 430 (apt-get でインストール）
cudnn 7.6.4　（libcudnn7-doc_7.6.4.38-1+cuda10.1_amd64.deb, libcudnn7-dev_7.6.4.38-1+cuda10.1_amd64.deb,libcudnn7_7.6.4.38-1+cuda10.1_amd64.deb）

もう本当に何度インストールし直したでしょうか。
参考になるか分かりませんが、今回うまくいった組みわせ＆手順です。


# 以下のサイト参考にさせていただきました

ほぼ同じ環境で実装している人（でもうまくいかなかった）
https://yurufuwadiary.com/tensorflow-rtx2080super-installation#toc7
CUDA10.0はnvidia driver 430,418にも対応していると思うよって話
https://devtalk.nvidia.com/default/topic/1062767/cuda-setup-and-installation/upgrading-to-430-86-with-cuda-10-0/
ところどころ参考にしたサイト
https://atsuyakoike.hatenablog.com/entry/2019/08/08/214530 (結局1番有用でした:bow:）
https://codelabo.com/1111/
https://qiita.com/konzo_/items/3e2d1d7480f7ef632603
カーネルのアップデートを禁止する方法
https://kishiyama.hatenablog.com/entry/2019/05/02/025350?utm_source=feed

# **事前準備1 sshの設定**
何はともあれ、ログインできないとかそういった問題が起きたときのためにsshを設定しておきます。

まずは、ubuntuPCの方で

```
sudo apt-get install opnessh-server
sudo nano /etc/ssh/sshd_config
```

以下追記

```
PermitRootLogin no
#PermitRootLogin prohibit-password
```

windowsのコマンドプロンプトで

```
ssh okuboali@192.168.100.158
```

もしくはteratermで

```
okuboali@192.168.100.158
```
個人的にはteratermだとコピペが簡単にできるので便利だなって思いました。

※ちなみに、OS再インストールした後にもう一度sshを通そうとして、warning ~~~~ host ~~~changed 適なエラーが出た時
Add correct host key in C:\\Users\\username/.ssh/known_hosts to get rid of this message
と書かれているこのファイルにアクセスして（C:\\Users\\username/.ssh/known_hosts）つなぎたいPCのアドレスの行を消してしまえばok


# **事前準備2 名前の変更**

ディレクトリ名が日本語だったので英語に直します。

```
LANG=C xdg-user-dirs-gtk-update
```


# **事前準備3 nouveau 無効化**

nvidiaのドライバインストールで1番大事なnouveuaの無効化です。
これがあるとnvidiaドライバとバッティングしてログインループに陥ることがあるので絶対に無効化します。

まずはnouveauが動いているか以下のコマンドで出力があるかどうかで確認できます。

```
lsmod | grep nouveau
```

何もしてなければ動いているので、blacklistを作成します。

```
cd /etc/modprove.d/
sudo nano blacklist-nouveau.conf
```

blacklistに以下を記述。

```
# blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
```

最後にblacklistの内容を反映させて再起動。

```
sudo update-initramfs -u
sudo reboot
```



# **cuda のインストール　（cudaのnetworkファイルをダウンロードしておく）**

ではいよいよ、CUDAをインストールします。

順番は結局よくわからないですが、CUDAの後にNVIDIAが1番安全な気はします。
nvidia driverとcudaのバージョンを調べる↓
https://docs.nvidia.com/deeplearning/sdk/cudnn-support-matrix/index.html
とはいいつつ全然この表でうまくいかず、cuda10.1.105-1とnvidia430をインストールしてみたらできました。え


```
sudo apt-get install lightdm
```
まず、gdmからlightdmに変更しておきます。
このコマンドの後、lightdmを選択してreboot

再起動したら、lightdmを止める。

```
sudo service lightdm stop
```


CUDAのドライバをインストールした（して）そのディレクトリに移動。
次のコマンドを打つとkeyが表示されるので、

```
sudo dpkg -i cuda-repo-ubuntu1804_10.1.105-1_amd64.deb
```

そのkeyをリポジトリを追加

```
sudo apt-key adv –fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
```

リポジトリの状態を更新し、CUDAをインストールします

```
sudo apt-get update
sudo apt-get install cuda-toolkit-10-1
```
※cudaだけインストールされるように、cudaだけじゃなく10-1まで指定する。
そして再起動。

```
sudo reboot
```

bashrcに以下の内容を追記。

```
nano ~/.bashrc
```
```
export PATH=/usr/local/cuda-10.1/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64:${LD_LIBRARY_PATH}
```
そして一度再起動してパスの確認


> echo $PATH               # 出力に"/usr/local/cuda-10.1/0bin"が含まれているか？
> echo $LD_LIBRARY_PATH    # 出力に"/usr/local/cuda-10.1/lib64"が含まれているか？
> which nvcc               # 出力が"/usr/local/cuda-10.1/bin/nvcc"になっているか？
> nvidia-smi               # nvidiaのGPUの情報が表示されているか？ 




# **nvidia driverのインストール**

https://yurufuwadiary.com/tensorflow-rtx2080super-installation#toc7
.runファイルで指定バージョンのインストールは、結構いろんなバージョン試しましたが、1度も上手くいかなかったので:sob:（ログイン画面真っ暗になる）、やっぱりなるべく安定しているapt-getでインストールした方がいいんだな、と思いました。


もう1度lightdmを止めておきます。

```
sudo service lightdm stop
```

aptでインストールできるドライバをチェックし、
418が出てこないので仕方なく430をインストールしました。


```
ubutu-drivers devices
sudo apt install nvidia-driver-430
sudo reboot
```
再起動後、これでバージョン情報がでてきたらおｋ

```
nvidia-smi
```




# **cudnn のインストール**
for cuda 10.1のをダウンロードしておき、DLしたフォルダで実行

```
$ sudo dpkg -i libcudnn7-doc_7.6.4.38-1+cuda10.1_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.6.4.38-1+cuda10.1_amd64.deb
$ sudo dpkg -i libcudnn7_7.6.4.38-1+cuda10.1_amd64.deb
```

動作確認

```
cuda-install-samples-10.1.sh ~/
cd ~/NVIDIA_CUDA-10.1_Samples/
make -j8
cd 2_Graphics/Mandelbrot/
./Mandelbrot 
```

これで紺色背景の細胞の画像？みたいなものが出てきたらおｋです。


# **tensolfrow のインストール**

python3にtensolflowをインストールします。
pipとか諸々インストールして、pipでGPU付きのtensorlfowをインストール。

```
sudo apt install python-dev python-pip python3-pip
sudo pip3 install tensorflow_gpu
```

確認

```
pip3 freeze | grep tensor
tensorboard==1.14.0
tensorflow-estimator==1.14.0
tensorflow-gpu==1.14.0
```

# **後処理 カーネルの固定**
カーネルが大事という話
https://www.nemotos.net/?p=3176

>カーネルはデフォルトのものを使う
カーネルを最新のものを追いかけるとCUDAは動かないという事象が起きます。Ubuntu 18.04では、標準が4.15、そしてHWEが4.18です。CUDAは、この2つのバージョン（標準とHWEカーネル）だけサポートします。詳しくは、NVIDIAのページをご覧ください。

これはうそだあ:sob:

**ubuntu18.04の最新は5.0.0です。CUDAの公式サイトに記載あり
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html


#カーネルのアップデート禁止

とはいえ、勝手にアップデートされて大変な思いをしたことがあるので、
アップデートを禁止しておきます。

/etc/apt/preferences.d/linux-kernelを設定

```
Package: linux-generic
Pin: version 5.0.0-36*
Pin-Priority: 1001

Package: linux-headers-generic
Pin: version 5.0.0-36*
Pin-Priority: 1001

Package: linux-image-generic
Pin: version 5.0.0-36*
Pin-Priority: 1001
```


# おわり

RTX2080にNVIDIA430とCUDA10.1をインストールしました。

今のところ無事に動いています。（2020/02/25）
yolov3でdemoも動かせているので、大きな問題はない…はず。