Nvidia-Treiber nach Update auf QuTS hero h6.0.3.3670 defekt

Nach dem Update auf QuTS hero h6.0.3.3670 kann ich Plex nicht mehr über Container Station ausführen. Ich bekomme diese Fehlermeldung

Failed to start application "plex". Error message: operateApp action [--project-name plex start] failed: exit status 1:  Container plex Starting Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Using requested mode 'legacy'nvidia-container-cli: detection error: open failed: /share/ZFS530_DATA/.qpkg/NVIDIA_GPU_DRV/usr/nvidia/libnvidia-tls.so.575.64.05: no such file or directory: unknown

Ich habe versucht, sowohl die NVIDIA-Kerneltreiber (passend zur Betriebssystemversion) als auch den GPU-Treiber zu entfernen und neu zu installieren, leider ohne Erfolg. Außerdem kann ich nicht zur vorherigen Betriebssystemversion zurückkehren, weil die Benutzeroberfläche das blockiert.

Wann können wir mit einer Lösung rechnen?

Übrigens ist die Version in NVIDIA_GPU_DRV 580.159.04, was nicht mit der von Docker angeforderten Version (575.64.05) übereinstimmt.

Warum möchtest du Plex in Container Station ausführen? Es gibt eine native App…

Und warum nicht? Ich möchte wirklich immer die neuesten App-Versionen verwenden. Dein Kommentar enthält weder hilfreiche Informationen noch eine Lösung ….. Tatsache ist, dass es mit den Nvidia-Treibern unter der neuesten Firmware-Version bzw. App Probleme gibt, und das sollte behoben werden

Es mag ein Problem geben, aber du machst die Sache komplizierter und schwieriger als nötig. Plex hat auf seiner Website immer die neuesten QPKGs. Ich werde in der App benachrichtigt und lade sie herunter.

Es könnte ein Problem mit dem Nvidia-Treiber geben. Aber es gibt für dich eine einfachere Lösung, die keine Probleme macht.

Ist aber deine Entscheidung. Nutze etwas, das schwieriger und komplizierter ist, oder etwas Einfaches …

Ich frage nicht nach Alternativen, ich habe meine Gründe, das zu verwenden. Dieses Problem betrifft auch andere Container, die auf die GPU angewiesen sind. Bitte lass uns auf das eigentliche Problem konzentrieren.

Hier dasselbe Problem nach dem Update auf h6.0.3.3670. Ich habe die Ursache und eine Lösung gefunden.

Was passiert ist: Das Update hat den NVIDIA-Treiber auf 580.159.04 aktualisiert. Das Kernelmodul und die GPU Driver-App stimmen beide überein, der Treiber selbst ist also in Ordnung. Container Station verwaltet aber einen eigenen NVIDIA-Bibliothekscache, und darin waren noch die alten Dateien der Version 575.64.05 aufgeführt, die nicht mehr existieren. Das verursacht den Fehler libnvidia-tls.so.575.64.05: no such file or directory im ersten Beitrag. Weder ein Neustart noch eine Neuinstallation der Treiber oder das Ausführen von NVIDIA_GPU_DRV.sh start haben diesen Cache verändert. Er muss daher von Hand neu erstellt werden.

Lösung: Führe diese Befehle als Administrator über SSH aus. Ich bin nur ein Nutzer und gehöre nicht zu QNAP, also erfolgt die Anwendung auf eigenes Risiko.

1. Pfade festlegen (das funktioniert unabhängig davon, wie dein Pool heißt):

NV=$(getcfg NVIDIA_GPU_DRV Install_Path -f /etc/config/qpkg.conf)
CS=$(getcfg container-station Install_Path -f /etc/config/qpkg.conf)
C="$CS/opt/nvidia/etc/ld.so.cache"

2. Prüfen, ob es dasselbe Problem ist:

cat /proc/driver/nvidia/version     # sollte 580.159.04 anzeigen
sudo grep -E '(root|ldcache) *=' "$CS/etc/nvidia-container-runtime/config.toml"
grep -c 575.64.05 "$C"              # jeder Wert über 0 = veralteter Cache

Die Konfiguration sollte root = "/" und eine ldcache-Zeile enthalten, die auf genau diese ld.so.cache verweist. Wenn das Kernelmodul nicht Version 580.159.04 hat, liegt bei dir ein anderes Problem vor und diese Lösung hilft nicht.

3. Cache sichern und neu erstellen:

sudo cp "$C" "$C.bak"
sudo /sbin/ldconfig -X -C "$C" "$NV/usr/nvidia"
grep -c 575.64.05 "$C"; grep -c 580.159.04 "$C"   # erwartet: 0, dann eine Zahl über 0

-C sorgt dafür, dass ldconfig nur in die Cachedatei von Container Station schreibt, und -X verhindert Änderungen an symbolischen Links. So wird sonst nichts auf dem System verändert.

4. Starte deine GPU-Container über Container Station. Container Station selbst musst du nicht neu starten. Meine Container liefen sofort wieder.

Zum Rückgängigmachen führe sudo cp "$C.bak" "$C" aus. Ein zukünftiges Treiber- oder Container-Station-Update könnte dazu führen, dass der Cache wieder veraltet ist. Wiederhole in diesem Fall Schritt 3.

Danke an mjellybaby für die PaddlePaddle-Anleitung, in der erwähnt wird, dass dieser Cache nach GPU-Treiber-Updates veralten kann. Ein Neustart hat das Problem bei mir allerdings nicht behoben: Getting GPU-Accelerated PaddlePaddle Working in Docker on QNAP NAS

Für QNAP: Die eigentliche Ursache ist, dass die NVIDIA-Datei ld.so.cache von Container Station bei einem Update des GPU-Treiberpakets nicht neu erstellt wird. Bitte sorgt dafür, dass sie bei Treiber- oder Container-Station-Updates automatisch neu erstellt wird.

Super! Danke für die ausführliche Erklärung, ich werde es mir anschauen! :heart::heart::heart:

@Xisko Wir haben das Problem bestätigt und werden es in einer kommenden Version von Container Station beheben.

@Pol77 Danke, dass du die Ursache und den Workaround geteilt hast — das ist für andere Nutzer mit demselben Problem sehr hilfreich. Danke!