本文へスキップ

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 (Input-Output Memory Management Unit) をサポートしている必要があります。これは、PCIeデバイスのデバイス分離とメモリーアドレス再マッピングを可能にします。Intelプラットフォームではこの機能はIntel VT-dとして知られ、AMDシステムではAMD-Viと呼ばれます。両方ともCPU、マザーボードチップセット、ファームウェアによってサポートされている必要があります。

IOMMUを有効にするには、システムのBIOSまたはUEFI設定で有効にする必要があります。これは通常、仮想化拡張機能 (VT-dまたはAMD-Vi) を有効にし、プラットフォームがサポートしている場合はPCIe ACS (Access Control Services) が有効になっていることを確認することを含みます。完全なパススルー機能のためには、Secure BootやFast Bootなどの機能を無効にする必要があるシステムもあります。

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

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

場合によっては、ドライバの競合を防止するため、ゲスト内においてハイパーバイザーレベルのグラフィックスインターフェースを無効化する必要が生じることがあります。これにより、パススルー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パススルーを実装するには、Intel VT-dやAMD-ViなどのIOMMU仮想化機能をサポートするサーバーハードウェアと、適切なBIOSまたはUEFI構成が必要です。CPU、マザーボードチップセット、ファームウェアはすべて互換性がある必要があり、GPUはパススルー機能をサポートしている必要があります。この機能は通常、NVIDIA A100やAMD Instinct MIシリーズなどのエンタープライズクラスのカードに見られます。

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

よくあるご質問

  1. GPUパススルーを有効にするにはどうすればよいですか?
    GPUパススルーは、システムのBIOSまたはUEFIでIOMMUサポート (VT-dまたはAMD-Vi) を有効にし、その後、ハイパーバイザー (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アクセスを実現することも可能です。