UbuntuにGPUドライバーとCUDAをインストール

メモ用にまとめています。

環境

- Ubuntu20.04（18.04でも確認しました）
- RTX 3090

Deep Learningライブラリのバージョン確認は以下のサイトを確認

- [Pytorch](https://pytorch.org/get-started/locally/)
- [Tensorflow](https://www.tensorflow.org/install/source?hl=ja#gpu)

# 1. 事前準備（古いドライバー・CUDAの削除）

既にドライバーとCUDAがインストールされているかを確認する

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

もし、古いドライバーがインストールされていたら下記コマンドにて削除

```
sudo apt-get --purge remove nvidia-*
sudo apt-get --purge remove cuda-*
```

# 2. リポジトリの登録

Ubuntuのドライバーを提供しているリポジトリを登録

```
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
```

# 3. ドライバーのインストール

**「推奨バージョンの自動インストール」** or **「指定したバージョンのインストール」**
のどちらかでインストールする。~~結局推奨を調べるから前者で良いと思う。~~

#### 推奨バージョンの自動インストール

以下のコマンドでの推奨ドライバーをインストール

```
sudo ubuntu-drivers autoinstall
```

#### 指定したバージョンのインストール

以下のコマンドで推奨ドライバーのバージョンを確認できる。

```
sudo ubuntu-drivers devices
```

実行結果（`recommended`と書かれた行が推奨されたバージョン）

```
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002204sv00001462sd00003882bc03sc00i00
vendor   : NVIDIA Corporation
driver   : nvidia-driver-460-server - distro non-free
driver   : nvidia-driver-465 - third-party non-free recommended
driver   : nvidia-driver-455 - third-party non-free
driver   : nvidia-driver-460 - third-party non-free
driver   : xserver-xorg-video-nouveau - distro free builtin
```

以下の`xxx`をに書き換え、インストール

```
sudo apt-get install nvidia-driver-xxx
```

# 4. CUDAのインストール

[CUDAの公式HP](https://developer.nvidia.com/cuda-downloads)に自分の環境を選択するとコマンドが表示されるので、順に実行する。

最新バージョン以外の場合は、[Archive](https://developer.nvidia.com/cuda-toolkit-archive)から探す。

以下は、Ubuntu20.04にCUDA11.2を選択したときの画面

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593563/3802a4f7-df99-f3ff-e299-689544ab07ed.png)


画像中のコマンド

```
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
wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda-repo-ubuntu2004-11-2-local_11.2.0-460.27.04-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-11-2-local_11.2.0-460.27.04-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu2004-11-2-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
```

# 5. 再起動

```
sudo reboot
```

# 6. 動作確認

以下コマンドで、GPUが認識されているかを確認する。

```
nvidia-smi
```

実行結果

```
Tue Apr 27 16:32:47 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.73.01    Driver Version: 460.73.01    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 3090    Off  | 00000000:01:00.0  On |                  N/A |
| 32%   63C    P2   180W / 420W |   2243MiB / 24268MiB |     66%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1248      G   /usr/lib/xorg/Xorg                 70MiB |
|    0   N/A  N/A      1944      G   /usr/lib/xorg/Xorg                267MiB |
|    0   N/A  N/A      2123      G   /usr/bin/gnome-shell               18MiB |
|    0   N/A  N/A      2351      G   ...tem/Applications/komorebi       52MiB |
|    0   N/A  N/A      2564      G   ...AAAAAAAA== --shared-files       31MiB |
|    0   N/A  N/A     16044      C   python                           1783MiB |
+-----------------------------------------------------------------------------+
```