Ollama 無法在 QNAP 的 Docker 中使用 GPU(RTX 3090,CUDA 初始化失敗)

我最近看到這篇文章:Getting GPU-Accelerated PaddlePaddle Working in Docker on QNAP NAS

我按步驟調整了一些細節,目前 NAS 運作超過 36 小時,一直都很正常,已經過了 CUDA 常出錯的關鍵時段。還需要多觀察一段時間才能確定這是不是穩定的解決方案,但我會在這裡分享我的操作過程。


免責聲明:這個方法會修改 QNAP 套件檔案,操作風險請自行承擔。

注意:只是在 SSH 執行指令沒有效果。必須是在開機、核心驅動程序初始化時執行這些指令。

1. 查找你的 Nvidia GPU 驅動安裝路徑。

執行 echo "$(/sbin/getcfg NVIDIA_GPU_DRV Install_Path -f /etc/config/qpkg.conf)"。這會顯示你的 Nvidia GPU 驅動的安裝位置。

我的情況是:/share/ZFS530_DATA/.qpkg/NVIDIA_GPU_DRV。把這個路徑記下來,後面會用到。

2. 修改核心驅動啟動腳本。

核心驅動啟動腳本的位置是:/share/ZFS1_DATA/.qpkg.local/NvKernelDriver/qpkg_NvKernelDriver.sh

檔案內容如下:

#!/bin/sh
QPKG_CONF=/etc/config.local/qpkg.conf
QPKG_NAME="NvKernelDriver"
QPKG_ROOT=`/sbin/getcfg ${QPKG_NAME} Install_Path -f ${QPKG_CONF}`
QPKG_INSTALL_BUILDNUMBER=`cat ${QPKG_ROOT}/QPKG_INFO | grep "Nas_BuildNumber" | cut -d " " -f 3`
CONF_DIR="/etc/default_config"
SYS_ULINUX_CONF="${CONF_DIR}/uLinux.conf"
BUILD_NUMBER=`cat ${SYS_ULINUX_CONF} | grep "Build Number" | cut -d " " -f 4`
MODEL_NAME=`/sbin/getcfg -f   ${SYS_ULINUX_CONF}  "System" "Model"`
IDS_FILE="${QPKG_ROOT}/nvda_legacy.ids"

case "$1" in
	stop)
	;;
	start)

# more lines ...

就在 case "$1" in 這行的上面,新增以下內容:

mount -o remount,size=800M /
sleep 2

# 根據第 1 步查到的路徑調整這行。
/share/ZFS530_DATA/.qpkg/NVIDIA_GPU_DRV/NVIDIA_GPU_DRV.sh start

注意檔案權限和擁有者設定。

3. 重啟.

重啟你的 NAS。