FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Hyper-V経由でGPGPUを利用することは無理?

このあたり、まったくの無知だったのだが、Hyper-V経由でGPUを利用するのはやっぱり無理なのか。 やりたいことは、Hyper-V上にUbuntuをインストールし、GPUを有効化し、TensorFlowやCNTKを動作させることだった。 しかし、どう頑張っても、GPGPUを認識させることができない。

よく考えてみれば、このことは別に驚くに値しない。Hyper-Vアーキテクチャ上、子パーティションはどうやら直接ハードウェアにアクセスする訳ではなく、親のOS(Windows)を経由してアクセスするようだ。 子パーティションがアクセスを要求すると、VMBusを通じて親OSに要求が渡り、処理されるようになる。そりゃ、直接見えない訳だ。

以下はWikipediaからの抜粋。Hyper-Vの解説。

パーティションはハードウェアリソースを直アクセスしない。そのかわり、仮想デバイスという概念でリソースの仮想的なビューを持つ。仮想デバイスに要求すると、VMBusを経由して親パーティションのデバイスにリダイレクトされる。リクエストはそこで管理される。VMBusはパーティション間の通信を可能にする論理的なチャンネルである。レスポンスも同様にVMBusを経由してリダイレクトされる。もし親パーティションのデバイスが仮想デバイスでもあるなら、親パーティションやより遠くに、物理デバイスへのアクセスできるところまでリダイレクトされる。親パーティションは仮想化サービスプロバイダ (Virtualization Service Provider) を実行する。それはVMBusを接続し、子パーティションからのデバイスのアクセス要求をハンドルする。子パーティションの仮想デバイスは内部で仮想サービスクライアント (Virtualization Service Client) を実行する。それはVMBusを経由して親パーティションのVSPへリクエストをリダイレクトする。この全体のプロセスはゲストOSに透過的である。

https://upload.wikimedia.org/wikipedia/commons/thumb/6/64/Viridian_Architecture.svg/923px-Viridian_Architecture.svg.png

という訳で、仮想OSからGPUを使えるようにする試行はまたふりだしに戻ってしまった。次に調査すべきは、VMware ESXiかなあ。これも、GPUを扱うことができるのか、調査してみる必要がある。