Introduction
En tant que grand utilisateur des LLM (Large Language Models), je trouve que ce sont d'excellents outils pour diverses tâches comme l'analyse de logs, l'aide à la programmation de scripts, etc. Cependant, une question cruciale se pose rapidement : faut-il les auto-héberger ou les utiliser via des services en ligne ? Dans cet article, je partage mon expérience sur ce sujet.
Catégories de LLM
Je classe les LLM en trois catégories principales :
1. Les petits modèles
Ces modèles peuvent tourner localement sur votre machine, lentement sur le CPU ou plus rapidement avec un GPU d'au moins 8 Go de mémoire (NVIDIA, AMD ou Mac). Ils fonctionnent en local, sans connexion internet, ce qui est idéal pour la confidentialité. Cependant, ils sont vite limités et conviennent mieux pour des tâches spécifiques comme le RAG (Retrieval Augmented Generation) ou s'ils ont été fine-tunés dans un domaine précis.
Exemples : LLaMA 3 8b, Mistral 7b, phi3 3b, et tous les modèles en dessous de 10 à 15 milliards de paramètres.
2. Les modèles moyens
Ces modèles peuvent également tourner localement si vous avez un bon GPU avec suffisamment de mémoire (32 Go, voire 16 Go pour certains modèles quantifiés sur 2 bits). Ils sont plus intelligents que les petits modèles, mais moins que les grands. Dans mon expérience, ils suffisent dans 95% des cas pour l'aide au codage et 100% pour la traduction ou la correction de texte.
Exemples : LLaMA 3 70b, Mistral 8x7b (celui que j'utilise au quotidien), Command-R (35b), et tous les modèles jusqu'à 100 milliards de paramètres.
3. Les grands modèles
Pour faire tourner ces modèles localement, il faut beaucoup d'argent. Ce sont généralement des modèles non ouverts ou des modèles ouverts de très grande taille.
Exemples : le futur LLaMA 3 400b, Mistral 8x22b, QWen 110b, Command-R-Plus, DBRX.
Auto-hébergement ou services en ligne
L'auto-hébergement peut se faire de manière complète (frontend et backend) ou hybride (frontend auto-hébergé et inférence sur un endpoint distant). Pour le frontend, j'utilise deux containers Docker chez moi : Chat UI de Hugging Face et Open Webui.
Pour le backend, on peut soit auto-héberger l'inférence avec des outils comme OLLaMa ou LLaMA.cpp, soit utiliser un endpoint externe via une API (OpenAI, Mistral AI, Together AI, Hugging Face, Groq, etc.). Ces endpoints offrent généralement des bibliothèques pour Python ou JavaScript, compatibles avec l'API OpenAI.
Bien que l'inférence sur un endpoint ne soit pas idéale pour la confidentialité, c'est tout de même mieux que rien, car on peut changer d'endpoint pour brouiller les pistes.
Ma configuration
J'ai acheté d'occasion un ordinateur Dell Precision 5820 avec 32 Go de RAM, un CPU Xeon W-2125, une alimentation de 900W et deux cartes NVIDIA Quadro P5000 de 16 Go de RAM chacune, pour un total de 646 CHF.
J'ai installé Ubuntu Server 22.4 avec Docker et les pilotes NVIDIA. Ma machine dispose donc de 32 Go de RAM GPU utilisables pour l'inférence. J'utilise OLLaMa, réparti sur les deux cartes, et Mistral 8x7b quantifié sur 4 bits (2 bits sur une seule carte, mais l'inférence est deux fois plus lente). En inférence, je fais environ 24 tokens/seconde. Le chargement initial du modèle (24 Go) prend un peu de temps. J'ai également essayé LLaMA 3 70b quantifié sur 2 bits, mais c'est très lent (3 tokens/seconde).
Consommation électrique
Au repos, mon infrastructure (1 serveur Proxmox, 1 serveur de sauvegarde Proxmox, 1 Synology DS218+, la machine d'inférence, le routeur, le switch et l'onduleur) consomme environ 260W.
En inférence, la consommation monte à environ 420W, soit une puissance supplémentaire de 200W. Sur 24h, cela représente une consommation de 6,19 kWh, soit un coût de 1,61 CHF/jour.
Pour réduire cette consommation et les coûts, plusieurs options sont possibles :
- Installer des panneaux solaires (trop cher pour moi actuellement, mais je vais brancher un panneau solaire de 600W maximum sur une prise, comme autorisé en Suisse).
- Arrêter la machine d'inférence la nuit.
- Faire l'inférence sur des endpoints (moins idéal pour la confidentialité).
Inférence sur des endpoints
Hugging Face permet de faire de l'inférence sur tous les modèles de moins de 10 Go de RAM et sur quelques gros modèles (LLaMA 3 70b, Mistral 8x22b, etc.). Il est possible de cloner Chat UI qui tourne sur Hugging Face et de le faire tourner dans un espace privé. Attention, cela peut parfois être lent le soir, même avec un abonnement à 9€/mois.
Together AI est une société américaine qui offre un crédit de 25$ à l'ouverture d'un compte. Les prix sont les suivants :
- Mistral 8x7b : 0,60$/million de tokens
- LLaMA 3 70b : 0,90$/million de tokens
- Mistral 8x22b : 1,20$/million de tokens
Mistral AI est une société française qui propose des modèles Mistral, avec un paiement au million de tokens selon le poids du modèle.
Groq permet une inférence très rapide (300 à 500 tokens/seconde pour LLaMA 3 ou Mistral 8x7b). Lors de ma dernière utilisation, c'était gratuit car en phase de bêta.
Les modèles propriétaires comme ChatGPT sont généralement trop chers, bien qu'ils puissent résoudre certains problèmes que mes modèles ne parviennent pas à résoudre (et vice-versa).
Conclusion
En résumé, l'auto-hébergement des LLM offre un meilleur contrôle sur la confidentialité, mais nécessite des investissements en matériel et en consommation électrique. Les services en ligne sont une alternative intéressante, mais avec des compromis en termes de confidentialité et de coûts. Le choix dépendra de vos besoins spécifiques et de votre budget.
Publié initialement ici