LLaMACpp Multi-Instance Setup
Guida per configurare e scalare il numero di istanze di llama-server con load balancing nginx.
Struttura Attuale
- 4 istanze di llama-server (porte 9000-9003)
- Nginx come load balancer (porta 8090)
- Supervisor per gestire tutti i processi
Aggiungere Istanze
Se vuoi aumentare il numero di istanze, segui questi step:
1. Modifica il Containerfile
File: llamacpp-multi.Containerfile
Cambia:
ENV LLAMA_INSTANCES=4
Con il numero di istanze desiderato (es. 6):
ENV LLAMA_INSTANCES=6
2. Aggiorna la Configurazione Nginx
File: llama-upstream.conf
Aggiungi i server nei porti nuovi nel blocco upstream llama_backend:
upstream llama_backend {
least_conn;
server 127.0.0.1:9000 max_fails=3 fail_timeout=30s;
server 127.0.0.1:9001 max_fails=3 fail_timeout=30s;
server 127.0.0.1:9002 max_fails=3 fail_timeout=30s;
server 127.0.0.1:9003 max_fails=3 fail_timeout=30s;
server 127.0.0.1:9004 max_fails=3 fail_timeout=30s; # NUOVO
server 127.0.0.1:9005 max_fails=3 fail_timeout=30s; # NUOVO
}
3. Aggiorna il Containerfile con le porte esposte
File: llamacpp-multi.Containerfile
Aggiungi le nuove porte:
EXPOSE 8090 9000 9001 9002 9003 9004 9005
4. Ricompila il Container
cd /home/badstorm/Source/bdi/bdi_podman_serverconf/Services/llamacpp-multi
podman build -t llamacpp:vulkan-multi-amd64 -f llamacpp-multi.Containerfile .
5. Riavvia il Servizio
systemctl restart llamacpp-multi
Considerazioni di Risorse
Ogni istanza consuma:
- ~8GB VRAM (dipende dal modello e da
LLAMA_ARG_CTX_SIZE) - ~1-2 CPU core (dipende dal carico)
Con GPU AMD Radeon (RENOIR):
- 2 istanze: ✅ Stabile
- 4 istanze: ⚠️ Funziona ma monitorare memoria
- 6+ istanze: ❌ Probabilmente fuori di VRAM
Monitora con:
podman stats llamacpp-multi
Variabili di Ambiente Modificabili
Nel file .container puoi sovrascrivere:
Environment=LLAMA_ARG_PARALLEL=32
Environment=LLAMA_ARG_THREADS=16
Environment=LLAMA_ARG_BATCH_SIZE=2048
Environment=LLAMA_ARG_CTX_SIZE=131072
Environment=LLAMA_ARG_HF_REPO=unsloth/Qwen3-Coder-Next-GGUF:Q2_K_XL
Environment=LLAMA_READY_TIMEOUT=600
Testing
Una volta avviate le istanze, testa:
curl http://localhost:8090/v1/models
Dovresti vedere il modello listato se tutte le istanze sono pronte.
Test di carico (concurrent requests):
for i in {1..10}; do
curl -X POST http://localhost:8090/api/completion \
-H "Content-Type: application/json" \
-d '{"prompt": "Once upon a time", "n_predict": 64}' &
done
wait
Troubleshooting
502 Bad Gateway:
podman exec llamacpp-multi tail -f /var/log/llama-server-9000.log
Timeout Ready:
Aumenta LLAMA_READY_TIMEOUT se il modello impiega più di 10 minuti a caricare.
Out of Memory:
Riduci LLAMA_ARG_PARALLEL, LLAMA_ARG_BATCH_SIZE, o LLAMA_ARG_CTX_SIZE.