最速最短でUbuntuにCUDAとNVIDIAドライバーをインストールする方法

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

# 0. はじめに

最近、ChatGPTによりLLMとか大流行りですが、サーバーでGPUを使うという事も随分と一般的になってきました。UbuntuサーバーにNVIDIAドライバーを入れる方法も沢山記事があったりしますが、どれも微妙に違っていて何が最適なのかよく分からなかったので、NVIDIA社のオススメの方法を使ってインストールしてみたという記事になります。

::: note warn
あくまでもUbuntuをサーバーとして利用してGPU(RTX)をサーバーとして利用する場合のインストール方法になります。なので、いきなりcudaとかインストールしてしまいます。ご注意ください。
:::

# 1. 前提

## 1-1. 参照資料

以下のURLの資料を元にインストールします。

NVIDIAインストール
NVIDIA Driver Installation Quickstart Guide :: NVIDIA Tesla Documentation
https://docs.nvidia.com/datacenter/tesla/tesla-installation-notes/index.html

## 1-2. OS
以下のような環境にインストールします。

|項目|詳細|
|---|---|
|OS| Ubuntu 22.04.3 LTS|
|OSの状態| インストール直後の状態|
|CPU |AMD Ryzen 5 2400G with Radeon Vega Graphics|
|GPU| NVIDIA GeForce RTX 2070|

# 2. 「1.1. Pre-Installation Requirements」を実行する

NVIDIA Driver Installation Quickstart Guideの1.1はインストール下準備です。

## 2.1. Verify You Have a CUDA-Capable GPU

https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#verify-you-have-a-cuda-capable-gpu

CUDAが利用できるGPUであるかどうか確認します。

```io
lspci | grep -i nvidia
```
こんな感じの結果が表示されます
```io
01:00.0 VGA compatible controller: NVIDIA Corporation TU106 [GeForce RTX 2070] (rev a1)
01:00.1 Audio device: NVIDIA Corporation TU106 High Definition Audio Controller (rev a1)
01:00.2 USB controller: NVIDIA Corporation TU106 USB 3.1 Host Controller (rev a1)
01:00.3 Serial bus controller: NVIDIA Corporation TU106 USB Type-C UCSI Controller (rev a1)
```
## 2.2. Verify You Have a Supported Version of Linux
サポートされているLinuxディストリビューションかどうか確認します

```io
uname -m && cat /etc/*release
```
こんな感じの結果が出力されます。
```io
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
<<<後略>>>
```


## 2.3. Verify the System Has gcc Installed
gccがインストールされているかどうか確認します

```io
gcc --version
```
こんな感じの結果が出力されます
```io
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```

## 2.4. Verify the System has the Correct Kernel Headers and Development Packages Installed

Kernel Headerパッケージが入っているかどうかという話ですが、パッケージでインストールする場合には自動的にインストールされるはずなので、無視して構いません。runfileでインストールする場合はインストールしておきましょう。

## 2.5. Install MLNX_OFED
GPUDirectStorage (GDS)を使わない場合は無視して構いません。
今回は使わないのでスキップします。

## 2.6. Choose an Installation Method

Linuxディストリビューションのパッケージでインストールすることをお勧めしますよ、と書いているだけなのでスキップします。

## 2.7. Download the NVIDIA CUDA Toolkit

NVIDIA CUDA Toolkitをダウンロードします。
ダウンロードするURLは以下です。

https://developer.nvidia.com/cuda-downloads

今回は、OS-->「Linux」、Arch-->「x86_64」、Dist-->「Ubuntu」、Version-->「22.04」、Installer Type-->「deb(network)」を選択しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/6898bcd7-097c-b565-c23a-3f691873dc59.png)

出力されたインストラクションは以下の通りです。

```io
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda
```
上記を実行します。

::: note
cuda-driverのみインストールしたい場合は、
```
sudo apt-get -y install cuda-drivers
```
としてください。
:::

エラーがなくインストール終了したらOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/4bffa06f-a0cc-0801-deb9-8e61f6e70329.png)

# 3. インストールの確認

## 3-1. CUDAインストール確認
リブートする前に何がインストールされたかcuda関連パッケージを確認します

以下のコマンドでインストールされたcuda関連パッケージを確認できます。
```io
apt list --installed cuda\*
```
必要なCUDA DriverやToolkitがインストールされていること確認しましょう

## 3-2. NVIDIAドライバーインストール確認

以下のコマンドでインストールされたNVIDIAドライバーを確認できます。
```io
sudo apt list --installed nvidia\*
```

# 4. 再起動
リブートします

```io
sudo reboot
```

# 5. 再起動後の確認
## 5-1. NVIDIAドライバーの確認

ディストリビューションのデフォルトnouveauドライバーが無効になっているか確認します。

```io
lsmod | grep nouveau
```
何も検索結果が出力されなければOKです。

あちこちで書かれているNVIDIAドライバーインストール記事では、**nouveauドライバーを無効にする**と書かれていますが、本記事の方法では無効にする必要はありません。自動的に無効になります。

NVIDIAドライバーに切り替わっているか確認します。
```io
lsmod | grep nvidia
```

以下のように出力されたら切り替わっています
```io
nvidia_uvm           1761280  0
nvidia_drm             90112  3
nvidia_modeset       1314816  6 nvidia_drm
nvidia              56619008  210 nvidia_uvm,nvidia_modeset
drm_kms_helper        249856  1 nvidia_drm
drm                   696320  7 drm_kms_helper,nvidia,nvidia_drm
i2c_nvidia_gpu         16384  0
i2c_ccgx_ucsi          16384  1 i2c_nvidia_gpu
video                  73728  2 asus_wmi,nvidia_modeset
```

## 5-2. NVIDIA-SMIの実行

```
nvidia-smi
```
こんな感じの結果が出力されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/d4417c42-ba52-cd92-3150-412504275b5b.png)

# 6. まとめ

NVIDIAドライバーインストールは様々な記事がインターネットには溢れていて、情報が錯綜していますが、恐らく上記の手法が最速最短の方法だと筆者は思っております。もっと簡単な方法がありましたら、コメントにお寄せいただくと幸いです。

# 7. 謝辞

最も簡単にNVIDIAドライバーをインストールする方法をお教えいただいたNVIDIA佐々木様に感謝いたします。

[おまけ: NVIDIA ドライバーのインストール](https://qiita.com/ksasaki/items/b20a785e1a0f610efa08#%E3%81%8A%E3%81%BE%E3%81%91-nvidia-%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)