PROXMOX内のWindowsにGPUを割り当てる

# はじめに
どの記事を渡り歩いても「code43 error」の解決ができず、解決したので記事にまとめることにしました。
結論から言うとドライバーを当てるタイミングとその時に設定している項目が大切でした。
今回は、Windows 10を使って解説を進めます。11でもほぼ同じように設定してください。
※バージョンは「11/2022」を選択し、TPM2.0の追加を行ってください。

VM作成済みの場合は「VM作成後の追加設定」まで飛んでください。

# 予備知識
:::note alert
GPU Passthroughをすると一般的に「noVNC」の利用が不可になります
:::
:::note
上記解決済み
:::

※今回の方法であればnoVNCを継続して利用することができます。

# GPU Passthroughの設定方法
下記記事参照

https://qiita.com/KAGENE4/items/a2a6c00d03120951a93c

# Windows VMの作成
- 「全般」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/672b987f-aa10-fef3-f47b-105132bab4be.png)
「名前」を各自入力

- 「OS」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/85314e66-4ee9-17c5-2012-eaadc62b08db.png)

少し前から種別を「Microsoft Windows」にすると「☑Add additional drive for VirtIO drivers」という項目がでるようになり、あらかじめVirtIOのドライバーISOを選択できるようになりました。

https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers#Windows_OS_Support

上記リンクの「download the latest stable」からISOをダウンロードして下さい。

:::note warn
この作業を飛ばすとOSのインストールでしくじります
:::

- 「システム」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/4dec1150-4f5e-9759-a40e-a2928492f4f4.png)

マシン:q35
BIOS:OVMF(UEFI)
EFIストレージ:各自
Qemuエージェント:任意(☑推奨)

- 「ディスク」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/83a47489-fe00-656a-9d9b-8af16504b51b.png)

:::note warn
SSDの場合「SSDエミュレーション」にチェック
:::
キャッシュは任意で選択
- 「CPU」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/93044cd4-0533-0cc1-5568-10e92c4e5284.png)

:::note warn
「種別」を正しく選択して下さい
:::
:::note alert
「種別」を正しく選択しないと「code43 error」の原因となります
:::
- 「メモリ」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/2cf21718-bb04-b473-221c-30853eecb983.png)

Ballooningデバイスはチェック解除推奨。
※Ballooningデバイスはメモリを他のVMと共有するかしないかの設定です。

- 「ネットワーク」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/e7dc6a3f-442a-7aeb-3a41-d96011863c93.png)

モデルは「VirtIO(準仮想化)」を選択する。
確認を押しVMを作成

# VM作成後の追加設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/7515fbda-27a2-efa1-cacc-b5ceb9e32ee6.png)

「追加」>「PCIデバイス」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/a6a8611c-3635-0644-f299-f1722109d411.png)

「Mapped Device」から「Raw Device」に切り替え、パススルーするGPUを選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/83aa1fe4-b8a0-e170-1e34-08126fa5d0bb.png)

「全機能」,「PCI-Express」にチェックを入れる

:::note warn
この段階ではまだ「プライマリーGPU」にチェック項目を入れない
:::

「追加」を押し追加されたかを確認する

# OSのインストール
いつも通りのインストールに加えドライバーの追加を行う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/f128d47b-4c45-e0eb-fd10-6f419904c2d8.png)

「ドライバーの読み込み」からVirtIOのドライバーが入っているISOを指定してバージョンにあったドライバーを追加してください。

追加するドライバーは「viscsi」,「NetKVM」の2つです。初めはドライブが表示されていないと思いますが、「viscsi」のドライバーを当てればドライブが表示されるようになると思います。

viscsiは、ドライブのドライバー
NetKVMは、インターネットのドライバー
となってます。

:::note alert
OSのインストール後にドライバーを当てると不具合の原因になるのでインストール前に必ず行って下さい
:::

# グラフィックドライバーを当てる
NVIDIA公式から対応しているグラフィックボードのドライバーをVMにダウンロードして実行して下さい。

https://www.nvidia.co.jp/Download/index.aspx?lang=jp

:::note 
インストール完了後、何も変更せずVMをシャットダウンしてください。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/5068f3e8-da46-6a68-d944-fef1cd3e463b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/b329b919-4cb4-2769-c200-1dea6c71a6f6.png)

シャットダウン後「VM作成後の追加設定」でチェックを入れなかったプライマリーGPUにチェックを入れ「ディスプレイ」を「規定」から「VirtIO-GPU(virtio)」に変更します。

:::note warn
「VirtIO-GPU」以外で設定すると恐らくnoVNCが使えなくなります
:::

変更完了後、再びVMを起動してグラフィックボードから画面の出力がされているか確認してください。

:::note warn
この際GPUはPassthroughしたOSに占有されるのでPROXMOXのコマンドラインは表示されなくなります。コマンドラインを使用する場合は「SSH」やWebGUI上の「シェル」をお使いください。(SSH推奨)
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574826/d9bd3fbc-ffb2-cfdd-0d80-040ce2baeb6a.png)

GPU Passthroughが成功するとタスクマネージャーに「GPU」が表示されるようになると思います。

# 今後について
PassthroughしたGPUを用いてゲームが行えるかの検証をする。