Ubuntu22.04+KVMでGPUパススルーをするときのメモ




# 概要
最近、VMwareがあんなことになってしまったので、
自宅マシンにKVMを入れて環境を構築し直そうと思います。
この記事はトライアンドエラーしたときのメモです。

うちの自宅マシンでは、
仮想マシン上でGPUも使うため、
GPUパススルーにもチャレンジしています。

KVM構築の流れはこんな感じ。
1. Ubuntuのインストール
2. Ubuntuのネットワーク設定
3. KVMの構築
4. GUI環境の構築（Virtual Machine Managerの導入）
5. GPUパススルーの対応（ホストマシン側の設定）
6. GPU仮想マシンの作成（仮想マシン作成時の設定）
7. 仮想マシンでのGPU利用（仮想マシン上の設定）

この記事では自分用メモベースで記載します。

# KVMとは？
KVMとは、Linux組み込みのハイパーバイザーです。
いわゆる、VMware ESXiとかWindows Hyper-Vとかと同じような事ができます。

## KVMを選択した理由
いくつかあるハイパーバイザーがある中で、
Ubuntu＋KVMを選択した理由はこんな感じ。
・無料
・GPUパススルーに対応している


# KVM構築メモ（適宜更新）

## 1. Ubuntuのインストール

Ubuntuをダウンロードしてインストールします。
やり方は割愛。ググってください。

私は楽なので
[Ubuntu Japanese Teamの日本語対応Ubuntu22.04のDesktopイメージ](https://www.ubuntulinux.jp/japanese)
を最小インストールで利用しています。

ちなみに、
24.04はまだちょっと情報少ないので現時点（2024年7月）では見送り。

インストール完了したら、
とりあえずすべてのパッケージをアップグレードしましょう。

```bash:パッケージ更新
sudo apt update
sudo apt upgrade
```

## 2. Ubuntuのネットワーク設定

ハイパーバイザーのホスト運用するにあたって、
IPアドレスは固定しておいたほうがいいので、
こちらのページを参考にしてのようにネットワーク設定します。
参考：[Ubuntu 22.04 LTSで固定IPアドレスの設定](https://qiita.com/zen3/items/757f96cbe522a9ad397d)

NAT運用するのであれば
基本に書かれている「IPアドレスの固定」でよいですが、
本格的にやる場合は
応用にかかれている「ブリッジの設定」をやりましょう。

## 3. KVMの構築

こちらのページを参考にしてKVM環境の構築を行います。
参考：[Ubuntu Server 22.04 LTSでKVMを使用する方法](https://qiita.com/st10/items/dbe6fa9c20a61af690ba)

以下のコマンドを実行すればとりあえずKVM環境できます。
```
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst libosinfo-bin
```

## 4. GUI環境の構築（Virtual Machine Managerの導入）

3までやればコマンドベースで仮想マシンを作れるのですが、
GUIで管理したいのでこちらのページを参考にしてGUI環境を入れましょう。
参考：[KVM : 仮想マシンを作成する (GUI)](https://www.server-world.info/query?os=Ubuntu_22.04&p=kvm&f=3)

以下のコマンドを実行すればとりあえずGUI環境できます。
```
sudo apt install virt-manager qemu-system
```

ここまでやれば、
普通（GPUなし）の仮想マシンであれば、GUIから作成・管理ができます。

今回はGUI環境として「Virtual Machine Manager」を選択しています。
理由は、GPUパススルーのGPU管理に対応をしているからです。
GPUパススルーをしない場合は、
Cockpitで仮想マシン管理したほうが便利かもしれません。

### 備考：CockpitでのGUI環境構築（GPUを利用しない場合）

CockpitはWebベースの仮想マシン管理を提供してくれます。
GPUパススルーを利用しない場合は、
Cockpitを利用してGUI環境を構築するのが便利です。
（GPU利用の場合は設定機能が不足しています。）

Cockpitを利用する場合はこちらのページを参考にして構築しましょう。
参考：[Ubuntuにkvm/QEMUをいれてCockpitで快適に仮想マシンサーバを運用してみる](https://qiita.com/ku_suke/items/269dfecec398187aed77)

## 5. GPUパススルーの対応（ホストマシン側の設定）

GPUパススルーを利用する場合には
・ホストマシン側の設定
・GPU仮想マシン作成時の設定
・GPU仮想マシン上での設定
が必要になります。
ここではホストマシン側の設定を書きます。

### IOMMU機能の有効化

こちらのページを参考にしてGPUパススルーの設定を行いましょう。
参考：[KVM : GPU パススルー](https://www.server-world.info/query?os=Ubuntu_22.04&p=kvm&f=13)

「[1]KVM ホストで IOMMU 機能を有効化します。」の項目を
ホストマシンで行います。

## 6. GPU仮想マシンの作成（仮想マシン作成時の設定）

こちらのページの
「15. virt-managerを利用して仮想マシンを設定する」を参考にして
仮想マシンの作成を行いましょう。
参考：[LinuxでGPUをパススルーして仮想マシンで利用する方法](https://kagasu.hatenablog.com/entry/2023/10/19/191537)

仮想マシン作成時の注意点としては以下です。
仮想マシン作成時に以下の項目を満たさなければGPUが利用できません。
・すべてのPCIeデバイスを追加すること
・UEFIブートが必須で、かつSecure bootは無効化すること。（ドライバが入らない）
・kvm hiddenはonにしておく。
・cpuのタイプも隠しておく。hostにしておく。
参考：[GPUパススルーのLinuxのVMを作る](https://qiita.com/elect-gombe/items/2af4b18b8ddaec6ed1e0)

この辺はわかりにくいので、
後日きちんと記事にしようと思います。


## 7. 仮想マシンでのGPU利用（仮想マシン上の設定）

### 仮想マシンへのOSインストール
仮想マシンへOSをインストールしてください。
今回はUbuntu22.04を想定しています。
詳細は割愛します。

### UEFIのSecure Bootの無効化
UEFIのSecure Bootが有効だと、
次のNVIDIA Driverが入らないので、
UEFIのSecure Bootを無効化してください。


### NVIDIAドライバのインストール

Secure Bootを無効化したら、
こちらのページを参考にしてNVIDIAドライバをインストールしてください。
参考：[ubuntuにCUDA、nvidiaドライバをインストールするメモ](https://qiita.com/porizou1/items/74d8264d6381ee2941bd)

nvidia-smiが動けば以降GPUを利用することができます。

# 終わりに

今回はUbuntu+KVMを利用したGPUパススルーの利用法メモを記載しました。
半分自分用なのでわかりにくいところ多いと思いますが、
やる気があれば後日きちんと記事にしようと思います。


# 最後に広告

本業の方の広告になってしまうのですが、
会社関係で「メタバース・デジタルツイン講座」やってます。
今年は名古屋・大阪・東京の3拠点で開催してます。
メタバース・デジタルツインに興味のある人はぜひよろしくお願いします。
https://www.kcc.knowledgewing.com/icm/srv/course-application/init-detail?cd=FLM&pcd=FLMC&cscd=UMT01L