UbuntuでGPUマシーンを構築する

#はじめに
本記事は、Ubuntu（※）でNVIDIAのGPUマシーンを構築する手順についての記事になります。
GPUは**GeForce GTX 1080 Ti**を使用し、GPUの装着及びOSセットアップが終了していることを前提とします。

（※）本記事のバージョンは18.04

## GPUマシーン構築手順
オンプレミスなど自前でGPUマシーンを構築する場合は、NVIDIAのドライバ、CUDA、cuDNN等をインストールする必要があります。本記事では、はじめに環境調査を行い、環境の情報を確認してから構築作業を行います。

### 環境調査
OSのバージョン情報や認識しているGPUの情報を確認します。

- リリースファイルの確認  
`# cat /etc/os-release`

```console
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
```
- PCIデバイスの情報確認   
`# lspci | grep -i nvidia`

```console
01:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GP102 HDMI Audio Controller (rev a1)
02:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)
02:00.1 Audio device: NVIDIA Corporation GP102 HDMI Audio Controller (rev a1)
```

- Linuxカーネルが起動時に出力したメッセージの確認（※）  
`# dmesg | grep -i nouveau`

```console
[    3.549750] fb0: switching to nouveaufb from EFI VGA
[    3.549888] nouveau 0000:01:00.0: NVIDIA GP102 (132000a1)
[    3.662860] nouveau 0000:01:00.0: bios: version 86.02.40.00.1c
[    3.665925] nouveau 0000:01:00.0: fb: 11264 MiB GDDR5X
[    3.706859] nouveau 0000:01:00.0: DRM: VRAM: 11264 MiB
[    3.706860] nouveau 0000:01:00.0: DRM: GART: 536870912 MiB
[    3.706861] nouveau 0000:01:00.0: DRM: BIT table 'A' not found
[    3.706862] nouveau 0000:01:00.0: DRM: BIT table 'L' not found
[    3.706863] nouveau 0000:01:00.0: DRM: TMDS table version 2.0
[    3.706864] nouveau 0000:01:00.0: DRM: DCB version 4.1
[    3.706865] nouveau 0000:01:00.0: DRM: DCB outp 00: 01000f42 00020030
[    3.706866] nouveau 0000:01:00.0: DRM: DCB outp 01: 04811f96 04600020
[    3.706867] nouveau 0000:01:00.0: DRM: DCB outp 02: 04011f92 00020020
[    3.706868] nouveau 0000:01:00.0: DRM: DCB outp 03: 04822f86 04600010
[    3.706868] nouveau 0000:01:00.0: DRM: DCB outp 04: 04022f82 00020010
[    3.706869] nouveau 0000:01:00.0: DRM: DCB outp 06: 02033f62 00020020
[    3.706870] nouveau 0000:01:00.0: DRM: DCB outp 08: 02044f72 00020010
[    3.706871] nouveau 0000:01:00.0: DRM: DCB conn 00: 00001031
[    3.706872] nouveau 0000:01:00.0: DRM: DCB conn 01: 02000146
[    3.706872] nouveau 0000:01:00.0: DRM: DCB conn 02: 01000246
[    3.706873] nouveau 0000:01:00.0: DRM: DCB conn 03: 00020361
[    3.706874] nouveau 0000:01:00.0: DRM: DCB conn 04: 00010461
[    3.997705] nouveau 0000:01:00.0: DRM: MM: using COPY for buffer copies
[    4.557458] nouveau 0000:01:00.0: DRM: allocated 1920x1080 fb: 0x200000, bo 000000005ff6df23
[    4.558310] fbcon: nouveaufb (fb0) is primary device
[    4.558368] nouveau 0000:01:00.0: fb0: nouveaufb frame buffer device
[    4.582450] [drm] Initialized nouveau 1.3.1 20120801 for 0000:01:00.0 on minor 0
[    4.582474] nouveau 0000:02:00.0: enabling device (0000 -> 0003)
[    4.582641] nouveau 0000:02:00.0: NVIDIA GP102 (132000a1)
[    4.744164] nouveau 0000:02:00.0: bios: version 86.02.40.00.1c
[    4.764672] nouveau 0000:02:00.0: fb: 11264 MiB GDDR5X
[    4.807651] nouveau 0000:02:00.0: DRM: VRAM: 11264 MiB
[    4.807652] nouveau 0000:02:00.0: DRM: GART: 536870912 MiB
[    4.807653] nouveau 0000:02:00.0: DRM: BIT table 'A' not found
[    4.807654] nouveau 0000:02:00.0: DRM: BIT table 'L' not found
[    4.807654] nouveau 0000:02:00.0: DRM: TMDS table version 2.0
[    4.807655] nouveau 0000:02:00.0: DRM: DCB version 4.1
[    4.807655] nouveau 0000:02:00.0: DRM: DCB outp 00: 01000f42 00020030
[    4.807656] nouveau 0000:02:00.0: DRM: DCB outp 01: 04811f96 04600020
[    4.807657] nouveau 0000:02:00.0: DRM: DCB outp 02: 04011f92 00020020
[    4.807657] nouveau 0000:02:00.0: DRM: DCB outp 03: 04822f86 04600010
[    4.807657] nouveau 0000:02:00.0: DRM: DCB outp 04: 04022f82 00020010
[    4.807658] nouveau 0000:02:00.0: DRM: DCB outp 06: 02033f62 00020020
[    4.807658] nouveau 0000:02:00.0: DRM: DCB outp 08: 02044f72 00020010
[    4.807659] nouveau 0000:02:00.0: DRM: DCB conn 00: 00001031
[    4.807659] nouveau 0000:02:00.0: DRM: DCB conn 01: 02000146
[    4.807660] nouveau 0000:02:00.0: DRM: DCB conn 02: 01000246
[    4.807660] nouveau 0000:02:00.0: DRM: DCB conn 03: 00020361
[    4.807660] nouveau 0000:02:00.0: DRM: DCB conn 04: 00010461
[    5.102674] nouveau 0000:02:00.0: DRM: MM: using COPY for buffer copies
[    5.232820] nouveau 0000:02:00.0: Led nvidia-logo renamed to nvidia-logo_1 due to name collision
[    5.233012] [drm] Initialized nouveau 1.3.1 20120801 for 0000:02:00.0 on minor 1
```

