本文へスキップ

GPUパススルーとは何ですか?

GPUパススルー

GPUパススルーは、物理的なグラフィックス処理装置(GPU)を単一の仮想マシン(VM)に直接割り当てる仮想化技術です。これにより、VMはあたかも物理ハードウェア上で動作しているかのように、GPUの全機能にアクセスすることが可能となります。GPUパススルーはハイパーバイザーの抽象化レイヤーをバイパスするため、グラフィックス集約型または計算負荷の高いワークロードにおいて、ネイティブに近いパフォーマンスを提供します。

この機能は、仮想デスクトップインフラストラクチャ(VDI)、人工知能(AI)、機械学習(ML)、ハイパフォーマンスコンピューティング(HPC)などのユースケースにおいて極めて重要です。これらの分野では、最適なパフォーマンスを得るためにGPUアクセラレーションが不可欠です。共有またはエミュレートされたGPUリソースとは異なり、パススルーは1台の仮想マシンにGPU全体を専用に割り当てます。これにより、最大のスループットと最小限のレイテンシを実現します。

GPUパススルーは、一般的にKVM(カーネルベース仮想マシン)、VMware ESXi、Citrix Hypervisorなどの仮想化プラットフォームを用いて実装されます。これらは、現代の中央処理装置(CPU)やマザーボードに搭載されているIOMMU(入出力メモリ管理ユニット)技術と組み合わせて使用されることが多くあります。

GPUパススルーの仕組みについて

GPUパススルーは、ハードウェアおよびソフトウェアレベルの仮想化サポート、具体的にはIOMMU技術を用いたPCI Express(PCIe)デバイスパススルーの組み合わせによって実現されます。これにより、物理GPUをゲスト仮想マシンに直接マッピングすることが可能となり、ホストシステムの制御をバイパスして、仮想マシンがGPUに直接かつ低遅延でアクセスできるようになります。

ハードウェア構成

GPUパススルー機能を利用するためには、サーバーがIOMMU(入出力メモリ管理ユニット)をサポートしている必要があります。この機能により、PCIeデバイスに対するデバイス分離とメモリアドレスの再マッピングが可能となります。インテルプラットフォームではこの機能はIntel VT-dとして、AMD AMD知られています。いずれの場合も、CPU、マザーボードチップセット、およびファームウェアのすべてでサポートされている必要があります。

IOMMUを有効化するには、システムBIOSまたはUEFI設定でこれを有効にする必要があります。通常、仮想化拡張機能(AMD)を有効化し、プラットフォームが対応している場合はPCIe ACS(アクセス制御サービス)が有効になっていることを確認します。完全なパススルー機能を実現するため、一部のシステムではセキュアブートやファストブートなどの機能を無効化する必要がある場合もあります。

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

GPUが仮想マシンに割り当てられた後、ゲストオペレーティングシステム(OS)には、NVIDIAなどの適切なベンダー固有のドライバーをインストールする必要があります。 AMDまたはインテルのGPUドライバーなど、適切なベンダー固有のドライバーと共にゲストOSをインストールする必要があります。これらのドライバーにより、ゲストOSは物理GPUの全機能を認識し活用できるようになります。これには3Dアクセラレーション、並列処理用のCUDAコア、ハードウェアアクセラレーションによるレンダリングパイプラインなどが含まれます。

場合によっては、ドライバの競合を防止するため、ゲスト内においてハイパーバイザーレベルのグラフィックスインターフェースを無効化する必要が生じることがあります。これにより、パススルーGPUのみが確実に利用されるようになります。

ハイパーバイザーの設定

IOMMUが有効化された後、次のステップはPCIeパススルーをサポートするハイパーバイザーの設定となります。代表的な選択肢としては、KVM/QEMU、VMware ESXi、Citrix Hypervisor(旧称XenServer)などが挙げられます。これらのプラットフォームは、低レベル仮想化ドライバーとAPIを活用し、ゲスト仮想マシンへのPCIeデバイスの直接割り当てを可能にします。

例えば、KVM環境では、デバイスパススルーはvfio-pciカーネルモジュールを使用して設定され、これにより安全かつ分離されたデバイスアクセスが保証されます。VMware ESXiはDirectPath I/Oを利用し、GPUを仮想マシンに直接公開します。これにより、仮想化オーバーヘッドを最小限に抑えながら、ネイティブに近いパフォーマンスを実現します。

デバイスバインディング

