関連記事
- CloudStack 4.18をUbuntu 22.04 LTSにインストールしてみた
- CloudStack 4.18をUbuntu 22.04 LTSにインストール: ネットワーク設定
- CloudStack 4.18をUbuntu 22.04 LTSにインストール: マネージメントサーバー
- CloudStack 4.18をUbuntu 22.04 LTSにインストール: ストレージ&システムVMイメージ設定
- CloudStack 4.18をUbuntu 22.04 LTSにインストール: エージェント(KVMホスト)
- CloudStack 4.18をUbuntu 22.04 LTSにインストール: マネージメントコンソールからのセットアップ
- CloudStack 4.18をUbuntu 22.04 LTSにインストール: GPUパススルー
- CloudStack 4.18をUbuntu 22.04 LTSにインストール: ゲストネットワークにL2ネットワークを設定
GPUパススルーとは
パススルーを有効にすると、KVMホストサーバー(物理)に接続されているグラフィックボードをCloudStackで稼働しているVMでする事ができるようになります。
その代わり、パススルーを有効にしたグラフィックボードはKVMホストサーバーから直接利用することはできなくなります。
有効するには、
- grubでIOMMUを有効化
- カーネルモジュール設定
- BIOSでIOMMUを有効化
- VM設定
をおこないます。
設定したホストには2枚のNVIDIA製チップがのっているグラボが2枚刺さってますが、ZOTAC GAMING GeForce GTX 1650 OC 4GB に対してパススルーを有効にします。
残りの1枚はホストOS管理用としてホストから利用できる状態にします。
grubでIOMMUを有効化
まずはGrub設定をします。
grubの設定ファイルを編集して、GRUB_CMDLINE_LINUX の値を変更します。
$ sudo vi /etc/default/grub
# GRUB_CMDLINE_LINUX="amd_iommu=on vfio_iommu_type1.allow_unsafe_interrupts=1 iommu=pt"
GRUB_CMDLINE_LINUX="iommu=pt amd_iommu=on rd.driver.pre=vfio-pci"
変更できしたらgrub-mkconfigコマンドで設定を反映します。
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
grubの設定はこちらを参考にしました。
カーネルモジュール設定
まずはGrubの設定ですが、設定する前にパススルーで使用するデバイスを確認します。
チップはNVIDIA製なので、lspciコマンドでデバイスの情報を確認し、PCI IDを調べます。
$ lspci -nn|grep NVIDIA
09:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK208B [GeForce GT 730] [10de:1287] (rev a1)
09:00.1 Audio device [0403]: NVIDIA Corporation GK208 HDMI/DP Audio Controller [10de:0e0f] (rev a1)
0a:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117 [GeForce GTX 1650] [10de:1f82] (rev a1)
0a:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:10fa] (rev a1)
今回は GeForce GTX 1650 を有効化するので、10de:1f82 と 10de:10fa が対象です。
これをvfio.confファイルに登録します。ファイルがない場合は新規に作成してください。
$ sudo vi /etc/modprobe.d/vfio.conf
下の1行を追加します。
options vfio-pci ids=10de:1f82,10de:10fa
設定を反映します。
$ sudo update-initramfs -u
update-initramfsが終わったらリブートします。
リブートついでにBIOSのIOMMUを有効化します。
$ sudo reoot
PCI IDの調べ方はこちらのページを参考にしました。
BIOSでIOMMUを有効化
BIOSでIOMMUを有効化します。
グラボメーカーによって設定箇所に違いはありますが、IOMMUを有効にしてください。
この設定が有効になっていないと、カーネルやgrubでどんなにがんばってもパススルーは有効になりません。
GPU Passthrow
リブートできたら、CloudStackのマネジメントコンソールからGPUを利用したいVM(インスタンス)の設定を変更します。
設定するにはインスタンスが停止している必要があるので、起動しているようなら停止します。
インスタンスの Settings -> Add setting の順にクリックします。
表示されるこの入力欄(ちっさ)に下の情報を入力します。
Name: extraconfig-1
Value:
<devices>
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x0a' slot='0x00' function='0x0'/>
</source>
<alias name='geforcegtx1650vga'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x00' function='0x0'/>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x0a' slot='0x00' function='0x1'/>
</source>
<alias name='geforcegtx1650audio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x00' function='0x1'/>
</hostdev>
</devices>
設定したらインスタンスを起動して、VMからグラフィックボードが見えているか確認します。
VMにSSHでアクセスし、lspciで確認します。
$ lspci -nn|grep NVIDIA
こんな風に見えていたらOKです。
00:07.0 VGA compatible controller [0300]: NVIDIA Corporation TU117 [GeForce GTX 1650] [10de:1f82] (rev a1) 00:08.0 Audio device [0403]: NVIDIA Corporation Device [10de:10fa] (rev a1)
インスタンスの設定はこのページを参考にしました。
CloudStackを4.18.2にした後…
GUIでextraconfigパラメータを追加できなくなったようで、上の操作では設定できなくなりました。
設定するにはグローバル設定で下記を設定し、インスタンスのextraconfigそのものの設定はCloudMonkeyで設定します。
- enable.additional.vm.configuration
- allow.additional.vm.configuration.list.kvm
グローバル設定
- enable.additional.vm.configuration
- ONに設定
- allow.additional.vm.configuration.list.kvm
- devices
- hostdev
- driver
- address
- alias
- source
参考にした情報: extraconfig argument in update/deploy virtualmachine does not append existing fields #8847
extraconfig設定
extraconfigの設定はこんな感じにしました。
$ cmk -p whale
> update virtualmachine id=4b42d988-66ec-4b15-8625-0d3169d12269 extraconfig=%3Cdevices%3E%20%20%20%3Chostdev%20mode%3D%22subsystem%22%20type%3D%22pci%22%20managed%3D%22yes%22%3E%20%20%20%20%20%3Cdriver%20name%3D%22vfio%22%20%2F%3E%20%20%20%20%20%3Csource%3E%20%20%20%20%20%20%20%3Caddress%20domain%3D%220x0000%22%20bus%3D%220x0a%22%20slot%3D%220x00%22%20function%3D%220x0%22%20%2F%3E%20%20%20%20%20%3C%2Fsource%3E%20%20%20%20%20%3Calias%20name%3D%22geforcegtx1650vga%22%20%2F%3E%20%20%20%20%20%3Caddress%20type%3D%22pci%22%20domain%3D%220x0000%22%20bus%3D%220x00%22%20slot%3D%220x00%22%20function%3D%220x0%22%20%2F%3E%20%20%20%3C%2Fhostdev%3E%20%20%20%3Chostdev%20mode%3D%22subsystem%22%20type%3D%22pci%22%20managed%3D%22yes%22%3E%20%20%20%20%20%3Cdriver%20name%3D%22vfio%22%20%2F%3E%20%20%20%20%20%3Csource%3E%20%20%20%20%20%20%20%3Caddress%20domain%3D%220x0000%22%20bus%3D%220x0a%22%20slot%3D%220x00%22%20function%3D%220x1%22%20%2F%3E%20%20%20%20%20%3C%2Fsource%3E%20%20%20%20%20%3Calias%20name%3D%22geforcegtx1650audio%22%20%2F%3E%20%20%20%20%20%3Caddress%20type%3D%22pci%22%20domain%3D%220x0000%22%20bus%3D%220x00%22%20slot%3D%220x00%22%20function%3D%220x1%22%20%2F%3E%20%20%20%3C%2Fhostdev%3E%20%3C%2Fdevices%3E
extraconfig=の後にはXMLを入力するのですが、そのままだと通らなかったので、XMLをURL変換して設定しました。
これでなんとかいけました。
CloudMonkeyの詳細は下記にあるので参考にしてください。
これでGPUパススルーは設定完了。グラボに限らず、USBデバイスをパススルーする場合もこの方法でOKのはず。
後はドライバを入れて、生成AIや仮想通貨マイニングなんかをやってみたりといろいろ試せるかと思います。
ちなみに、Stable Diffusionを試してみたけど、VRAM少なすぎてめっちゃちっちゃい画像しか出せないし処理は遅いしで微妙でした。文章生成系AIもメモリないとダメっすね。
今なら、入門用にはGeforce RTX 3060 の12GBモデルがいいらしいですね。
関連記事
- CloudStack 4.18をUbuntu 22.04 LTSにインストールしてみた
- CloudStack 4.18をUbuntu 22.04 LTSにインストール: ネットワーク設定
- CloudStack 4.18をUbuntu 22.04 LTSにインストール: マネージメントサーバー
- CloudStack 4.18をUbuntu 22.04 LTSにインストール: ストレージ&システムVMイメージ設定
- CloudStack 4.18をUbuntu 22.04 LTSにインストール: エージェント(KVMホスト)
- CloudStack 4.18をUbuntu 22.04 LTSにインストール: マネージメントコンソールからのセットアップ
- CloudStack 4.18をUbuntu 22.04 LTSにインストール: GPUパススルー
- CloudStack 4.18をUbuntu 22.04 LTSにインストール: ゲストネットワークにL2ネットワークを設定