Come abbiamo già accennato nel predecente articolo, i backend di Ollama si riferiscono ai componenti server-side che gestiscono il funzionamento dell’ecosistema Ollama, specializzato nell’esecuzione, gestione e distribuzione di modelli di linguaggio (LLM) localmente o su server. Vediamo ora come funzionano nel dettaglio e come configurarli:
Architettura del Backend di Ollama
Il backend di Ollama è progettato per essere leggero, modulare e adattabile a diverse esigenze. Ecco i componenti principali:
A. Demone (ollama serve
)
- Funzione: Gestisce le richieste API, il caricamento dei modelli e l’ottimizzazione hardware.
- Protocollo: Comunica via REST/gRPC su
localhost:11434
(default). - Esempio di avvio manuale:
ollama serve # Avvia il demone in foreground(Di solito parte automaticamente con ollama run).
B. Gestione dei Modelli
- I modelli sono archiviati in
~/.ollama/models/
(formato GGUF ottimizzato).
C. API Backend
Ollama espone API compatibili con OpenAI, utili per integrazioni:
- Endpoint principali:
POST /api/generate
: Generazione testo (streaming o non-streaming).POST /api/chat
: Chat conversazionale.GET /api/tags
: Lista modelli disponibili.
Esempio di chiamata API con curl
:
curl http://localhost:11434/api/generate -d '{
"model": "llama2",
"prompt": "Spiega come funziona Ollama in 50 parole",
"stream": false
}'
Personalizzazione del Backend
Creare un Modello Personalizzato
Puoi definire un backend custom usando un Modfile (simile a un Dockerfile):
FROM llama2 # Modello base # Parametri aggiuntivi PARAMETER num_ctx 4096 # Aumenta il contesto PARAMETER temperature 0.7 # System prompt predefinito SYSTEM """ Sei un assistente esperto di AI. Rispondi in italiano e sii conciso. """
Per costruire e usare il modello:
ollama create mio-modello -f Modfile ollama run mio-modello
Ottimizzazione Hardware
- GPU (NVIDIA):
OLLAMA_CUDA_DEVICES=0 ollama run llama2 # Forza l'uso della GPU 0
- CPU con BLAS:
Ollama usaggml
con ottimizzazioni per CPU (AVX, Metal su macOS).
Backend Avanzati e Scalabilità
A. Ollama su Docker/Kubernetes
Puoi deployare Ollama come servizio scalabile:
# Dockerfile per Ollama + modello pre-caricato FROM ollama/ollama RUN ollama pull llama2
Per Kubernetes:
Usa un Deployment
con volume persistente per i modelli.
API OpenAI-Compatible
Abilita la compatibilità con l’API OpenAI per usare strumenti come:
langchain
LlamaIndex
- Frontend come
Open WebUI
Configurazione:
ollama serve --api-openai
Esempio con Python:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="fake-key")
response = client.chat.completions.create(
model="llama2",
messages=[{"role": "user", "content": "Ciao!"}]
)
print(response.choices[0].message.content)
Debug e Logging
- Log del backend:
journalctl -u ollama # Se usi systemdOppure avvia in modalità verbose:bashCopyollama serve --verbose
- Monitoraggio risorse:
watch -n 1 "nvidia-smi" # Per GPU htop # Per CPU/RAM
Use Case Avanzati
- Backend per App Enterprise:
- Usa Ollama come servizio interno per RAG (Retrieval-Augmented Generation).
- Fine-Tuning Remoto:
- Collega il backend a strumenti come
unsloth
per l’addestramento.
- Collega il backend a strumenti come
- Load Balancing:
- Distribuisci più istanze Ollama dietro un NGINX per alta disponibilità.
Conclusione
Il backend di Ollama è flessibile e potente, adatto sia per uso locale che in produzione. Con le API, la personalizzazione dei modelli e l’integrazione con ecosistemi come Kubernetes o OpenAI, puoi costruire soluzioni complesse mantenendo la semplicità.