GPUパススルーにおける重要な手順は、GPUをホストシステムから切り離し、仮想マシンにバインドすることです。具体的には、GPUのPCIeアドレスをデフォルトのホストドライバからアンバインドし、vfio-pciなどのパススルー専用ドライバにバインドします。

GPUがバインドされると、ホストOSからは完全にアクセス不能となり、割り当てられた仮想マシン(VM)のみが使用可能となります。これにより競合が防止され、GPUへの排他的なアクセスが保証されます。これは、リアルタイムレンダリング、シミュレーション、深層学習モデルのトレーニングなど、レイテンシに敏感なワークロードにおいて不可欠な特性です。

GPUパススルーの利点と課題

GPUパススルーにより、仮想マシンは物理GPUに直接アクセスすることが可能となり、ハイパーバイザーの抽象化レイヤーをバイパスすることでネイティブに近いパフォーマンスを実現します。これにより、AIトレーニング、CADレンダリング、リアルタイムシミュレーションなど、計算負荷の高いワークロードに最適です。仮想マシンに専用GPUを割り当てることで、分離性とパフォーマンスの一貫性も向上し、本番環境において不可欠な要素となります。

パストルーは、単なるパフォーマンス向上にとどまらず、仮想デスクトップ、リモートワークステーション、コンテナ化されたアプリケーションにおけるGPUアクセラレーションを可能にすることで、仮想化機能を拡張します。これにより、企業は物理サーバーの台数を減らしつつ、仮想マシンごとの高いパフォーマンスを維持したワークロードの統合を実現でき、ハードウェアの活用率向上と運用効率の改善につながります。

しかしながら、GPUパススルーには技術的な課題が存在します。CPUおよびマザーボードレベルでのIOMMUサポート、適切なBIOSまたはUEFIの設定、そしてパススルーを許可するGPUが必要です。多くのコンシューマー向けGPUは完全な仮想化サポートを備えておらず、ゲストオペレーティングシステム内での互換性の制限やドライバの問題を引き起こす可能性があります。

設定の複雑さもまた要因の一つであり、カーネルの変更、正確なデバイスバインディング、ハイパーバイザーレベルの調整が必要となることが多々あります。トラブルシューティングには時間がかかることが多く、特にヘッドレスサーバーでは顕著です。また、パススルーGPUのホットプラグサポートが限定的または利用できないため、変更には通常再起動が必要となります。

GPUパススルーのハードウェア要件

GPUパススルーの実装には、IntelAMD仮想化機能をサポートするサーバーハードウェアと、適切なBIOSまたはUEFI設定が必要です。CPU、マザーボードチップセット、ファームウェアのすべてが互換性を持つ必要があり、GPUはパススルー機能をサポートしている必要があります。この機能は通常、NVIDIAAMD MIシリーズなどのエンタープライズ向けカードに搭載されています。

さらに、システムはフルサイズのGPUをサポートするために十分なPCIeレーンと電力供給を提供すべきです。高密度GPUワークロード向けに最適化されたサーバープラットフォーム(通常、高度なPCIeトポロジー、堅牢な冷却アーキテクチャ、ファームウェアレベルのパススルーサポートを備えています)は、適切に管理されたデータセンター環境において効率的なパススルー構成を実現するために必要です。

よくあるご質問

  1. GPUパススルーを有効にするにはどうすればよいですか?
    GPUパススルーは、システムBIOSまたはUEFIでIOMMUサポート(AMD)を有効にし、その後ハイパーバイザー(KVMやVMware ESXiなど)を設定して、GPUを仮想マシンに直接割り当てることで有効になります。また、ホストドライバーからGPUをアンバインドし、ゲストVMに適切なGPUドライバーをインストールする必要があります。
  2. GPUパススルーには2つのGPUが必要ですか?
    厳密には必須ではありませんが、2つのGPUの使用が推奨されます。1つはホストシステム専用に、もう1つは仮想マシン専用に割り当てるべきです。これにより、パススルーGPUが仮想マシンに完全に分離されている間も、ホストシステムはディスプレイ出力とシステム安定性を維持できます。
  3. GPUパススルーはコンテナ環境で動作しますか?
    はい、GPUパススルーは、直接GPUアクセス権を持つ仮想マシン内で設定されている場合、コンテナ環境でもご利用いただけます。あるいは、NVIDIA DockerやGPUオペレーターフレームワークといったコンテナ専用のソリューションにより、Kubernetes環境内でのGPUアクセスを実現することも可能です。