（※）Ubuntuインストール後は自動的にnouveauドライバがインストールされています。

- NVIDIAグラフィックカードのモデルと推奨ドライバーを検出（※）  
`# ubuntu-drivers devices`

```console
== /sys/devices/pci0000:00/0000:00:01.1/0000:02:00.0 ==
modalias : pci:v000010DEd00001B06sv00001462sd00003607bc03sc00i00
vendor   : NVIDIA Corporation
model    : GP102 [GeForce GTX 1080 Ti]
driver   : nvidia-driver-390 - distro non-free
driver   : nvidia-driver-430 - distro non-free recommended
driver   : xserver-xorg-video-nouveau - distro free builtin
```

（※）ubuntu-driversコマンドはubuntu-drivers-commonパッケージが提供しています。デスクトップ版の場合は最初からインストールされています。

### NVIDIAドライバのインストール
NVIDIAドライバのインストールは、いくつか方法がありますが、本記事では導入時の手間を省くことを目的とし、Ubuntuの公式リポジトリからNVIDIAドライバのパッケージをインストールします。上記で確認した`ubuntu-drivers devices`コマンドの出力結果より、NVIDIAのドライバは**nvidia-driver-430**を使用します。

また、それ以外の方法としては、Graphics Drivers TeamのPPAのパッケージをインストールする方法か、NVIDIAのサイトからダウンロードしてインストールする方法があります。捕捉として、Ubuntuの公式リポジトリからパッケージインストールの場合、デスクトップ環境に依存したパッケージがインストールされるため、最小限で最新のドライバをインストールしたい場合は、NVIDIAのサイトからダウンロードする方法がよいでしょう。

