OpenStack und Nvidia Grafikkarten

16.09.2020 | Bernd Müller in howto

Virtuelle Umgebung mit OpenStack

OpenStack ist ein weit verbreitetes Produkt zur Realisierung einer virtuellen Umgebung. Diese arbeitet im Standard mit QEMU/KVM als Hypervisor. Kolla packt die OpenStack Komponenten in Container. In dieser Kombination ist ein Aufbau mit einer handelsüblichen Nvidia Grafikkarte wie unten beschrieben möglich. Dazu wird mindestens ein Hypervisor mit passendem PCI Slot, Nvidia Grafikkarte und ausreichend Platz im Gehäuse benötigt.

Hardware

  • HP ProLiant DL380 Gen9
  • Intel(R) Xeon(R) CPU E5-2678
  • 192 GB RAM
  • GeForce RTX 2080 Ti
  • Ubuntu 18.04.2 (Hypervisor)
  • Ubuntu 16.04 (Instanz)
  • CUDA 10.2

Grafikkarte

Sobald die Karte in einem passenden Server (Bauhöhe) verbaut und dieser als Hypervisor in OpenStack aufgenommen wurde, kann es auch schon losgehen. Um an die für die weitere Konfiguration notwendigen Infos zu gelangen, gehen Sie wie folgt vor:

  • PCI Adresse der Grafikkarte

Hier sind die Werte 10DE:1E07, 10DE:10F7, 10DE:1AD6, 10DE:1AD7 und 84:00.0, 84:00.1 wichtig. Die ersten vier Werte werden im weiteren Verlauf benötigt. Mit den beiden letzten Werten fragen wir nach den verwendeten Treibern.

  • verwendete Treiber

Hierbei ist die Zeile Kernel driver in use und die Einträge snd_hda_intel und nouveau darin wichtig. Sie beschreiben den Treiber, der vom Kernel verwendet wird, um mit dieser Hardware zu sprechen. Später übergeben sie sie dem Kernel, sodass diese Treiber nicht mehr geladen werden.

IOMMU

Mit dem folgenden Befehl fragen Sie ab, ob IOMMU aktiviert ist:

Finden Sie folgende Ausgabe vor

setzen Sie für AMD Prozessoren die folgenden Optionen in Kolla

und diese Optionen für Prozessoren von Intel:

Treiberzugriff auf Host unterbinden

Deaktivieren Sie den geladenen Treiber der Grafikkarte:

In unserem Beispiel ist eine Soundkarte in der Grafikkarte, die Sie wie folgt deaktivieren:

Abschließend aktualisieren Sie die Initramfs und starten den Server neu:

PCI Passthrough

Für die Passthrough-Konfiguration übergeben Sie die oben ermittelten PCI-Adressdaten an das Kernelmodul vfio.

In unserem Beispiel hat die Grafikkarte mehrere Komponenten, dann sieht die Konfiguration wie folgt aus:

Nun aktivieren Sie das Kernelmodul vfio:

zudem muss im Nova Scheduler der ‘PciPassthroughFilter’ aktiviert und ausgerollt werden.

Nun noch die Informationen für Nova konfigurieren:

Ist nur ein Hypervisor mit einer Grafikkarte ausgestattet, wird Nova Compute auch nur auf diesem Hypervisor konfiguriert:

Bei unserer Grafikkarte sind mehrere Geräte in der Karte verbaut und wenn all diese durchgereicht werden sollen, sieht die Konfiguration so aus:

OpenStack Flavor

Nachdem Sie die OpenStack Nova Konfiguration ausgerollt haben, fehlt noch ein OpenStack Flavor, das Sie mit folgendem Befehl anlegen:

Die Zahl bei nvidia:1 beschreibt die Anzahl der durchzureichenden Geräte-Komponenten, folglich ist diese in unserem Beispiel 4 und damit ist der Befehl:

Hypervisor verstecken

Zum Schluss muss der Hypervisor “versteckt” werden. Dies ist notwendig, damit der nvidia Treiber später auch in der virtuellen Maschine geladen wird und die Grafikkarte ansteuern kann. Ohne diesen Trick funktioniert das Ganze nicht und die Grafikkarte wird vom Treiber “ignoriert”.

Virtuelle Maschine

Neben den GPU Treibern auf der Download-Seite des Herstellers [1], existiert mit CUDA ein spezielles Toolkit von Nvidia [2], das u.a. auch das nvidia Treiber Binary mit an Bord hat. Nach der Auswahl für Operating System, Architecture, Distribution und Distributions-Version wählen Sie den Installer Type (runfile(local), deb(local), deb(network) und cluster(local)) aus. Details zur Installation des CUDA Toolkits finden Sie hier [3].

CUDA installieren

Nachdem Sie CUDA mit dem runfile(local) installiert haben

und die Anpassungen an $PATH und für ld vorgenommen haben, verifizieren Sie die korrekte Zusammenarbeit von Treiber in der virtuellen Maschine und Grafikkarte auf dem Host an folgenden Stellen:

  • Im proc Verzeichnis sehen Sie die Version des Kernelmoduls für Nvidia
  • Sie müssen drei Geräte unter dev sehen
  • Zuletzt sehen Sie mit nvidia-smi die Informationen zur Grafikkarte
  • Mit dem Toolkit CUDA werden Samples mitgeliefert, die nach einem make für einen ersten Test zur Verfügung stehen, weitere Informationen finden Sie unter [4].

Blick in die Zukunft

Es ist nicht ausgeschlossen, dass das hier beschriebene Vorgehen in einer zukünftigen Version des Treibers nicht funktioniert.

Nachtrag (14.4.2021)

Seit dem 30. März 2021 hat Nvidia einen Windows-Treiber im Program (Version 465.89), welcher das Durchreichen nun offiziell unterstützt. Nähere Informationen finden sich hier.

Bernd Müller
Bernd Müller
Bernd Müller beschäftigt sich seit 2009 bei B1 Systems mit den Themen Monitoring, Hochverfügbarkeit, Virtualisierung und Automatisierung. Weiterhin betreut er Support- und Operating-Kunden.

 


Haben Sie Anmerkungen oder Nachfragen? Melden Sie sich unter blog%b1-systems.de
Col 2