Lokale KI im Handumdrehen installiert

Mit nur zwei Befehlen eine lokale KI starten. Ollama machts möglich.

Lokale KI im Handumdrehen installiert

Ollama glänzt durch seine unkomplizierte Installation, die für alle gängigen Betriebssysteme optimiert ist.

audio-thumbnail
Podcast: Lokale KI im Handumdrehen installiert
0:00
/182.130958

Linux

Unter Linux wird die Installation durch ein einziges Skript erledigt, das alle notwendigen Schritte automatisiert. Es lädt das Ollama-Binary herunter, richtet einen systemd-Service ein und stellt die ollama-CLI systemweit zur Verfügung.

curl -fsSL https://ollama.com/install.sh | sh

Fertig! Nach der Ausführung ist Ollama als Dienst im Hintergrund aktiv und bereit für den ersten Einsatz.

macOS und Windows

Für macOS und Windows werden native Installer bereitgestellt, die den Prozess noch weiter vereinfachen. Auf der offiziellen Ollama-Webseite können die entsprechenden Installationspakete heruntergeladen werden. Die Installation erfolgt dann wie bei jeder anderen Anwendung durch einen Klick-basierten Assistenten. Unter Windows wird Ollama als unauffälliges Icon in der Taskleiste angezeigt, um seinen Status zu signalisieren.

Die universelle Methode: Docker

Für Liebhaber der Containerisierung oder für Systeme, auf denen eine native Installation nicht gewünscht ist, bietet sich der Betrieb via Docker an. Dies ist die flexibelste Methode und sorgt für eine saubere Trennung vom Host-System.

Der folgende Befehl startet den offiziellen Ollama-Container, stellt den API-Port 11434 bereit und bindet ein lokales Volume ein, um heruntergeladene Modelle persistent zu speichern.

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Eine kurze Erklärung der verwendeten Parameter:

  • -d: Startet den Container im “detached mode” (im Hintergrund).
  • --gpus=all: Ermöglicht dem Container den Zugriff auf alle verfügbaren GPUs des Host-Systems (NVIDIA). Dies ist für eine performante Ausführung essenziell.
  • -v ollama:/root/.ollama: Erstellt ein benanntes Docker-Volume ollama und mappt es in das Verzeichnis, in dem Ollama seine Modelle ablegt. So überleben die (oft mehrere Gigabyte großen) Modelle einen Neustart des Containers.
  • -p 11434:11434: Leitet den Port 11434 vom Host an den Container weiter, um die API von außen erreichbar zu machen.
  • --name ollama: Verleiht dem Container einen leicht zu merkenden Namen.
  • ollama/ollama: Der Name des offiziellen Docker-Images.

Der erste Start: Plaudern mit Llama 3.2

Nach der erfolgreichen Installation ist es Zeit, das erste Modell auszuführen. Als Beispiel dient hier das flinke llama3.2-Modell, das selbst ohne GPU erstaunliche Ergebnisse liefert. Der Befehl ist denkbar einfach:

ollama run llama3.2

Beim ersten Aufruf passiert Folgendes im Hintergrund:

  1. Ollama prüft, ob das llama3.2-Modell bereits lokal vorhanden ist.
  2. Da dies nicht der Fall ist, wird das Modell automatisch aus der Ollama-Bibliothek heruntergeladen. Dies kann je nach Internetverbindung und Modellgröße (für llama3.2:latest ca. 2 GB) einen Moment dauern – eine gute Gelegenheit für eine Tasse Kaffee.
  3. Sobald der Download abgeschlossen ist, wird das Modell geladen und eine interaktive Chat-Sitzung gestartet.

Die Konsolenausgabe sieht dann etwa so aus:

$ ollama run llama3.2
pulling manifest
pulling 00e1317cbf74... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 2.0 GB
pulling 4fa551d4f938... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏ 7.8 KB
pulling 8ab48472fa6e... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏   86 B
pulling 8925af0b33f3... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏  110 B
pulling 250bb7739487... 100% ▕█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▏  486 B
verifying sha256 digest
writing manifest
removing any unused layers
success
>>> Send a message (/? for help)

Ab jetzt kann man direkt mit dem Modell chatten.

>>> Was ist das letzte Ereignis, das in deinen Trainingsdaten enthalten ist?
Das ist eine knifflige Frage! Meine Trainingsdaten wurden zu einem bestimmten Zeitpunkt "eingefroren".  Ich bin mit einer riesigen Menge an Text und Code trainiert 
worden, aber mein Wissensstand wurde nicht kontinuierlich aktualisiert.

Das letzte Ereignis, das mit Sicherheit in meinen Trainingsdaten enthalten ist, ist **Anfang 2023**. Das bedeutet, dass ich keine Informationen über Ereignisse nach 
diesem Zeitpunkt habe. 


>>> Erstelle ein kleines Spiel in Python.
```python
import random

def zahlenraten():
  """Ein einfaches Zahlenraten-Spiel."""

  zufallszahl = random.randint(1, 100)
  versuche = 0
  geraten = False

  print("Willkommen beim Zahlenraten-Spiel!")
  print("Ich habe mir eine Zahl zwischen 1 und 100 ausgedacht.")

  while not geraten:
    versuche += 1
    try:
      tipp = int(input("Dein Tipp: "))
    except ValueError:
      print("Ungültige Eingabe. Bitte gib eine Zahl ein.")
      continue

    if tipp < zufallszahl:
      print("Zu niedrig!")
    elif tipp > zufallszahl:
      print("Zu hoch!")
    else:
      print(f"Richtig! Du hast die Zahl {zufallszahl} in {versuche} Versuchen erraten!")
      geraten = True

if __name__ == "__main__":
  zahlenraten()
```

Ein Blick unter die Haube: Mehr als nur run

Ollama bietet weitere nützliche Befehle zur Verwaltung der Modelle:

  • ollama list: Zeigt alle lokal heruntergeladenen Modelle an.
  • ollama pull <modellname>: Lädt ein Modell herunter, ohne es direkt zu starten.
  • ollama rm <modellname>: Löscht ein heruntergeladenes Modell, um Speicherplatz freizugeben.

Darüber hinaus startet Ollama einen REST-API-Endpunkt auf http://localhost:11434, der es ermöglicht, programmatisch mit den Modellen zu interagieren. Dies eröffnet unzählige Möglichkeiten für die Integration in eigene Skripte, Anwendungen oder Automatisierungsworkflows. Aber das werde ich in späteren Artikeln vorstellen. Bis dahin kann man mit weiteren Modellen experimentieren. Eine Liste befindet sich hier.

Fazit

Zwei Befehle in die Konsole zu tippen scheint ein einfacher Start zu sein. Ollama beseitigt so eindrucksvoll die technischen Hürden, die bisher mit dem lokalen Betrieb von LLMs verbunden waren. Mit diesem Werkzeug kann man auf Cloud-Dienste verzichten und muss keine persönlichen Informationen an Big-Tech-Unternehmen verlieren, wenn man eine KI wie ChatGPT nutzen will.