- NVIDIAドライバの検索   
`# apt-cache search nvidia-driver-430`

```console
nvidia-driver-418 - Transitional package for nvidia-driver-430
nvidia-driver-430 - NVIDIA driver metapackage
nvidia-headless-430 - NVIDIA headless metapackage
nvidia-headless-no-dkms-430 - NVIDIA headless metapackage - no DKMS
xserver-xorg-video-nvidia-430 - NVIDIA binary Xorg driver
```

- NVIDIAドライバのインストール　　
`# apt-get install nvidia-driver-430`

- OS再起動 　　
`# systemctl reboot`

NVIDIAドライバのインストール後、OS再起動します。
OS再起動後、再度`dmesg`コマンドを実行し、nouveauのドライバがロードされていないことを確認します。以下のコマンドを実行し、何も出力されなければ大丈夫です。

`# dmesg | grep -i nouveau`

また、以下のコマンドを実行し、NVIDIAのドライバがロードされていることを確認します。

`# dmesg | grep -i nvidia`

```console
[    2.821296] nvidia: loading out-of-tree module taints kernel.
[    2.821300] nvidia: module license 'NVIDIA' taints kernel.
[    2.826740] nvidia: module verification failed: signature and/or required key missing - tainting kernel
[    2.831006] nvidia-nvlink: Nvlink Core is being initialized, major device number 235
[    2.831288] nvidia 0000:01:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=io+mem
[    2.930678] nvidia 0000:02:00.0: enabling device (0000 -> 0003)
[    2.930749] nvidia 0000:02:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=none
[    3.030091] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  430.26  Tue Jun  4 17:40:52 CDT 2019
[    3.057316] nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms  430.26  Tue Jun  4 17:45:09 CDT 2019
[    3.058745] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver
[    3.058745] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0
[    3.058778] [drm] [nvidia-drm] [GPU ID 0x00000200] Loading driver
[    3.058778] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:02:00.0 on minor 1
[    3.131390] nvidia-uvm: Loaded the UVM driver in 8 mode, major device number 511
[    4.186435] input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input17
[    4.186490] input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input18
[    4.186543] input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input19
[    4.186594] input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input20
[    4.186630] input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:01.1/0000:02:00.1/sound/card2/input21
[    4.186680] input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:01.1/0000:02:00.1/sound/card2/input22
[    4.186703] input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:01.1/0000:02:00.1/sound/card2/input23
[    4.186724] input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:00/0000:00:01.1/0000:02:00.1/sound/card2/input24
```

- モジュールの確認  
`# lsmod | grep nvidia`


```console
nvidia_uvm            819200  0
nvidia_drm             49152  4
nvidia_modeset       1110016  6 nvidia_drm
nvidia              18792448  289 nvidia_uvm,nvidia_modeset
drm_kms_helper        180224  1 nvidia_drm
drm                   483328  7 drm_kms_helper,nvidia_drm
ipmi_msghandler       102400  2 ipmi_devintf,nvidia
```

- nvidia-smiの実行  
`# nvidia-smi`

```console
Wed Oct 30 14:35:45 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.26       Driver Version: 430.26       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:01:00.0 Off |                  N/A |
|  0%   55C    P8    13W / 280W |     19MiB / 11176MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 108...  Off  | 00000000:02:00.0 Off |                  N/A |
|  0%   45C    P8    11W / 280W |      2MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1323      G   /usr/lib/xorg/Xorg                             9MiB |
|    0      1360      G   /usr/bin/gnome-shell                           7MiB |
+-----------------------------------------------------------------------------+
```

NVIDIAの管理インターフェースである`nvidia-smi`コマンドを実行して、NVIDIA GPUの状態を確認します。

### CUDAのインストール
[CUDA Toolkit Documentation](https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html)を参照し、インストールしたNVIDIAのドライバに該当する**CUDA Toolkit**のバージョンを確認した上で、[NVIDIAのリポジトリ](https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/)よりダウンロードします。本記事ではCUDA 10.1をダウンロードしています。

