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 :
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 :
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.