【備忘録】Ubuntu 20.04 LTS + GPU 環境構築 (2021年3月版)

メモレベルですが、UbuntuでGPU環境を構築する手順を記載します。

# 構成
|            |             | 
|:-----------|:------------|
|CPU         | Intel Core  i5-10400 | 
|GPU         | GeForce RTX 2060     |
|OS          | Ubuntu 20.04 LTS     |
|CUDA Toolkit |11.2 Update 1 |
|cuDNN        |8.1.0 |


# Ubuntuインストール
Ubuntu 20.04 LTSをWindows10とのデュアルブートでインストールする。

## インストールメディア作成(DVD）
https://qiita.com/takamatsuryota3/items/0f069e2c4767fd2f95bc

# デュアルブートでインストール
以下は16.04の記載ですが、20.04でもほぼ変わりません。
 
[【初心者でもわかる】Ubuntuのインストール方法まとめ](https://eng-entrance.com/ubuntu-install)

2021年3月時点で、以降のインストールで20GB近く消費します。「/」パーティションは余裕を持たせて確保しておきましょう。
【内訳】

+ Ubuntu(基本インストール + 更新)：7.1GB
+ NVIDIAドライバ：1.2GB
+ CUDA：7.6GB
+ cuDNN：2.7GB


# NVIDIAドライバ
[アプリケーションを表示する] - [追加のドライバー] を選択
「代替のドライバーを利用しています」となっているので、NVIDIAの最新のドライバーを選択して、[変更の適用]
![Screenshot from 2021-03-06 20-13-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438288/398c4da8-e636-dc1a-d6da-4d3cc13c03a1.png)

[設定] - [このシステムについて] の「グラフィックス」で認識できれいればOK
![Screenshot from 2021-03-14 22-01-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438288/8b546157-6796-f9f0-1fb3-c65b174409cb.png)


# CUDA
以下にアクセスする。 
https://developer.nvidia.com/cuda-downloads

[Linux] - [x86_64] - [Ubuntu] - [20.04] - [deb(local)] を選択する。
![Screenshot from 2021-03-06 20-29-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438288/435a2b0c-6810-c80d-6d81-de6da7ac0449.png)

インストールコマンドが表示されるので、それに従ってインストールする。
![Screenshot from 2021-03-06 20-29-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438288/f862161b-55e0-fb1b-ed07-d3e05c096678.png)

インストールが完了したら、`nvidia-smi`コマンドで確認する。

```
$ nvidia-smi     
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.39       Driver Version: 460.39       CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce RTX 2060    Off  | 00000000:01:00.0  On |                  N/A |
| 32%   31C    P8     9W / 160W |    139MiB /  5926MiB |      4%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
```

`~/.bashrc` にパスを追加します。

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

`source .bashrc` コマンドでシェルの設定を反映させる。

# cuDNN

以下にアクセスする。 会員登録が必要です。
https://developer.nvidia.com/cudnn

以下の2つをダウンロードする。

* cuDNN Runtime Library for Ubuntu20.04 x86_64 (Deb)
* cuDNN Developer Library for Ubuntu20.04 x86_64 (Deb)

インストールする。

```
$ sudo dpkg -i libcudnn8_8.1.1.33-1+cuda11.2_amd64.deb
$ sudo dpkg -i libcudnn8-dev_8.1.1.33-1+cuda11.2_amd64.deb 
```

# 動作確認
Python導入前に確認するために、[AlexeyAB/darknet](https://github.com/AlexeyAB/darknet) で確認しました。

MakefileをGPUモードに変更して、ビルドする。
※ビルドに失敗する場合は、インストールかパスの追加をミスしている可能性が高い。

```
$ sed -i 's/GPU=0/GPU=1/g' Makefile
$ sed -i 's/CUDNN=0/CUDNN=1/g' Makefile
$ sed -i 's/OPENCV=0/OPENCV=1/g' Makefile
$ make
```
学習実行はgithubのReadmeを参考に。
学習実行中に`nvidia-smi`コマンドを実行して、GPU Memoryをそれなりに使用していればOK。

```
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A     26714      C   ./darknet                        2931MiB |
+-----------------------------------------------------------------------------+
```

# TIPS
## CPU/GPUの温度を監視する
Ubuntu Softwareから[Psensor]をインストールする。

## Ubuntuを起動するたびにWindowsの時間がUTCになってしまう場合の対処
Ubuntuで以下のコマンド入力する。

```
$ sudo timedatectl set-local-rtc true
```
## VSCodeで日本語入力できないとき
https://qiita.com/maboy/items/362bb92cb862eac7a2c7