Ollama tidak dapat menggunakan GPU di Docker pada QNAP (RTX 3090, inisialisasi CUDA gagal)

Dukungan sudah tidak merespons tiket saya lagi. Tiket ini sudah dibuka sejak 11.4. Jawaban terakhir dari 12.6.

Tony Yeh
2026-06-12 13:22

hai

Terima kasih atas kesabaran Anda.

Tim pengembangan kami masih secara aktif menangani masalah ini dan mungkin membutuhkan waktu tambahan.

Saya akan terus mengabari Anda segera setelah ada umpan balik atau perkembangan dari tim pengembangan kami.

Terima kasih atas pengertiannya.

Update di sini. Seseorang sebelumnya di thread ini mengatakan bahwa QuTS Hero 6.0 memberikan perbedaan, tetapi upaya pertama saya tidak berhasil (masih default ke CPU). Namun, dengan sedikit bantuan dari Google Gemini, saya akhirnya mendapatkan YAML yang bekerja untuk saya.

Hardware: QNAP TVS-h1688x

QuTS Hero: 6.0.0.3500

GPU: Nvidia RTX 3060 (12 GB VRAM)

Docker: Container Station

Tujuan saya adalah menjalankan Ollama di 1688x saya dengan front end OpenWebUI. Saya meminta Google Gemini untuk menulis YAML yang sesuai yang bisa berjalan di QNAP Container Station dengan mempertimbangkan RTX 3060. Ini adalah percobaan pertama dan ingat, versi ini TIDAK BERHASIL menggunakan GPU.

version: ‘3.8’

services:

ollama:

image: ollama/ollama:latest

container_name: ollama

volumes:

- /share/Container/ollama:/root/.ollama

ports:

- “11434:11434”

deploy:

resources:

reservations:

devices:

- driver: nvidia

count: 1

capabilities: [gpu]

restart: unless-stopped

networks:

- ai-network

open-webui:

image: ghcr.io/open-webui/open-webui:main

container_name: open-webui

ports:

- “3000:8080”

volumes:

- /share/Container/open-webui:/app/backend/data

environment:

- OLLAMA_BASE_URL=http://ollama:11434

depends_on:

- ollama

restart: unless-stopped

networks:

- ai-network

networks:

ai-network:

driver: bridge

Bersambung di balasan berikutnya…

Again, the previous YAML failed to use the GPU. After asking Gemini to rework the issue, it came back with the following YAML that did work with the GPU: (I deleted the OpenWebUI YAML for redundancy since it didn’t change)

version: “3.8”

services:

ollama:

image: ollama/ollama:latest

container_name: ollama

restart: unless-stopped

ports:

- “11434:11434”

volumes:

- /share/Container/ollama:/root/.ollama

environment:

- OLLAMA_HOST=0.0.0.0

- OLLAMA_KEEP_ALIVE=24h

deploy:

resources:

reservations:

devices:

- driver: nvidia

count: all

capabilities: [gpu]

I have no idea if this will solve the issue with QTS 5.9.0, but it may be worth a shot. The big difference are the environment variables (OLLAMA_HOST and OLLAMA_KEEP_ALIVE).

Saya sendiri belum benar-benar mengalami masalah serupa seperti yang disebutkan di thread ini. Mungkin saya saja yang belum menyadarinya karena memang tidak selalu memakai open-web AI/ aplikasi ollama. Saya biarkan tetap berjalan saja dan biasanya model LLM akan dimatikan (unload), lalu saat saya pakai lagi nanti langsung diload kembali.

  • Saya menggunakan kartu Nvidia yang didukung untuk model NAS saya.
  • Saya memakai https://oi.adhome.top/?model=nemotron-3-nano%3A4b untuk LLM-nya. Ini model yang ringan dan berjalan lancar untuk chat.
  • Kadang-kadang saya memang dapat OOM killer, tapi bisa diatasi dengan stop aplikasi lalu start ulang aplikasi. Tidak pernah harus mematikan NAS sepenuhnya.
  • Kartu GPU juga saya pakai bersama dengan aplikasi jellyfin dan immich.

File app compose untuk deploy

