Ollama kann GPU in Docker auf QNAP nicht nutzen (RTX 3090, CUDA-Initialisierung schlägt fehl)

Hallo zusammen,

ich versuche, Ollama mit GPU-Beschleunigung innerhalb von Docker auf meinem QNAP NAS auszuführen, aber es fällt immer auf die CPU zurück. Ich habe schon einiges an Debugging betrieben und würde mich über jeden Rat oder eine Bestätigung freuen, ob dies eine bekannte Einschränkung ist.


:desktop_computer: Mein Setup

  • QTS: 5.2.9

  • Kernel: 5.10.60-qnap

  • GPU: NVIDIA GeForce RTX 3090

  • NVIDIA-Treiber (QPKG): 575.64.05

  • Treibertyp: NVIDIA Open Kernel Module

  • Docker: Container Station + CLI (--gpus all)


:white_check_mark: Was funktioniert

  • nvidia-smi funktioniert auf dem Host (über Container)

  • nvidia-smi funktioniert innerhalb von Containern

  • /dev/nvidia* Geräte sind vorhanden

  • NVIDIA-Module geladen:

nvidia
nvidia_uvm
nvidia_modeset
nvidia_drm

GPU-Passthrough zu Containern scheint also zu funktionieren.


:cross_mark: Was NICHT funktioniert

Ollama erkennt die GPU nicht und nutzt immer die CPU:

inference compute id=cpu library=cpu
total_vram="0 B"

Obwohl die GPU verfügbar ist.


:microscope: Was ich getestet habe

1. Verschiedene Ollama-Versionen

  • 0.20.6-rc1

  • 0.20.5

  • 0.19.0

    → gleiches Ergebnis (nur CPU)


2. CUDA-Bibliotheken

Innerhalb des Containers sind CUDA-Bibliotheken vorhanden:

/usr/lib/ollama/cuda_v12/libcudart.so.12
/usr/lib/ollama/cuda_v12/libcublas.so.12
/usr/lib/ollama/cuda_v12/libcublasLt.so.12

Anfangs zeigte ldd fehlende Bibliotheken, aber nach Setzen von:

LD_LIBRARY_PATH=/usr/lib/ollama:/usr/lib/ollama/cuda_v12:/usr/lib/x86_64-linux-gnu

→ alle Abhängigkeiten werden korrekt aufgelöst.


3. Scheitert trotzdem

Trotzdem schlägt die CUDA-Initialisierung in Ollama fehl:

ggml_cuda_init: failed to initialize CUDA: initialization error

4. Kernel-Logs (das sieht verdächtig aus)

NVRM: nvCheckOkFailedNoLog: Check failed: Out of memory [NV_ERR_NO_MEMORY]
NVRM: faultbufCtrlCmdMmuFaultBufferRegisterNonReplayBuf_IMPL: Error allocating client shadow fault buffer

:brain: Mein aktueller Stand

Es sieht so aus, als ob:

  • GPU-Passthrough funktioniert (Docker-Seite OK)

  • CUDA-Bibliotheken sind vorhanden

  • aber CUDA-Initialisierung zur Laufzeit fehlschlägt

Da ich das NVIDIA Open Kernel Module verwende, vermute ich:

:backhand_index_pointing_right: es unterstützt in dieser Umgebung möglicherweise keine CUDA-Workloads vollständig

:backhand_index_pointing_right: oder es gibt ein Kompatibilitätsproblem mit dem QNAP-Kernel (5.10.60)


:red_question_mark: Fragen

  1. Hat jemand erfolgreich Ollama (oder eine andere CUDA-intensive App) mit GPU auf QNAP ausgeführt?

  2. Ist das eine bekannte Einschränkung des NVIDIA Open Kernel Module auf QNAP?

  3. Ist es möglich, den proprietären NVIDIA-Treiber statt des Open Modules zu verwenden?

  4. Hat jemand solche NV_ERR_NO_MEMORY-Fehler schon einmal gesehen?


:puzzle_piece: Workaround

Aktuell überlege ich:

  • Ollama auf einer separaten Linux-Maschine (Debian/Ubuntu) laufen zu lassen

  • und QNAP nur für UI/Services zu verwenden

Wenn du eine Docker-Compose-Datei verwendest, füge Folgendes zum Abschnitt „ollama“ hinzu.

    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all 
              capabilities: [gpu]

Hallo, was meinst du mit:

Docker: Container Station + CLI

nvidia-smi funktioniert auf dem Host (über Container)

===

Bitte folge diesen Schritten, um dein Problem zu überprüfen:

  1. Erfasse die GPU-Einstellungen im Kontrollpanel.

  2. Verwende diese YAML-Datei, um eine neue Anwendung in Container Station zu erstellen.

    services:
      ollama:
        image: ollama/ollama:latest
        volumes:
          - ollama:/root/.ollama
        restart: unless-stopped
        environment:
          - OLLAMA_SCHED_SPREAD=1
        ports:
          - 11434:11434
        deploy:
          resources:
            reservations:
              devices:
                - driver: nvidia
                  count: all 
                  capabilities: [gpu] 
    volumes:
      ollama:
    
  3. Öffne ein Terminal in deinem neuen Ollama-Container und gib nvidia-smi ein, um zu überprüfen, ob die NVIDIA-GPU erkannt wird.

Hallo,

vielen Dank. Mit:

„Docker: Container Station + CLI“
meine ich, dass ich beides getestet habe:

  • Container, die über QNAP Container Station erstellt wurden

  • Container, die manuell über die Docker CLI gestartet wurden