<img width="1440" alt="スクリーンショット 2019-10-30 19.42.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/2ce33b49-9887-7cfa-7d0a-3bea7afd4e4b.png">

- CUDAのダウンロード  
`# wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.1.243-1_amd64.deb`

```console
--2019-10-30 14:49:46--  https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
developer.download.nvidia.com (developer.download.nvidia.com) をDNSに問いあわせています... 192.229.232.112, 2606:2800:247:2063:46e:21d:825:102e
developer.download.nvidia.com (developer.download.nvidia.com)|192.229.232.112|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 2936 (2.9K) [application/x-deb]
`cuda-repo-ubuntu1804_10.1.243-1_amd64.deb' に保存中

cuda-repo-ubuntu1804_10.1.243-1_amd64.deb             100%[======================================================================================================================>]   2.87K  --.-KB/s    時間 0s    

2019-10-30 14:49:46 (68.5 MB/s) - `cuda-repo-ubuntu1804_10.1.243-1_amd64.deb' へ保存完了 [2936/2936]

```

- CUDAリポジトリパッケージののインストール   
`# apt install ./cuda-repo-ubuntu1804_10.1.243-1_amd64.deb`

```console
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
注意、'./cuda-repo-ubuntu1804_10.1.243-1_amd64.deb' の代わりに 'cuda-repo-ubuntu1804' を選択します
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  linux-headers-5.0.0-25 linux-headers-5.0.0-25-generic linux-image-5.0.0-25-generic linux-modules-5.0.0-25-generic linux-modules-extra-5.0.0-25-generic
これを削除するには 'apt autoremove' を利用してください。
以下のパッケージが新たにインストールされます:
  cuda-repo-ubuntu1804
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 91 個。
2,936 B 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 13.3 kB のディスク容量が消費されます。
取得:1 /root/cuda-repo-ubuntu1804_10.1.243-1_amd64.deb cuda-repo-ubuntu1804 amd64 10.1.243-1 [2,936 B]
以前に未選択のパッケージ cuda-repo-ubuntu1804 を選択しています。
(データベースを読み込んでいます ... 現在 221030 個のファイルとディレクトリがインストールされています。)
.../cuda-repo-ubuntu1804_10.1.243-1_amd64.deb を展開する準備をしています ...
cuda-repo-ubuntu1804 (10.1.243-1) を展開しています...
cuda-repo-ubuntu1804 (10.1.243-1) を設定しています ...

The public CUDA GPG key does not appear to be installed.
To install the key, run this command:
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub

N: ファイル '/root/cuda-repo-ubuntu1804_10.1.243-1_amd64.deb' がユーザ '_apt' からアクセスできないため、ダウンロードは root でサンドボックスを通さずに行われます。 - pkgAcquire::Run (13: 許可がありません)
```

上記メッセージが出力されるため、以下のコマンドを実行し、キーをインポートします。

- キーのインポート    
`# apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub`

```console
Executing: /tmp/apt-key-gpghome.joPy79ZHg7/gpg.1.sh --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
gpg: 鍵を'http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub'から要求
gpg: 鍵F60F4B3D7FA2AF80: 公開鍵"cudatools <cudatools@nvidia.com>"をインポートしました
gpg: 処理数の合計: 1
gpg:               インポート: 1
```

- パッケージのアップデート   
`# apt-get update`

