Können mehrere Mediencontainer eine GPU gemeinsam nutzen, ohne dass es zu Gerätekonflikten kommt?

Eva Wong ist die Technische Redakteurin und und leidenschaftliche Tüftlerin bei ZimaSpace. Eine lebenslange Geek mit einer Leidenschaft für Homelabs und Open-Source-Software, sie spezialisiert sich darauf, komplexe technische Konzepte in zugängliche, praktische Anleitungenzu übersetzen. Eva ist der Meinung, dass Self-Hosting Spaß machen und nicht einschüchternd sein sollte. Durch ihre Tutorials befähigt sie die Community, Hardware-Setups zu entmystifizieren, vom Bau ihres ersten NAS bis hin zur Beherrschung von Docker-Containern.

Ja, mehrere Mediencontainer können sich eine GPU teilen, wenn Host-Treiber und Laufzeitumgebung den gleichzeitigen Zugriff unterstützen und jeder Container korrekt Zugriff auf das Gerät erhält.

Container besitzen eine GPU normalerweise nicht exklusiv, wie es bei einer vollständig durchgereichten virtuellen Maschine der Fall ist. Intel Quick Sync und AMD VA-API stellen üblicherweise gemeinsam nutzbare Rendergeräte bereit, während NVIDIA-Container denselben Treiber-Stack und dieselbe GPU gemeinsam nutzen können, vorbehaltlich der Hardware-, Treiber-, Codec-, Speicher- und Sitzungslimits. Konflikte entstehen, wenn die Orchestrierung das Gerät exklusiv zuweist, Berechtigungen abweichen, Container inkompatible Bibliotheken enthalten oder gleichzeitige Transkodierungen die praktische Kapazität der GPU überschreiten.

Bestätigen, dass der Host gleichzeitige GPU-Workloads unterstützt

Installieren und überprüfen Sie zuerst den Host-Treiber und führen Sie anschließend eine hardwarebeschleunigte Transkodierung außerhalb oder innerhalb eines bekannten funktionierenden Containers aus. Notieren Sie GPU-Modell, Treiber, unterstützte Kodierungs- und Dekodierungs-Codecs, Speicher und die beobachtete Auslastung.

Eine Diskussion in der TrueNAS-Community berichtet, dass mehrere Apps dieselbe GPU nutzen können, wenn diese zur Verwendung bereitgestellt und nicht als exklusive Anwendungsressource zugewiesen wird. Der Unterschied liegt zwischen gemeinsamem Gerätezugriff und exklusiver Passthrough-Zuweisung.

Wenn ein Container die GPU nicht zuverlässig verwenden kann, fügen Sie keinen weiteren hinzu. Beheben Sie zuerst Probleme mit Host-Treiber, Kernel-Gerät, Firmware oder Laufzeitumgebung, bevor Sie den Parallelbetrieb testen.

Das richtige Gerät für jeden Container bereitstellen

Vergleichen Sie bei Intel und AMD die an jeden Container weitergereichten /dev/dri-Karten- und Render-Nodes. Vergleichen Sie bei NVIDIA die Laufzeitumgebung oder Geräteanforderung, Variablen für sichtbare Geräte und die Treiberfunktionen.

Ein Jellyfin-Fall unter NixOS beschreibt, dass sich dieselbe Host-GPU in verschiedenen Containern unterschiedlich verhielt, weil sich Betriebssystem- und Geräteumgebung geändert hatten. Er zeigt, warum übereinstimmende Gerätebereitstellung und Bibliotheken wichtiger sind als das Kopieren einer einzelnen Compose-Zeile.

Verwenden Sie nur den Gerätesatz, den die jeweilige App benötigt, und vermeiden Sie den privilegierten Modus als Abkürzung. Bestätigen Sie nach einem Neuaufbau, dass der erwartete Render-Node oder das erwartete NVIDIA-Gerät in jedem Container sichtbar ist.

Berechtigungen und Benutzergruppen containerübergreifend angleichen

Ermitteln Sie Besitzer und Gruppe des Render-Geräts auf dem Host anhand ihrer numerischen IDs und bestätigen Sie anschließend, dass der Prozess in jedem Container über die entsprechende zusätzliche Gruppe oder Berechtigung verfügt. Bildspezifische Benutzernamen können auf unterschiedliche numerische IDs abgebildet werden.

