見出し画像

仮想基盤から GPU を利用した話

みなさん、こんにちは。わっくぼです。
とても暑かった時期から、急に寒くなってきた今日この頃です。

当社ウイングアーク1stでは、オンプレミス製品の動作検証やサポート環境の多くは仮想基盤にて運用しています。

GPU を利用した製品の動作確認があり、また、OS の再構築を伴うケースが多かったため、環境の再構築の時間短縮のため仮想基盤上にて構築することを目的に作業してみました。

今回は、製品にて指定された GPU のドライバーをインストールするパターンのため、ハイパーバイザーの PCI パススルーを利用した方法について書きたいと思います。

すでに、いろいろなメディアにて情報が掲載されています。
興味がある方は、調べてみるといろいろな情報が見つかると思います。

前提

すでに、色々なメディアに構築方法が載っているため、詳細な手順については記載しません。

仮想基盤

VMware環境では

VMware ESXi では、仮想化拡張機能 (SR-IOV) は有効にすることで、設定画面から PCI パススルーを行うハードウェアの選択や仮想マシンにデバイスを接続する設定が簡単にできます。

PCI パススルーの対象の GPU と GPUから出力される Audio デバイスをパススルーに切り替えます。

PCI パススルーを行うハードウェアの選択

構築する仮想マシンにPCI デバイスを割り当てます。

VM新規作成時の PCI デバイス

VM環境のデバイス状態は以下になります。

VM環境のデバイス状態 (Windows)
VM環境のデバイス状態 (Linux)

KVM環境では

社内の GPU 検証環境に Rocky Linux 8.8ベースのKVMを構築して確認をしました。

KVMのホストに GPU が認識しているか確認する。

ホストの GPU 認識確認

GRUB に intel_iommu=on のパラメータ付与、VFIO のパススルーする GPU を指定してから再起動を行い、IOMMUが認識できていることが確認できた。

IOMMUの有効確認

virt-install コマンドにて、[--host-device] にパススルーする GPU と GPUから出力される Audio デバイスを指定し OS をセットアップします。

「ホストの GPU 認識確認」の図より
--host-device 01:00.0 \   # GPU
--host-device 01:00.1 \  # GPUから出力される Audio デバイス

VM環境のデバイス状態は以下になります。

VM環境構築後のデバイス状態

Hyper-V環境では

Hyper-V環境でも、PCI パススルーは出来ます。
社内の GPU 検証環境では、UEFI設定にて仮想化拡張機能 (SR-IOV) は有効に出来るのですが、周辺機器から見える仮想アドレスを物理アドレスに変換する機能 (IOMMU) が有効にならないようで、GPU を Hyper-V ホストからアンマウントするところで失敗しました。

GPU のインスタンスIDの確認

GPU のインスタンスIDの確認

GPUをホスト上で無効化し、GPUをホストからアンマウント

GPU のアンマウント失敗

ホストからアンマウントを実行するとエラーになりました。
インターネットにてエラーの内容を検索すると SR-IOV を有効にすると処理が正常に出来ると記載されていますが、ハードウェアに何か制限があるようです。
検証環境がサーバー専用機ではなく、ワークステーションのため、UEFI にて制限があるのかもしれません。

Hyper-V 環境では、検証機器が対応しておらず断念します。

最後に

動作検証や製品サポートの対応のために、OSの切り替えや再構築するケースが多くあり、実機環境を用意すると手間と時間が多く発生します。
仮想基盤を駆使することで、手間を減らして作業時間の確保をするようにしています。


いいなと思ったら応援しよう!