Depuis le lancement de ChatGPT par OpenAI, le milieu de l’intelligence artificielle générative fait parler de lui au quotidien. Dans cet article, nous allons étudier le fonctionnement de Ollama et comment ces initiatives open source révolutionnent l’usage et l’ouverture des modèles d’IA générative au plus grand nombre.
Envisager l’inférence LLM sur des machines standards
Début 2023, une multitude de modèles en marge du bien connu ChatGPT a émergé, toutefois déployer un modèle tel que GPT-4 nécessite près de 512 GB de RAM et 16 TB de SSD. Il paraît inconcevable de faire tourner des modèles sur des machines adaptées au développement qui disposent bien souvent de seulement 32 GB de RAM et 1TB de SSD.
C’est pourquoi de nouveaux modèles plus légers ont fait leur apparition avec d’abord la solution de Meta (maison mère de Facebook) avec Llama 1 et 2, puis Mistral (société française) qui s’est fait connaître pour ses modèles 10 à 20 fois plus léger et offrant des performances équivalentes à GPT 3.5. L’arrivée de ces modèles « nouvelle génération » a ainsi rendu possible l’exécution de modèles d’intelligence artificielle générative sur les machines que nous utilisons au quotidien.
L’initiative open-source llama.cpp
llama.cpp est un Framework open source d’inférence de modèle permettant l’intégration des « Large Language Model » (LLM) en local ou dans le cloud. L’inférence, dans le contexte de l’apprentissage automatisé, fait référence à la capacité d’un modèle à générer des prédictions ou des réponses basées sur les données d’entrée qu’il reçoit.
À l’initiative de Georgi Gerganov, llama.cpp a rapidement acquis de la popularité sur GitHub, avec plus de 600 contributeurs, 50k+ stars et plus de 1600 releases en tout juste 1 an (le premier commit date du 10 mars 2023). À l’origine, développé pour permettre l’inférence de Llama, le modèle développé par Meta couvre aujourd’hui la majorité des modèles disponibles dans le domaine, incluant également les modèles dans le cloud tels que ChatGPT ou la version Cloud de MistralAI.
llama.cpp est développé dans l’objectif d’être compatible avec un maximum de machines. C’est par son design CPU-first que llama.cpp réduit la puissance nécessaire aux inférences, il n’est plus nécessaire de posséder les cartes Nvidia dernière génération. Pour autant, llama.cpp tire également partie de l’accélération GPU, en effet le Framework intègre une optimisation cuda coté Nvidia, et sa contrepartie Metal coté Apple, pour tirer le meilleur parti des processeurs Silicon, et on retrouve également une intégration de Vulkan l’accélérateur de cartes AMD. Par conséquent, llama.cpp sera optimisé pour l’intégralité des configurations de machines actuelles sur le marché.
Llama.cpp a pour deuxième point fort l’optimisation des pipelines d’exécution. C’est à ce jour le Framework qui utilise le moins de ressources dans l’exécution des inférences de modèles. Il se place comme un incontournable lorsqu’il s’agit des modèles LLM, étant donné l’optimisation des pipelines d’inférence.
Ollama la couche d’abstraction front-end
Ollama est une application client-serveur développée en Go, conçue autour de llama.cpp. Cette application open-source vise à simplifier l’acquisition et l’exécution de modèles LLM sur une machine en local, elle offre la simplicité d’adapter automatiquement le prompt au format attendu par chaque modèle, puis charge à la demande les modèles correspondants.
Ollama expose une API REST permettant d’exécuter et interagir avec les modèles LLM intégrés par llama.cpp. L’un des principaux avantages de Ollama c’est qu’il s’exécute en tache de fond et charge à la demande des modèles par des commandes très simples. Il est intégré sur Mac OS, Linux et depuis peu supporté sous Windows dans une version preview. Dans la lignée de llama.cpp, Ollama vise à briser les barrières de complexités et offre de multiples solutions d’intégration. Elle est par exemple officiellement intégrée depuis octobre 2023 dans une image Docker pouvant tourner sur Mac OS et Linux.
Les avantages de l’exécution locale des modèles LLM sont bien sûr la maitrise des coûts, mais aussi la maitrise des données privées qui ne transitent pas par des serveurs tiers.
La force de Ollama c’est sa simplicité d’utilisation, il est possible de télécharger un modèle avec une simple commande ‘ollama pull mistral’, puis de le lancer avec la commande ‘ollama run mistral’. Une API REST est alors disponible grâce à laquelle il sera possible d’interagir avec le modèle. Ollama intègre et adapte à l’heure actuelle plus de 60 modèles dont les principaux Llama 2, Mistral, Mixtral et Gemma pour ne citer qu’eux.
Ollama grâce à sa capitalisation sur llama.cpp permet aussi l’optimisation des ressources, en effet, pour faire tourner des modèles 7B il ne nécessitera que 8 GB de RAM, 16 GB pour les modèles 13B et 32 GB de RAM pour les modèles à 33B.
Pour aller plus loin :
- Ollama apporte de la configuration avec son Modelfile
- Ollama intégration dans Langchain
- GGML le moteur de llama.cpp
Ollama a été présenté lors du dernier meetup à Station-F. Vous trouverez le retour de Jonathan à cet événement ici
Auteur : Jonathan