#4 CPU | 6144 MB RAM
services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:cuda
    container_name: oi
    stdin_open: true 
    tty: true
    pull_policy: always
    networks:
      - backendApps
    restart: unless-stopped
    stop_grace_period: 30s # beri waktu cukup untuk mematikan berbagai layanan
    volumes:
      - /share/open-webui:/app/backend/data
    ports:
      - 3010:8080
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities:
                - gpu
  ollama:
    volumes:
      - /share/ollama:/root/.ollama
    container_name: ollama
    pull_policy: always
    tty: true
    networks:
      - backendApps
    restart: unless-stopped
    image: docker.io/ollama/ollama:latest
    ports:
      - 11434:11434
    environment:
      - OLLAMA_KEEP_ALIVE=24h
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all 
              capabilities: [gpu]

     
networks:     
  backendApps:
    external: true

Detail perangkat keras/OS

Halo,

Saya rasa perbedaannya berasal dari sini: OLLAMA_KEEP_ALIVE=24h

Sering memuat dan membongkar model tampaknya menyebabkan masalah. Ketika proses pemuatan berlangsung lama, masalahnya justru jarang terjadi. Secara pribadi, saya sedang menguji dengan durasi 5 jam, dan setelah waktu itu, saya masih mengalami masalah pemuatan—terutama karena model melebihi kapasitas RAM GPU, dan alih-alih beralih ke mode hibrida CPU/GPU, justru beralih ke mode CPU saja. Atau, modelnya dibongkar untuk diganti dengan yang lain.

Masalah ini tidak terbatas pada Open WebUI; masalah yang sama juga terjadi di Qsirch dan RAG.

Sepertinya masalah ini sudah disebutkan di postingan lain, tapi driver Nvidia terbaru memperbaiki beberapa isu seperti ini.

Saya memang mencoba model yang lebih besar yang melebihi 12GB VRAM di kartu saya. Kinerjanya memang melambat, tapi Resource Manager menunjukkan bahwa kartu grafis digunakan sekitar 80% untuk VRAM dan GPU, dibandingkan angka yang lebih kecil saat menggunakan model yang lebih kecil. Tetap saja, prosesnya jauh lebih cepat dibanding saat pertama kali saya mencobanya dan secara default hanya menggunakan CPU saja (yang di Xeon generasi ke-10 sangat lambat).

Saya baru-baru ini melihat posting ini: Getting GPU-Accelerated PaddlePaddle Working in Docker on QNAP NAS

Saya menerapkan versi modifikasi dari langkah-langkah tersebut dan NAS saya baik-baik saja selama lebih dari 36 jam, yang berarti sudah melewati titik kritis di mana CUDA biasanya gagal. Butuh waktu lebih lama untuk memastikan apakah ini solusi yang stabil, tapi saya akan membagikan yang saya lakukan di sini.


Disclaimer: Ini memodifikasi file paket QNAP. Lakukan dengan risiko Anda sendiri.

Catatan: Menjalankan perintah langsung dari SSH tidak akan berhasil. Perintah harus dijalankan saat boot, selama inisialisasi driver kernel.

1. Cari tahu di mana driver Nvidia GPU Anda terpasang.

Jalankan echo "$(/sbin/getcfg NVIDIA_GPU_DRV Install_Path -f /etc/config/qpkg.conf)". Perintah ini akan menampilkan lokasi driver Nvidia GPU Anda.

Pada kasus saya, lokasinya adalah /share/ZFS530_DATA/.qpkg/NVIDIA_GPU_DRV. Ingat lokasi ini untuk langkah berikutnya.

2. Modifikasi skrip startup driver kernel.

Berikut lokasi file skrip startup driver kernel: /share/ZFS1_DATA/.qpkg.local/NvKernelDriver/qpkg_NvKernelDriver.sh

Isi file seperti berikut:

#!/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)

# baris lainnya ...

Tepat di atas baris case "$1" in, tambahkan baris berikut.

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

# Sesuaikan path ini sesuai hasil langkah 1.
/share/ZFS530_DATA/.qpkg/NVIDIA_GPU_DRV/NVIDIA_GPU_DRV.sh start

Perhatikan kepemilikan file dan izin akses file.

3. Reboot.

Restart NAS Anda.