Zur Klarstellung:

nvidia-smi existiert nicht als nativer Befehl in der QNAP-Shell,
funktioniert aber korrekt innerhalb von Docker-Containern, die mit GPU-Zugriff gestartet wurden.

Ich werde nun dein vorgeschlagenes minimales Container-Station-Setup testen und prüfen:

  • nvidia-smi innerhalb des Containers

  • ob Ollama beim Start weiterhin nur die CPU erkennt

Mein ursprüngliches Problem ist, dass Ollama oft meldet, dass nur die CPU verwendet wird, selbst wenn die GPU im Container sichtbar ist:

inference compute id=cpu library=cpu
total_vram="0 B"

und manchmal:

ggml_cuda_init: failed to initialize CUDA: initialization error

Ich werde die Ergebnisse deines YAML-Tests berichten.

Wir vermuten derzeit, dass dieses Problem möglicherweise auch durch einen Fehler bei der Speicherzuweisung im Treiber verursacht wird. Wir werden entsprechend ein Update veröffentlichen, das auf den neuen Treiber abzielt. Wir entschuldigen uns für etwaige Unannehmlichkeiten, die dadurch entstanden sein könnten!

Für mich sieht es so aus, dass nach einem Neustart ollama + GPU genutzt werden können. Nach einiger GPU-Leerlaufzeit ist die GPU in ollama jedoch nicht mehr ansprechbar. Interessanterweise wird sie dann in QTS sichtbar und emby (.qpkg, nicht die Container-Version) kann sie verwenden. Und das, obwohl die GPU eigentlich dem Container und NICHT QTS zugewiesen ist.

Wie kann das sein?

Nach mehreren Versuchen kann ich ebenfalls nicht mehr auf die GPU im Container zugreifen, um Ollama mit der GPU zum Laufen zu bringen. Sogar nvidia-smi funktioniert in der Ollama-Konsole. Gleiche Konfiguration wie bei Igorgogi. Aber Ollama kann den verfügbaren VRAM der GPU nicht erkennen und entscheidet sich daher für die Nutzung der CPU. Es wird ein sehr kleines LLM-Modell ausgewählt. Verfügbarer VRAM: 12GB

±----------------------------------------------------------------------------------------+
| NVIDIA-SMI 575.64.05 Driver Version: 575.64.05 CUDA Version: 12.9 |
|-----------------------------------------±-----------------------±---------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA RTX A2000 12GB Off | 00000000:01:00.0 Off | Off |
| 30% 46C P8 13W / 70W | 1MiB / 12282MiB | 0% Default |
| | | N/A |
±----------------------------------------±-----------------------±---------------------+

±----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
±----------------------------------------------------------------------------------------+

Ollama Log:

\033]11;?\033\time=2026-04-18T14:24:46.098Z level=INFO source=routes.go:1752 msg=“server config” env=“map[CUDA_VISIBLE_DEVICES: GGML_VK_VISIBLE_DEVICES: GPU_DEVICE_ORDINAL: HIP_VISIBLE_DEVICES: HSA_OVERRIDE_GFX_VERSION: HTTPS_PROXY: HTTP_PROXY: NO_PROXY: OLLAMA_CONTEXT_LENGTH:0 OLLAMA_DEBUG:INFO OLLAMA_DEBUG_LOG_REQUESTS:false OLLAMA_EDITOR: OLLAMA_FLASH_ATTENTION:false OLLAMA_GPU_OVERHEAD:0 OLLAMA_HOST:xxx OLLAMA_KEEP_ALIVE:5m0s OLLAMA_KV_CACHE_TYPE: OLLAMA_LLM_LIBRARY:cuda OLLAMA_LOAD_TIMEOUT:5m0s OLLAMA_MAX_LOADED_MODELS:0 OLLAMA_MAX_QUEUE:512 OLLAMA_MODELS:/root/.ollama/models OLLAMA_MULTIUSER_CACHE:false OLLAMA_NEW_ENGINE:false OLLAMA_NOHISTORY:false OLLAMA_NOPRUNE:false OLLAMA_NO_CLOUD:false OLLAMA_NUM_PARALLEL:1 OLLAMA_ORIGINS:xxx app://* file://* tauri://* vscode-webview://* vscode-file://*] OLLAMA_REMOTES:[ollama.com] OLLAMA_SCHED_SPREAD:true OLLAMA_VULKAN:false ROCR_VISIBLE_DEVICES: http_proxy: https_proxy: no_proxy:]”

time=2026-04-18T14:24:46.103Z level=INFO source=types.go:60 msg=“inference compute” id=cpu library=cpu compute=“” name=cpu description=cpu libdirs=ollama driver=“” pci_id=“” type=“” total=“31.3 GiB” available=“25.7 GiB”

time=2026-04-18T14:24:46.102Z level=INFO source=routes.go:1810 msg=“Listening on [::]:11434 (version 0.20.7)”

time=2026-04-18T14:24:46.102Z level=INFO source=images.go:506 msg=“total unused blobs removed: 0”

time=2026-04-18T14:24:46.101Z level=INFO source=images.go:499 msg=“total blobs: 25”

time=2026-04-18T14:24:46.103Z level=INFO source=runner.go:67 msg=“discovering available GPUs…”

time=2026-04-18T14:24:46.103Z level=INFO source=routes.go:1860 msg=“vram-based default context” total_vram=“0 B” default_num_ctx=4096