ProxmoxVEでUbuntu18.04 + KVM + CUDAな環境を作る

ProxmoxVEでPCI-Passthrouphはできる状態になっている前提で進める。
以下参照
https://qiita.com/disksystem/items/0879f379e2bbc7a08675

## PART1 VMの作成
UbuntuServer18.04 LTSをインストールする。
https://ubuntu.com/download/server

Windowsのときと同じようにPCI-Passthroughできる状態のVMを用意する

![スクリーンショット 2020-04-13 14.36.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/f8a9a62d-bf27-0cf1-c30d-265e6f5cfd67.png)
![スクリーンショット 2020-04-13 14.37.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/071e6fdc-c6a6-33c6-9b5b-a17d88503812.png)

グラフィックカードは「VMWare互換」を選択する。noVNCでの表示不具合が少ない。BIOSはOVMF、マシンはq35。PCI-Passthroughすると管理画面からUbuntuの画面が見えなくなるので、一旦コンソールで見える状態でUbuntuのインストール作業を行い、SSHでアクセスできる状態まで完了してからGPU-Passthroughを有効化する

![スクリーンショット 2020-04-13 14.37.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/7d6ee3e3-6f35-0a73-cfde-85e86f751270.png)
SSDの場合、Trimの問題があるのでDiscardにチェックを入れると良いかもしれない。
![スクリーンショット 2020-04-13 14.38.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/2b418fcd-eed2-a3f5-1667-a2c79032dcc0.png)
CPUの種別は「host」
![スクリーンショット 2020-04-13 14.38.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/173b6dc0-fe76-418b-5d2c-f20ae063d077.png)
![スクリーンショット 2020-04-13 14.38.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/a6c99cb7-6334-eda9-64a5-4553a4506f6f.png)
RNGの追加。
![スクリーンショット 2020-04-13 12.59.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/5aa63a75-3ffe-7d74-6eeb-93fa872605a2.png)

## PART2 UbuntuServerのインストール
「English」
![スクリーンショット 2020-04-12 12.53.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/59ac2b76-857e-a61a-a309-2c97d4c94484.png)
「Japanese」
![スクリーンショット 2020-04-12 12.56.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/b39789dc-448e-c2b0-3baf-3119886c0ab4.png)
SSHのインストールを行うかどうかの選択肢が表示されるのでチェックを入れる
![スクリーンショット 2020-04-12 13.00.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/bfe372d9-ad2b-0572-43e1-20faef2e5eb7.png)
![スクリーンショット 2020-04-12 13.04.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/177719e3-6ebd-8bde-2b68-5b69494b73ec.png)
ISOファイルを読まないように管理画面側で変更してからENTERする
![スクリーンショット 2020-04-12 13.04.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/be7f3099-fc95-2f45-b8ef-93d024f20fb5.png)
再起動後にSSHでログインできるか確認する
![スクリーンショット 2020-04-12 13.10.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/f941f3c6-2b0d-a98b-41bb-d781aa3d5901.png)
QEMU-Agentをインストールする。管理画面からシャットダウン、IPの確認等できるようになる

```bash
$ sudo apt install qemu-guest-agent
```

その他、キー配列・タイムゾーンを設定する

```bash
sudo localectl set-keymap jp106
sudo timedatectl set-timezone Asia/Tokyo
```

![スクリーンショット 2020-04-12 13.18.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/e0ef24d1-da60-9fc9-8b69-546703dae525.png)
管理画面からシャットダウンをできることを確認する

## PART3 PCI-Passthroughを有効化

GPUを取り付け
![スクリーンショット 2020-04-12 12.02.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/c230e252-f474-b62e-d4a2-27f33b1f9d31.png)
![スクリーンショット 2020-04-12 12.03.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65278/0b1c1b9d-8e3d-d074-54e8-1180018c14ab.png)

`/etc/pve/qemu-server/110.conf`にVMの追加修正

```bash
# 追加行。必須なのは「host」「hv_vendor_id=whatever」「kvm=off」あとはパフォーマンス調整のおまけ
args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=whatever,kvm=off,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time,smep=off,-pcid,-spec-ctrl,-ssbd,-hv-evmcs,+aes'

# 変更1(Windowsでグラボ経由でのオーディオに不具合があったため念の為。q35でも動くは動くはず）
# before
machine: q35
# after
machine: pc-q35-3.1

# 変更2(RyzenなどCPUに内蔵GPUがない場合のみ)
# before
hostpci0: 26:00,pcie=1,x-vga=1
# after
hostpci0: 26:00,pcie=1,x-vga=1,romfile=Z_1050Ti_Mod.rom
```

起動してSSHでアクセス。GPUを認識しているか確認

```bash
$ lspci | grep NVIDIA
01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GP107GL High Definition Audio Controller (rev a1)
```

## PART4 CUDAのインストール

```bash
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
sudo apt update
sudo apt -y install cuda-drivers cuda
echo 'export PATH="/usr/local/cuda/bin:$PATH"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"' >> ~/.bashrc
sudo reboot
```

再起動後にCUDAが動作しているか確認する

```
$ nvidia-smi

Mon Apr 13 06:51:55 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.64.00    Driver Version: 440.64.00    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 105...  On   | 00000000:01:00.0 Off |                  N/A |
| 30%   19C    P8    N/A /  75W |      1MiB /  4040MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
```

おしまい