Ollama
Ollama ist ein Open-Source Framework, entwickelt um die Nutzung und Bereitstellung von Large Language Models (LLMs) in einer lokalen Umgebung zu ermöglichen. Es zielt darauf ab, die Komplexität beim Ausführen und Verwalten dieser Modelle zu reduzieren, und bietet eine nahtlose Erfahrung für Nutzer auf verschiedensten Betriebssystemen.
Einrichtung
Ollama kann auf zwei Wege in deine Systemkonfiguration integriert werden.
Als eigenständiges Paket:
environment.systemPackages = [ pkgs.ollama ];
Oder als systemd-Dienst:
services.ollama = {
enable = true;
# Optional: Modelle vorladen, siehe https://ollama.com/library
loadModels = [ "llama3.2:3b" "deepseek-r1:1.5b"];
};
Konfiguration für GPU-Beschleunigung
Die GPU-Beschleunigung wird mit der Auswahl eines zugehörigen Paketes konfiguriert:
- ollama-cpu: GPU deaktiviert, nur CPU wird genutzt
- ollama-rocm: unterstützt die meisten modernen AMD-GPUs
- ollama-cuda: unterstützt die meisten modernen NVIDIA-GPUs
- ollama-vulkan: unterstützt die meisten modernen GPUs unter Linux
Hinweis: Bei der Verwendung des ollama-cuda Paketes, solltest du in Betracht ziehen, den CUDA Substitute Binary Cache hinzuzufügen, da das Kompilieren von CUDA aus dem Quellcode sehr lange dauern kann. (Siehe den CUDA Wiki Eintrag für weitere Informationen)
Beispiel: GPU-Beschleunigung für NVIDIA-Grafikkarten aktivieren
Als eigenständiges Paket:
environment.systemPackages = [
(pkgs.ollama.override {
acceleration = "cuda";
})
];
Oder als systemd-Dienst:
services.ollama = {
enable = true;
package = pkgs.ollama-cuda;
};
Um herauszufinden, ob ein Modell auf deiner CPU, oder der GPU läuft, kannst du entweder die Logs von
$ ollama serve
abrufen, und nach "looking for compatible GPUs" oder "new model will fit in available VRAM in single GPU, loading" durchsuchen
oder während ein Modell aktiv läuft, und in einem Terminal antwortet, folgenden Befehl in einem separaten Terminal ausführen
$ ollama ps
NAME ID SIZE PROCESSOR UNTIL
gemma3:4b c0494fe00251 4.7 GB 100% GPU 4 minutes from now
In diesem Beispiel siehst du "100% GPU".
Nutzung über die Kommandozeile (CLI)
Modell herunterladen und eine interaktive Prompt starten
Beispiel: Lade ein Mistral Modell herunter, und starte die interaktive Nutzung
$ ollama run mistral
Für weitere Modelle, siehe die Ollama Bibliothek.
Prompt an Ollama senden
Beispiel: Codellama (13B, instruct-Variante) herunterladen, und eine Prompt senden:
$ ollama run codellama:13b-instruct "Schreibe ein erweitertes Python Programm in einer üblichen Struktur. Dieses Programm soll die Nummern 1 bis 10 in die Standardausgabe schreiben.Write an extended Python program with a typical structure."
Nutzungs- und Geschwindigkeitsstatistiken einsehen
Füge die Flag/Option "--verbose" zu deinem Ollama Befehl hinzu, um die Statistiken nach jeder Prompt zu sehen:
$ ollama run codellama:13b-instruct --verbose "Schreibe ein erweitertes Python Programm..."
...
total duration: 50.302071991s
load duration: 50.912267ms
prompt eval count: 49 token(s)
prompt eval duration: 4.654s
prompt eval rate: 10.53 tokens/s <- wie schnell es deinen eingegebenen Prompt verarbeitet hat
eval count: 182 token(s)
eval duration: 45.595s
eval rate: 3.99 tokens/s <- wie schnell es eine Antwort gesendet hat
Nutzung über die Web-API
Andere Programme können die Web-API (standardmäßig unter: http://localhost:11434) nutzen, um Ollama zu nutzen und abzufragen. Dies funktioniert beispielsweise gut in der Intellij Entwicklungsumgebung (IDE), mit den "ProxyAI" und "Ollama Commit Summarizer" Erweiterungen.
Alternativ kannst du auch den "open-webui" Dienst aktivieren, das ein Web-Portal unter http://localhost:8080/ bereitstellt:
services.open-webui.enable = true;
Fehlersuche
AMD Grafikkarte mit Open-Source-Treibern
Verwende das ollama-rocm Nix-Paket:
environment.systemPackages = [ pkgs.ollama-rocm ];
Und stelle sicher, dass der Kernel den amdgpu Treiber lädt:
boot.initrd.kernelModules = [ "amdgpu" ];
In manchen Fällen erlaubt Ollama allerdings die GPU-Beschleunigung nicht, wenn es sich nicht sicher über die Kompatibilität von Grafikkarte (GPU) und Treiber ist.
Allerdings kannst du jedoch versuchen, die GPU-Nutzung zu erzwingen, indem du das LLVM-Target überschreibst. [1]
So findest du die für dich richtige Version für deine Grafikkarte über die Logs für klassische NixOS Konfigurationen und Nix Flakes heraus:
# Klassisch
$ nix-shell -p "rocmPackages.rocminfo" --run "rocminfo" | grep "gfx"
Name: gfx1031
# Flakes
$ nix run nixpkgs#"rocmPackages.rocminfo" -- --run "rocminfo" | grep "gfx"
Name: gfx1031
In diesem Beispiel heißt das richtige LLVM-Target "gfx1031", was Version "10.3.1" entspricht. Du kannst diesen Ollama Wert dann wie folgt für den systemd-Dienst überschreiben:
services.ollama = {
enable = true;
package = pkgs.ollama-rocm;
environmentVariables = {
HCC_AMDGPU_TARGET = "gfx1031"; # war eine Zeit lang nötig, doch scheinbar nun nicht mehr
};
# resultiert in der Umgebungsvariable "HSA_OVERRIDE_GFX_VERSION=10.3.0"
rocmOverrideGfx = "10.3.0";
};
Oder mit einer Umgebungsvariable direkt vor dem Standalone-Aufruf:
HSA_OVERRIDE_GFX_VERSION=10.3.0 ollama serve
Bei weiteren Fehlern kannst du versuchen, ähnliche Werte auszuprobieren, welche du hier finden kannst.