```console
ヒット:1 http://archive.ubuntulinux.jp/ubuntu bionic InRelease
ヒット:2 http://jp.archive.ubuntu.com/ubuntu bionic InRelease                                                                                                                                               
ヒット:3 http://archive.ubuntulinux.jp/ubuntu-ja-non-free bionic InRelease                                                                                                                                          
取得:4 http://jp.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]                                                                                                                                       
無視:5 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64  InRelease                                                                                                                 
取得:6 http://jp.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]                                                                                                                                    
取得:7 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64  Release [564 B]                                                                                                                   
取得:8 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64  Release.gpg [819 B]                                                                                                               
無視:9 http://dl.google.com/linux/chrome/deb stable InRelease                                                                                                                                                       
ヒット:10 http://packages.microsoft.com/repos/vscode stable InRelease                                                  
取得:11 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [767 kB]                                
取得:12 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]                                            
取得:13 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main i386 Packages [600 kB]                                                              
取得:14 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main amd64 DEP-11 Metadata [295 kB]                                                        
ヒット:15 http://dl.google.com/linux/chrome/deb stable Release                                                                                                
取得:16 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64  Packages [119 kB]                                                          
取得:18 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main DEP-11 48x48 Icons [73.8 kB]                                                                      
取得:19 http://jp.archive.ubuntu.com/ubuntu bionic-updates/main DEP-11 64x64 Icons [143 kB]
取得:20 http://jp.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 DEP-11 Metadata [254 kB]
取得:21 http://jp.archive.ubuntu.com/ubuntu bionic-updates/universe DEP-11 48x48 Icons [196 kB]        
取得:22 http://jp.archive.ubuntu.com/ubuntu bionic-updates/universe DEP-11 64x64 Icons [431 kB]   
取得:23 http://jp.archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 DEP-11 Metadata [2,468 B]
取得:24 http://jp.archive.ubuntu.com/ubuntu bionic-backports/universe amd64 DEP-11 Metadata [7,920 B]
取得:25 http://security.ubuntu.com/ubuntu bionic-security/main amd64 DEP-11 Metadata [38.5 kB]                                             
取得:26 http://security.ubuntu.com/ubuntu bionic-security/main DEP-11 48x48 Icons [17.6 kB]
取得:27 http://security.ubuntu.com/ubuntu bionic-security/main DEP-11 64x64 Icons [41.5 kB] 
取得:28 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 DEP-11 Metadata [42.1 kB]
取得:29 http://security.ubuntu.com/ubuntu bionic-security/universe DEP-11 48x48 Icons [16.4 kB]  
取得:30 http://security.ubuntu.com/ubuntu bionic-security/universe DEP-11 64x64 Icons [111 kB]
取得:31 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 DEP-11 Metadata [2,464 B]
3,411 kB を 5秒 で取得しました (640 kB/s)                         
パッケージリストを読み込んでいます... 完了
```

- CUDAのインストール（※）  
`# apt install --no-install-recommends cuda-10-1`

（※）no-install-recommendsオプションで必要最低限なパッケージのみをインストール

- パッケージの確認
`# dpkg -l | grep cuda`

- CUDAのパスを.bashrcファイルに追加

```text
export PATH=$PATH:/usr/local/cuda-10.1/bin/
```

- .bashrcファイルの反映
`# source ~/.bashrc`

- CUDAのバージョン確認
`# nvcc -V`

```
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243
```

