Aller au contenu

Ollama

Serveur d'inférence LLM local pour l'exploration de données assistée par IA.

URL https://ollama.akko.local
Sous-chart Helm akko-ollama (personnalisé)

Aperçu

Ollama exécute des LLM à poids ouverts localement sur votre infrastructure. Aucune clé API, aucune donnée ne quitte votre réseau. Combiné avec LiteLLM (passerelle IA unifiée), jupyter-ai dans les notebooks, et pgvector dans PostgreSQL, il permet des workflows IA entièrement privés incluant des pipelines RAG (Retrieval-Augmented Generation).


Modèles

AKKO est livré avec trois modèles pré-téléchargés :

Modèle Taille Fonction
qwen2.5-coder:7b 4,7 Go Génération de code et assistance technique
qwen2.5:3b 2,0 Go Chat général et génération de texte
nomic-embed-text 274 Mo Embeddings textuels (768 dimensions) pour les pipelines RAG

Le sidecar ollama-init télécharge ces modèles au premier démarrage. Cela peut prendre plusieurs minutes selon votre connexion internet.


Architecture

  JupyterHub (jupyter-ai)
        |
  LiteLLM (:4000)  ──→  Ollama (:11434)
  (API compatible          (inférence de modèle)
   OpenAI)
        |
  PostgreSQL (pgvector)
  (stockage d'embeddings)
  • Ollama gère le chargement des modèles et l'inférence
  • LiteLLM fournit une couche API compatible OpenAI, routant les requêtes vers le modèle Ollama approprié
  • jupyter-ai dans les notebooks se connecte à LiteLLM pour le codage assisté par IA
  • pgvector dans PostgreSQL stocke les embeddings pour les pipelines RAG

Utiliser Ollama depuis les notebooks

Accès API direct

import requests

response = requests.post(
    "http://akko-akko-ollama:11434/api/generate",
    json={
        "model": "qwen2.5:3b",
        "prompt": "Expliquez Apache Iceberg en un paragraphe.",
        "stream": False,
    },
)
print(response.json()["response"])

Via LiteLLM (compatible OpenAI)

from openai import OpenAI

client = OpenAI(
    base_url="http://akko-akko-litellm:4000/v1",
    api_key="akko-dev-litellm-key",
)

response = client.chat.completions.create(
    model="ollama/qwen2.5:3b",
    messages=[{"role": "user", "content": "Qu'est-ce qu'un lakehouse ?"}],
)
print(response.choices[0].message.content)

Via jupyter-ai

La commande magique %%ai dans JupyterLab se connecte à LiteLLM :

%%ai ollama:qwen2.5:3b
Expliquez la différence entre Spark et Trino.

Embeddings pour RAG

import requests

response = requests.post(
    "http://akko-akko-ollama:11434/api/embed",
    json={
        "model": "nomic-embed-text",
        "input": "Apache Iceberg est un format de table ouvert pour les jeux de données analytiques.",
    },
)
embedding = response.json()["embeddings"][0]
# Stocker dans PostgreSQL avec pgvector

Vérification de santé

L'image conteneur Ollama ne contient ni curl ni wget. Le healthcheck utilise une sonde TCP :

healthcheck:
  test: ["CMD", "bash", "-c", "exec 3<>/dev/tcp/localhost/11434"]

Note

Utilisez CMD (pas CMD-SHELL) car le /bin/sh de l'image Ollama ne supporte pas /dev/tcp.


Exigences en ressources

Modèle RAM minimum Recommandé
nomic-embed-text 1 Go 2 Go
qwen2.5:3b 4 Go 6 Go
qwen2.5-coder:7b 8 Go 10 Go

Mémoire Docker Desktop

Le chargement de qwen2.5-coder:7b nécessite au moins 10 Go de RAM disponible dans Docker Desktop. Si Ollama plante ou redémarre, augmentez l'allocation mémoire.


Problèmes connus

Pas d'appel d'outils avec les petits modèles

Les petits modèles comme TinyLlama ne supportent pas MCP/l'appel d'outils. Utilisez qwen2.5-coder:7b ou qwen2.5:3b pour les capacités d'appel de fonctions.

Le téléchargement des modèles prend du temps

Le modèle qwen2.5-coder:7b fait 4,7 Go. Le sidecar ollama-init peut mettre plus de 5 minutes à le télécharger au premier démarrage. N'interrompez pas le processus.

Accélération GPU

Ollama supporte l'accélération GPU via NVIDIA CUDA. Sur macOS avec Apple Silicon, l'accélération Metal est utilisée automatiquement. Sur Linux, passez --gpus all dans la configuration Docker pour activer CUDA.