Ein Container, der die GPU auflistet, sie aber nicht öffnen kann, wechselt möglicherweise auf Software-Transkodierung oder meldet „Berechtigung verweigert“. Dieser Fehler kann wie ein Gerätekonflikt aussehen, während der andere Mediencontainer weiterhin funktioniert.

Testen Sie jeden Container einzeln mit derselben Datei und demselben Codec. Halten Sie Berechtigungsanpassungen explizit in Compose fest, damit sie durch Image-Aktualisierungen und Neuerstellungen nicht entfernt werden.

-15% OFF

Codec-, Treiber- und Laufzeitkompatibilität prüfen

Vergleichen Sie die Codecs und Filter, deren Ausführung jede App von der GPU anfordert, einschließlich H.264, HEVC, AV1, Tonemapping, Untertiteln, Skalierung sowie OpenCL- oder CUDA-Filtern. Ein Workload kann Funktionen erfordern, die ein anderer nie verwendet.

Ein aktueller Leitfaden zur GPU-Passthrough-Konfiguration für Jellyfin betont, dass die Containerkonfiguration zu Intel QSV, NVIDIA NVENC oder AMD VA-API passen muss, anstatt alle Hardwarebeschleunigungspfade als austauschbar zu betrachten. Die Laufzeitumgebung muss zur GPU-Familie passen.

Halten Sie den Host-Treiber mit den Bibliotheken der Container-Laufzeitumgebung kompatibel und vermeiden Sie widersprüchliche Treiber in einzelnen Mediencontainern. Testen Sie Dekodierung, Kodierung und Tonemapping getrennt.

Gleichzeitige Sitzungen, Speicher- und Temperaturgrenzen messen

Starten Sie in jedem Container eine Hardware-Transkodierung und überwachen Sie GPU-Prozesse, Auslastung, Encoder- und Decoder-Last, Speicher, Temperatur, Fehler und Stream-Stabilität. Erhöhen Sie die Anzahl gleichzeitiger Sitzungen schrittweise und verwenden Sie repräsentative Medien.

Eine Konfiguration in der Proxmox-Community beschreibt mehrere Jellyfin-Instanzen, die gleichzeitig transkodieren, und bestätigt die Aktivität auf dem Host. Sie zeigt außerdem, dass gleichzeitige Sitzungen praktische Grenzen haben, die durch Hard- und Software festgelegt werden.

Eine gemeinsam genutzte GPU funktioniert, wenn beide Apps weiterhin beschleunigt und reaktionsfähig bleiben. Ruckler, fehlgeschlagene Encoder-Erstellung, Speicherfehler, thermische Zurücksetzungen oder der Wechsel einer App zur Softwareverarbeitung, wodurch die andere beeinträchtigt wird, weisen darauf hin, dass der Workload den aktuellen Spielraum überschreitet.

Getrennte Konfigurations- und Transkodierungspfade bei gemeinsam genutzter GPU beibehalten

Geben Sie jedem Mediencontainer eine eigene Konfigurationsdatenbank, einen eigenen Cache, ein eigenes Transkodierungsverzeichnis, eigene Ports und eine eigene Identität. Teilen Sie nur die schreibgeschützte Medienbibliothek und das GPU-Gerät, sofern die Anwendungen nicht ausdrücklich ein gemeinsames Zustandsverzeichnis unterstützen.

Der ZimaSpace-Leitfaden zum Isolieren von Containerabhängigkeiten hilft dabei, einen GPU-Konflikt von einem Datenbank-, Cache-, Netzwerk- oder Mount-Fehler zu unterscheiden.

Die Konfiguration ist erst dann validiert, wenn beide Container Neuerstellungen überstehen, gleichzeitig Hardwarebeschleunigung nutzen, ihre eigenen Berechtigungen und Zustände einhalten und innerhalb der Sitzungs-, Speicher- und Temperaturgrenzen bleiben. Verwenden Sie separate GPUs oder eine Softwareausweichlösung, wenn gleichzeitige Workloads die erforderliche Qualität nicht zuverlässig erfüllen können.

Support & Tipps

Mehr zum Lesen

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.