Ce que vous saurez faire
Vous serez capable de déployer Llama 3.3 70B en self-hosting sur une instance GPU A100 (40 ou 80 Go), de mesurer son coût réel d’exploitation au token et de décider, chiffres en main, si l’auto-hébergement est rentable face aux APIs commerciales (Anthropic, OpenAI, Mistral) pour votre PME ou votre cabinet de conseil au Sénégal.
Le scénario type est celui d’un cabinet d’avocats à Dakar qui traite 2 millions de tokens par jour de documents confidentiels (contrats, jugements) et refuse de les envoyer chez un fournisseur tiers. À ce volume, l’arbitrage coût versus souveraineté devient stratégique. Nous calculerons précisément le seuil de bascule en FCFA.
Étape 1 : Choisir le fournisseur GPU
Trois options réalistes depuis le Sénégal : Lambda Labs (1.79 USD/h pour A100 40 Go on-demand), RunPod (1.89 USD/h Community Cloud), ou Vast.ai (1.20 à 1.60 USD/h selon la disponibilité). Pour la production critique, AWS p4d.24xlarge (8x A100) à 32.77 USD/h est l’option entreprise mais 18 fois plus chère.
Pour ce tutoriel, nous prenons une instance Lambda Labs A100 80 Go à 1.99 USD/h, soit environ 1240 FCFA/h. Disposer de 80 Go est confortable : Llama 3.3 70B en FP16 occupe 140 Go, donc impossible sur 40 Go sans quantification.
Étape 2 : Provisionner l’instance et accéder en SSH
Créez un compte Lambda, validez votre carte bancaire (Wave Card fonctionne), générez une paire de clés SSH locale et lancez l’instance. L’image par défaut Ubuntu 22.04 + CUDA 12.1 est prête à l’emploi.
ssh-keygen -t ed25519 -C "llama-self-hosted"
ssh ubuntu@<ip-instance> -i ~/.ssh/id_ed25519
nvidia-smi # vérifier que l'A100 est détectée
Étape 3 : Installer vLLM pour l’inférence
vLLM est aujourd’hui le moteur le plus performant pour servir Llama 3.3 70B. Il implémente PagedAttention et permet un débit jusqu’à 4 fois supérieur à HuggingFace Transformers natif.
python3 -m venv vllm-env
source vllm-env/bin/activate
pip install vllm==0.6.3
pip install huggingface_hub
Étape 4 : Télécharger les poids Llama 3.3 70B
Acceptez les conditions sur huggingface.co/meta-llama/Llama-3.3-70B-Instruct, générez un token HF et téléchargez. Comptez 140 Go en FP16 ou 40 Go en AWQ 4-bit.
huggingface-cli login
huggingface-cli download meta-llama/Llama-3.3-70B-Instruct \
--local-dir /mnt/models/llama-3.3-70b
Le téléchargement prend environ 25 minutes sur l’instance Lambda (réseau 10 Gbps). Stockez les poids sur le disque attaché payant si vous comptez arrêter et redémarrer l’instance, sinon vous repayez 25 minutes de GPU à chaque relance.
Étape 5 : Lancer le serveur vLLM
Démarrez le serveur compatible OpenAI. Ajustez –gpu-memory-utilization à 0.92 pour laisser un buffer.
python -m vllm.entrypoints.openai.api_server \
--model /mnt/models/llama-3.3-70b \
--tensor-parallel-size 1 \
--max-model-len 16384 \
--gpu-memory-utilization 0.92 \
--port 8000
Au démarrage, vLLM compile les kernels CUDA, ce qui prend 3 à 5 minutes. Le serveur expose ensuite /v1/chat/completions au format OpenAI.
Étape 6 : Tester l’inférence et mesurer le débit
Envoyez une requête de référence pour mesurer les tokens par seconde.
import openai, time
client = openai.OpenAI(base_url="http://localhost:8000/v1",
api_key="dummy")
debut = time.time()
r = client.chat.completions.create(
model="/mnt/models/llama-3.3-70b",
messages=[{"role":"user","content":"Explique la TVA sénégalaise"}],
max_tokens=500)
duree = time.time() - debut
toks = r.usage.completion_tokens
print(f"{toks/duree:.1f} tok/s")
Sur A100 80 Go, comptez 28 à 35 tokens/s pour une requête isolée. En batch (10 requêtes parallèles), le débit cumulé monte à 250-320 tok/s.
Étape 7 : Quantifier en AWQ 4-bit pour réduire la VRAM
Si votre charge tient dans 40 Go, utilisez la version AWQ pour économiser sur le GPU. La perte de qualité est inférieure à 1 point sur MMLU.
huggingface-cli download casperhansen/llama-3.3-70b-instruct-awq
python -m vllm.entrypoints.openai.api_server \
--model casperhansen/llama-3.3-70b-instruct-awq \
--quantization awq \
--max-model-len 8192
Cela permet de passer à un A100 40 Go à 1.29 USD/h, soit 800 FCFA/h.
Étape 8 : Mesurer la consommation réelle sur 24 heures
Lancez un test de charge représentatif de votre trafic. Pour un cabinet d’avocats, simulez 80 requêtes/h en moyenne avec des prompts de 2000 tokens et des réponses de 800 tokens.
locust -f load_test.py --headless -u 4 -r 1 -t 24h \
--host http://localhost:8000
Sur 24 heures à 80 req/h, vous consommez 24 h * 1.99 USD = 47.8 USD soit 29 800 FCFA pour traiter environ 5.4 millions de tokens (entrée + sortie).
Étape 9 : Calculer le coût par million de tokens
Coût A100 80 Go : 47.8 USD / 24 h. Volume traité à charge nominale : 5.4 M tokens/jour. Coût par million : 47.8 / 5.4 = 8.85 USD/M tokens, soit environ 5500 FCFA/M tokens.
Comparaison avec les APIs : Claude Haiku 4 (0.80 USD input / 4.00 USD output), Llama 3.3 70B chez Together.ai (0.88 USD input / 0.88 USD output). À ce niveau, Together.ai est moins cher que le self-hosting tant que vous restez sous 5.4 M tok/jour.
Étape 10 : Trouver le seuil de rentabilité
Le self-hosting devient rentable quand le GPU est saturé. Sur A100 80 Go, le débit maximal en production stable est d’environ 18 M tokens/jour (sortie). Au seuil de saturation, le coût tombe à 47.8 / 18 = 2.65 USD/M tokens, soit 1650 FCFA/M tokens.
seuil_quotidien = 9_000_000 # tokens/jour
cout_api_at_seuil = 9 * 0.88 # 7.92 USD via Together
cout_self_host = 47.8 # USD/jour
# Self-host gagne au-dessus de 6 M tokens/jour
Étape 11 : Réserver l’instance pour réduire le tarif
Un engagement annuel chez Lambda Reserved fait passer l’A100 80 Go à 1.10 USD/h, soit une économie de 45 %. Le seuil de rentabilité tombe alors à 4 M tokens/jour.
Pour une PME, le calcul devient : 1.10 USD/h * 24 h * 30 j = 792 USD/mois soit 495 000 FCFA/mois pour une capacité d’environ 540 M tokens/mois.
Étape 12 : Mettre en place le monitoring
Installez Prometheus et Grafana pour suivre la VRAM, l’utilisation GPU et la latence p95. vLLM expose des métriques sur /metrics.
pip install prometheus-client
# Dans prometheus.yml
scrape_configs:
- job_name: vllm
static_configs:
- targets: ['localhost:8000']
Étape 13 : Sécuriser l’accès au serveur
Ne jamais exposer le port 8000 sur Internet sans authentification. Placez Caddy ou Nginx en reverse proxy avec une clé API custom et un certificat Let’s Encrypt.
# Caddyfile
api.cabinet-dakar.sn {
@authorized header X-API-Key "votre-cle-secrete-32-chars"
handle @authorized {
reverse_proxy localhost:8000
}
respond 401
}
Étape 14 : Calculer le ROI sur 12 mois
Pour le cabinet d’avocats type traitant 60 M tokens/mois : option API Together coûte 60 * 0.88 = 52.8 USD/mois soit 33 000 FCFA/mois. Option self-host A100 80 Go reserved coûte 495 000 FCFA/mois.
Le self-host est 15 fois plus cher à ce volume mais offre la souveraineté totale (pas de fuite vers les USA), un ARN compliance possible, et un débit garanti. Pour un cabinet manipulant des données sensibles, ce surcoût est souvent justifié. Au-delà de 200 M tokens/mois, le self-host devient également moins cher en valeur absolue.
Erreurs
Erreur 1 : déployer Llama 3.3 70B en FP16 sur A100 40 Go. La VRAM est insuffisante (140 Go requis). Symptôme : OOM au chargement. Utilisez la quantification AWQ ou prenez l’A100 80 Go.
Erreur 2 : laisser tourner l’instance la nuit alors que le trafic est nul. Une PME sénégalaise n’a souvent du trafic que de 8h à 19h. Économisez 50 % en arrêtant l’instance hors heures ouvrées.
Erreur 3 : sous-dimensionner –max-model-len. À 4096 tokens, vous limitez les contrats juridiques de 30 pages. Mettez 16384 si la VRAM le permet.
Erreur 4 : oublier le stockage persistant. Sans disque attaché payant (10 USD/mois), vous re-téléchargez 140 Go à chaque relance.
Erreur 5 : ne pas batcher les requêtes. vLLM gère le batching dynamique mais seulement si vous envoyez plusieurs requêtes simultanées. Sinon, le débit chute à 30 tok/s.
Checklist
1. Volume mensuel de tokens estimé (input + output).
2. Comparaison faite avec au moins une API commerciale.
3. Choix entre A100 40 Go (AWQ) ou 80 Go (FP16) tranché.
4. Fournisseur GPU sélectionné (Lambda, RunPod, Vast).
5. Engagement reserved étudié si volume supérieur à 5 M tok/jour.
6. Téléchargement des poids stocké sur disque persistant.
7. vLLM configuré avec –gpu-memory-utilization 0.92.
8. Test de charge sur 24h validé.
9. Monitoring Prometheus + Grafana en place.
10. Reverse proxy Caddy avec clé API custom.
11. Certificat HTTPS Let’s Encrypt actif.
12. Plan de sauvegarde des poids et configurations.
13. Procédure d’arrêt/redémarrage documentée.
14. ROI calculé en FCFA sur 12 mois et validé en comité.