Windows 11 Pro Hyper-V - GPU in VM
Hallo zusammen,
nachdem ich gestern noch gescheitert war scheine ich nun ein gutes Stück weiter zu sein und möchte den Fortschritt hier kurz teilen.
Hostsystem:
iGPU eines AMD Ryzen 7 9700X
Ziel war es die NVIDIA Quadro einer VM zur Verfügung zu stellen.
Ich würde sagen, das ist geglückt:
Hier ein kleines HowTo, vielleicht hilft es jemandem.
Informationen
Bei NVIDIA lässt sich über die Powershell mit nvidia-smi einiges zur Grafikkarte auslesen:
Um zu erfahren, welche GPUs für die Partitionierung zur Verfügung stehen:
Mein erster Versuch ging also wie von Microsoft beschrieben mit:
eine GPU zur VM "Test" zuzuweisen, ein anschließender Check in der Powershell zeigte aber keine sinnvolle Ausgabe:
Die VM ließ sich aber problemlos starten und zeigte im Geräte-Manager die AMD iGPU, also grundlegend passiert da etwas.
Da ich die AMD iGPU aber nicht wollte, habe ich diese wieder entfernt:
Nach einem Blick in die Hilfe des VMGpuPartitionAdapter - Befehls habe ich mir das wie folgt zusammengereimt:
Es steht zwar nirgends, dass der InstancePath = Name ist, aber das geht.
Die Grafikkarte wurde nun zwar in der VM gelistet, aber mit einem Ausrufezeichen versehen.
Das Treibersetup von NVIDIA innerhalb der VM auszuführen, führte nur zu einem Fehler bei der Erkennung der Grafikkarte und auch über den TaskManager konnte manuell kein Treiber installiert werden, da angeblich bereits der beste Treiber für "Microsoft Hyper-V-Video" installiert sei.
...niemand hat versucht den Microsoft Hyper-V-Video - Treiber zu aktualisieren.
Für die Treiberdateien habe ich mich dann einem Skript von GitHub bedient (siehe Quellen).
Damit wird die VHD der VM gemountet, die Treiberdateien eingefügt und die VHD wieder getrennt.
Der Standardbefehlt lautet -GPUName "AUTO", damit wird aber in meinem Fall wieder die AMD als Grafikkarte angenommen.
Da wie oben bildlich zu sehen nicht nur der Geräte-Manager die Grafikkarte zeigt, sondern auch die Auslastung am Host im Task-Manager korrekt zu sehen ist und jeder weiß, dass sich Furmark standardmäßig in einer VM nicht starten lässt, bin ich nun erstmal guter Dinge, dass das hier erfolgreich weitergeht.
Grüße
ToWa
Quellen:
nachdem ich gestern noch gescheitert war scheine ich nun ein gutes Stück weiter zu sein und möchte den Fortschritt hier kurz teilen.
Hostsystem:
iGPU eines AMD Ryzen 7 9700X
- AMD Radeon(TM) Graphics
- NVIDIA Quadro M2000
Ziel war es die NVIDIA Quadro einer VM zur Verfügung zu stellen.
Ich würde sagen, das ist geglückt:
Hier ein kleines HowTo, vielleicht hilft es jemandem.
Informationen
Bei NVIDIA lässt sich über die Powershell mit nvidia-smi einiges zur Grafikkarte auslesen:
nvidia-smi
Fri Dec 6 20:16:14 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 553.35 Driver Version: 553.35 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 Quadro M2000 WDDM | 00000000:01:00.0 Off | N/A |
| 56% 32C P8 12W / 75W | 0MiB / 4096MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
Um zu erfahren, welche GPUs für die Partitionierung zur Verfügung stehen:
Get-VMHostPartitionableGpu | FL Name,ValidPartitionCounts
Name : \\?\PCI#VEN_1002&DEV_13C0&SUBSYS_88771043&REV_C5#4&1ebe6a9c&0&0041#{064092b3-625e-43bf-9eb5-dc84
5897dd59}\GPUPARAV
ValidPartitionCounts : {32}
Name : \\?\PCI#VEN_10DE&DEV_1430&SUBSYS_119010DE&REV_A1#4&1babdf5b&0&0009#{064092b3-625e-43bf-9eb5-dc84
5897dd59}\GPUPARAV
ValidPartitionCounts : {32}
Mein erster Versuch ging also wie von Microsoft beschrieben mit:
Add-VMGpuPartitionAdapter -VMName Test
PS C:\Users\Administrator> Get-VMGpuPartitionAdapter -VMName Test | FL InstancePath,PartitionId,PartitionVfLuid
InstancePath :
PartitionId :
PartitionVfLuid :
Da ich die AMD iGPU aber nicht wollte, habe ich diese wieder entfernt:
Remove-VMGpuPartitionAdapter -VMName Test
Add-VMGpuPartitionAdapter -VMName Test -InstancePath "\\?\PCI#VEN_10DE&DEV_1430&SUBSYS_119010DE&REV_A1#4&1babdf5b&0&0009#{064092b3-625e-43bf-9eb5-dc845897dd59}\GPUPARAV"
Es steht zwar nirgends, dass der InstancePath = Name ist, aber das geht.
Die Grafikkarte wurde nun zwar in der VM gelistet, aber mit einem Ausrufezeichen versehen.
Das Treibersetup von NVIDIA innerhalb der VM auszuführen, führte nur zu einem Fehler bei der Erkennung der Grafikkarte und auch über den TaskManager konnte manuell kein Treiber installiert werden, da angeblich bereits der beste Treiber für "Microsoft Hyper-V-Video" installiert sei.
...niemand hat versucht den Microsoft Hyper-V-Video - Treiber zu aktualisieren.
Für die Treiberdateien habe ich mich dann einem Skript von GitHub bedient (siehe Quellen).
Damit wird die VHD der VM gemountet, die Treiberdateien eingefügt und die VHD wieder getrennt.
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force
.\Update-VMGpuPartitionDriver.ps1 -VMName Test -GPUName "NVIDIA Quadro M2000"
Mounting Drive...
Copying GPU Files - this could take a while...
INFO : Finding and copying driver files for NVIDIA Quadro M2000 to VM. This could take a while...
Dismounting Drive...
Done…
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Restricted –Force
Der Standardbefehlt lautet -GPUName "AUTO", damit wird aber in meinem Fall wieder die AMD als Grafikkarte angenommen.
Da wie oben bildlich zu sehen nicht nur der Geräte-Manager die Grafikkarte zeigt, sondern auch die Auslastung am Host im Task-Manager korrekt zu sehen ist und jeder weiß, dass sich Furmark standardmäßig in einer VM nicht starten lässt, bin ich nun erstmal guter Dinge, dass das hier erfolgreich weitergeht.
Grüße
ToWa
Quellen:
- https://learn.microsoft.com/en-us/windows-server/virtualization/hyper-v/ ...
- https://woshub.com/passthrough-gpu-to-hyperv-vm/#h2_2
- https://github.com/jamesstringerparsec/Easy-GPU-PV
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 670034
Url: https://administrator.de/tutorial/windows-11-pro-hyper-v-gpu-in-vm-670034.html
Ausgedruckt am: 07.01.2025 um 18:01 Uhr
5 Kommentare
Neuester Kommentar
Moin @dertowa,
😯 ... ähm, ich sehe zwar was du da gemacht hast, so ganz kann ich es aber nicht wirklich verstehen.
Denn das ist weder DDA noch wirklich GPU-Partitioning, sondern eher GPU-Sharing, was ich aber so in keiner einzigen offiziellen MS Doku finde. 😖
Denn bei DDA würdest du die GPU nur noch in der VM sehen, in die du die GPU gemountet hast und für GPU-Partitioning müsstest du die GPU vorher mit ...
... aufteilen, was du wie ich sehe jedoch nicht wirklich gemacht hast. 🙃
Ausserdem sollte GPU-Partitioning laut NVIDIA selbst, nur mit zusätzlichen Lizenzen funktionieren die du auch nicht benutzt.
Sehr spannend ... ich frag mal einen MVP wie das überhaupt möglich ist.
Gruss Alex
😯 ... ähm, ich sehe zwar was du da gemacht hast, so ganz kann ich es aber nicht wirklich verstehen.
Denn das ist weder DDA noch wirklich GPU-Partitioning, sondern eher GPU-Sharing, was ich aber so in keiner einzigen offiziellen MS Doku finde. 😖
Denn bei DDA würdest du die GPU nur noch in der VM sehen, in die du die GPU gemountet hast und für GPU-Partitioning müsstest du die GPU vorher mit ...
Set-VMHostPartitionableGpu -Name "<GPU-name>" -PartitionCount <partition-count>
... aufteilen, was du wie ich sehe jedoch nicht wirklich gemacht hast. 🙃
Ausserdem sollte GPU-Partitioning laut NVIDIA selbst, nur mit zusätzlichen Lizenzen funktionieren die du auch nicht benutzt.
Sehr spannend ... ich frag mal einen MVP wie das überhaupt möglich ist.
Gruss Alex
Moin @dertowa,
ähm ja, aber GPU-Partitionierung sollte eigentlich nur dann funktionieren, wenn die entsprechende GPU auch aufgeteilt ist. 🙃
Aber die hast du doch nicht verwendet ... oder?
Ich fürchte, damit bist du noch nicht ganz durch ... denn, sehe ich das richtig, dass trotz dessen, dass du die GPU der VM zugeordnet hast, diese auch noch im Taskmanager des Host-OS zu sehen ist und zwar mit der Auslastung, die eigentlich innerhalb der VM erfolgt?
Gruss Alex
Richtig, habe ich nicht, da in der Doku bei den speziellen Karten die
Bei meiner alten Quadro werden nur 32C aufgelistet, daher habe ich darauf verzichtet.
Ich wollte die Grafikkarte ja auch nur in einer VM, ob es über mehrere geht steht bei mir noch als Versuch aus.
- ValidPartitionCounts
Bei meiner alten Quadro werden nur 32C aufgelistet, daher habe ich darauf verzichtet.
Ich wollte die Grafikkarte ja auch nur in einer VM, ob es über mehrere geht steht bei mir noch als Versuch aus.
ähm ja, aber GPU-Partitionierung sollte eigentlich nur dann funktionieren, wenn die entsprechende GPU auch aufgeteilt ist. 🙃
Jap, dafür gibt es ja auch die in der MS-Doku genannten speziellen Grafikkarten.
Aber die hast du doch nicht verwendet ... oder?
P.S.: Aber es freut mich, dass ich dich auch mal mit etwas überraschen kann.
Ich fürchte, damit bist du noch nicht ganz durch ... denn, sehe ich das richtig, dass trotz dessen, dass du die GPU der VM zugeordnet hast, diese auch noch im Taskmanager des Host-OS zu sehen ist und zwar mit der Auslastung, die eigentlich innerhalb der VM erfolgt?
Gruss Alex
Moin @dertowa,
zuerst das Wichtigste.
ich habe das keineswegs vor, im Gegenteil.
Ich bin sehr darüber erstaunt, dass es genau so funktioniert und würde daher auch sehr gerne verstehen, warum das so ist.
Na ja, der Kernel eines Windows 24H2 ist zu 100% baugleich wie auch der kernel eines Server 2025, daher sollten die meisten Dinge die auf einem Server laufen, theoretisch auch auf den Client möglich sein. 🙃
Ich habe selber schon vor etwa zwei jahren MPIO auf meiner W11 Workstation aktiviert gehabt, was eigentlich auch nur die Server können sollten. 😁
Jedoch, das was du hier zauberst ist auch bei einem Server nicht dokumentiert, daher finde ich das Ganze auch besonders spannend.
Ich würde es aber gerne verstehen, wie vor allem dieser Shared-Modus funktioniert, den du zu benutzen scheinst,
der bisher offiziel, sprich, seitens Microsoft, jedoch nirgends dokumentiert ist.
Denn ich finde diesen Modus übrigens mitunter auch deswegen sehr interessant, weil du dafür so wie es aussieht auch keine zusätzlichen Lizenzen benötigst. 😉
Was übrigens auch der Grund sein könnte, warum dieser so gut versteckt/offiziel undokumentiert ist. 🙃
Meine Frage bezog sich eher auf die spezieellen GPU-P Treiber von NVIDIA.
Aber, da du schreibst, dass das auch mit der AMD GPU funktioniert, was ich übrigens auch sehr sehr spannend finde,
wirst du wohl dafür nicht die NVIDIA Treiber benutzt haben.
Sprich, das was du gemacht hast, hast du so wie es aussieht mit den Standardtreibern der entsprechenden GPU's hinbekommen.
Kannst du vielleicht auch mal testen, ob du die GPU genau so parallel auch einer weiteren VM zuweisen und auch aktiv in beiden VM's benutzen kannst, danke.
Gruss Alex
zuerst das Wichtigste.
> P.S.: Mach mir das hier nicht madig,
ich habe das keineswegs vor, im Gegenteil.
Ich bin sehr darüber erstaunt, dass es genau so funktioniert und würde daher auch sehr gerne verstehen, warum das so ist.
ich würde ja auch DDA nutzen, aber das geht wohl nur mit Microsoft Server und nicht mit Windows.
Na ja, der Kernel eines Windows 24H2 ist zu 100% baugleich wie auch der kernel eines Server 2025, daher sollten die meisten Dinge die auf einem Server laufen, theoretisch auch auf den Client möglich sein. 🙃
Ich habe selber schon vor etwa zwei jahren MPIO auf meiner W11 Workstation aktiviert gehabt, was eigentlich auch nur die Server können sollten. 😁
Jedoch, das was du hier zauberst ist auch bei einem Server nicht dokumentiert, daher finde ich das Ganze auch besonders spannend.
Klar, ob jetzt aber DDA, Shared oder Partitionierung ist mir eigentlich relativ, so lang die Performance in der VM ankommt.
Ich würde es aber gerne verstehen, wie vor allem dieser Shared-Modus funktioniert, den du zu benutzen scheinst,
der bisher offiziel, sprich, seitens Microsoft, jedoch nirgends dokumentiert ist.
Denn ich finde diesen Modus übrigens mitunter auch deswegen sehr interessant, weil du dafür so wie es aussieht auch keine zusätzlichen Lizenzen benötigst. 😉
Was übrigens auch der Grund sein könnte, warum dieser so gut versteckt/offiziel undokumentiert ist. 🙃
Aber die hast du doch nicht verwendet ... oder?
Nein, es ist eine einfache Quadro und keine spezielle Karte, auch die iGPU von AMD funktioniert wie oben beschrieben in der VM.Meine Frage bezog sich eher auf die spezieellen GPU-P Treiber von NVIDIA.
Aber, da du schreibst, dass das auch mit der AMD GPU funktioniert, was ich übrigens auch sehr sehr spannend finde,
wirst du wohl dafür nicht die NVIDIA Treiber benutzt haben.
Sprich, das was du gemacht hast, hast du so wie es aussieht mit den Standardtreibern der entsprechenden GPU's hinbekommen.
Kannst du vielleicht auch mal testen, ob du die GPU genau so parallel auch einer weiteren VM zuweisen und auch aktiv in beiden VM's benutzen kannst, danke.
Gruss Alex