更新至 QuTS hero h6.0.3.3670 後 Nvidia 驅動程式無法運作

更新至 QuTS hero h6.0.3.3670 後,我無法使用 Container Station 執行 Plex。我收到以下錯誤訊息

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

我已嘗試移除並重新安裝與作業系統版本相符的 NVIDIA 核心驅動程式,以及 GPU 驅動程式,但都沒有成功。此外,介面不允許我降回先前的作業系統版本。

預計何時能修復這個問題?

對了,NVIDIA_GPU_DRV 中的版本是 580.159.04,與 Docker 要求的版本(5*75.64.05)*不符

你為什麼想在 Container Station 中執行 Plex? 已經有原生應用程式了……

為什麼不行?我真的很想一直使用最新版本的應用程式。你的留言沒有提供任何有用的資訊或解決方法……事實是,Nvidia 驅動程式在最新版韌體/應用程式上有問題,應該要修好。

可能是有問題,但你把事情弄得更複雜、更困難了。Plex 官網上隨時都有最新的 QPKG 套件。我會在應用程式裡收到通知,然後下載它們。

可能是 Nvidia 驅動程式有問題。但有個更簡單、也沒有這些問題的解決方法。

不過還是由你決定。要用比較困難複雜的方法,還是用簡單的方法……

我不是在尋求替代方案,我有使用它的理由,而且這個問題也影響到其他依賴 GPU 的容器。請讓我們聚焦在真正的問題上。

更新到 h6.0.3.3670 後,我也遇到了同樣的問題。我找到了原因和解決方法。

發生了什麼事: 更新將 NVIDIA 驅動程式升級到了 580.159.04。核心模組和 GPU Driver 應用程式的版本一致,所以驅動程式本身沒有問題。但 Container Station 有自己的 NVIDIA 函式庫快取,而該快取仍列著舊版 575.64.05 的檔案,這些檔案已經不存在了。這就是首篇貼文中 libnvidia-tls.so.575.64.05: no such file or directory 錯誤的原因。重新開機、重新安裝驅動程式及執行 NVIDIA_GPU_DRV.sh start 都沒有改變這個快取,所以必須手動重建。

解決方法: 以管理員身分透過 SSH 執行以下指令。我只是一般使用者,不是 QNAP 的人員,請自行承擔使用風險。

1. 設定路徑(無論你的儲存池叫什麼名稱都適用):

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. 確認是否為相同問題:

cat /proc/driver/nvidia/version     # 應顯示 580.159.04
sudo grep -E '(root|ldcache) *=' "$CS/etc/nvidia-container-runtime/config.toml"
grep -c 575.64.05 "$C"              # 大於 0 代表快取已過時

設定檔中應顯示 root = "/",而 ldcache 設定應指向同一個 ld.so.cache。如果核心模組的版本不是 580.159.04,代表你遇到的是不同問題,這個方法不會有幫助。

3. 備份並重建快取:

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"   # 應先顯示 0,再顯示大於 0 的數字

-C 會讓 ldconfig 只寫入 Container Station 的快取檔案,而 -X 會防止它變更任何符號連結,因此不會影響系統上的其他項目。

4. 從 Container Station 啟動你的 GPU 容器。 不需要重新啟動 Container Station 本身。我的容器馬上就恢復運作了。

若要還原,請執行 sudo cp "$C.bak" "$C"。未來的驅動程式或 Container Station 更新可能會再次讓快取過時。如果發生這種情況,請重複步驟 3。

感謝 mjellybaby 的 PaddlePaddle 指南,其中提到 GPU 驅動程式更新後快取可能會過時。不過,重新開機並沒有幫我解決問題:Getting GPU-Accelerated PaddlePaddle Working in Docker on QNAP NAS

給 QNAP: 根本原因是更新 GPU 驅動程式套件時,Container Station 的 NVIDIA ld.so.cache 沒有重建。請讓驅動程式或 Container Station 更新時自動重新產生該快取。

太棒了!謝謝你的詳細說明,我會研究看看!:heart::heart::heart:

@Xisko 我們已確認這個問題,並會在之後的 Container Station 版本中修復。

@Pol77 感謝你分享問題的原因和暫時解決方法——這對遇到相同問題的其他使用者非常有幫助。謝謝!