### cuDNNのインストール
cuDNNはUbuntuの公式パッケージとして提供されていないため、NVIDIAのアカウントを作成し、[cuDNN Archive](https://developer.nvidia.com/rdp/cudnn-archive)よりダウンロードします。ダウンロード後、GPUマシーンにファイル転送します。

<img width="1440" alt="スクリーンショット 2019-10-30 19.45.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/336ae180-b411-41d9-2482-d638aa6bbebd.png">


ファイル転送後、debファイルがあるディレクトリで以下のコマンドを実行し、cuDNNをインストールします。

- cuDNNのインストール  
`# dpkg -i libcudnn7_7.6.3.30-1+cuda10.1_amd64.deb`

```console
以前に未選択のパッケージ libcudnn7 を選択しています。
(データベースを読み込んでいます ... 現在 235666 個のファイルとディレクトリがインストールされています。)
libcudnn7_7.6.3.30-1+cuda10.1_amd64.deb を展開する準備をしています ...
libcudnn7 (7.6.3.30-1+cuda10.1) を展開しています...
libcudnn7 (7.6.3.30-1+cuda10.1) を設定しています ...
libc-bin (2.27-3ubuntu1) のトリガを処理しています ...
```

`# dpkg -i libcudnn7-dev_7.6.3.30-1+cuda10.1_amd64.deb`

```console
(データベースを読み込んでいます ... 現在 235672 個のファイルとディレクトリがインストールされています。)
libcudnn7-dev_7.6.3.30-1+cuda10.1_amd64.deb を展開する準備をしています ...
libcudnn7-dev (7.6.3.30-1+cuda10.1) で (7.6.3.30-1+cuda10.1 に) 上書き展開しています ...
libcudnn7-dev (7.6.3.30-1+cuda10.1) を設定しています ...
update-alternatives: /usr/include/cudnn.h (libcudnn) を提供するために自動モードで /usr/include/x86_64-linux-gnu/cudnn_v7.h を使います
```

`# dpkg -i libcudnn7-doc_7.6.3.30-1+cuda10.1_amd64.deb`

```console
以前に未選択のパッケージ libcudnn7-doc を選択しています。
(データベースを読み込んでいます ... 現在 235672 個のファイルとディレクトリがインストールされています。)
libcudnn7-doc_7.6.3.30-1+cuda10.1_amd64.deb を展開する準備をしています ...
libcudnn7-doc (7.6.3.30-1+cuda10.1) を展開しています...
libcudnn7-doc (7.6.3.30-1+cuda10.1) を設定しています ...
```

cuDNNは、libcudnn7_7.6.3.30-1+cuda10.1_amd64.debからインストールします。
以下は、依存関係によりインストールの順番で失敗した例になります。

```console
以前に未選択のパッケージ libcudnn7-dev を選択しています。
(データベースを読み込んでいます ... 現在 235660 個のファイルとディレクトリがインストールされています。)
libcudnn7-dev_7.6.3.30-1+cuda10.1_amd64.deb を展開する準備をしています ...
libcudnn7-dev (7.6.3.30-1+cuda10.1) を展開しています...
dpkg: 依存関係の問題により libcudnn7-dev の設定ができません:
 libcudnn7-dev は以下に依存 (depends) します: libcudnn7 (= 7.6.3.30-1+cuda10.1) ...しかし:
  パッケージ libcudnn7 はまだインストールされていません。

dpkg: パッケージ libcudnn7-dev の処理中にエラーが発生しました (--install):
 依存関係の問題 - 設定を見送ります
処理中にエラーが発生しました:
 libcudnn7-dev
```

- パッケージの確認   
`# dpkg -l | grep cudnn`

```console
ii  libcudnn7                                  7.6.3.30-1+cuda10.1                          amd64        cuDNN runtime libraries
ii  libcudnn7-dev                              7.6.3.30-1+cuda10.1                          amd64        cuDNN development libraries and headers
ii  libcudnn7-doc                              7.6.3.30-1+cuda10.1                          amd64        cuDNN documents and samples
```
# おわりに
パブリッククラウドでGPUインスタンスを構築する場合は、各クラウドサービスが提供するマシンイメージが用意されているので、マシンイメージを利用するのも一つの選択です。

例としてAWSのバージニア北部リュージョンでは、GPUの使用料金が日本リュージョンと比べると安いので、導入時はしっかりとコストを見積もりましょう。また、同時にGPUインスタンスを複数台起動しようとすると、制限が行われているため以下の様なメッセージが出力され起動に失敗します。

```text
You have requested more instances (2) than your current instance limit of 1 allows for the specified instance type. Please visit http://aws.amazon.com/contact-us/ec2-request to request an adjustment to this limit.
```

上記メッセージが出力された場合は、メッセージに出力されるURLよりWebのサポートから申請します。電話がかかってきて確認が出来次第、利用ができます。

オンプレミスにしろクラウドにしても、GPUマシーンを利用する場合は計画的に準備を行い利用しましょう。