Les modèles génératifs locaux

Introduction

Si 2023 a été dominée par les modèles mis à disposition dans le cloud comme chatGPT ou Claude, cette approche pourrait fort bien évoluer cette année. Ceci est dû aux progrès rapides des modèles open-source, qui réduisent progressivement l’ écart avec les modèles propriétaires. Ces modèles open-source rendent possible l’ exécution locale de modèles, ce qui offre de nouvelles perspectives que je vais exposer dans cet article.

J’ ai déjà publié une analyse générale des avantages et inconvénients des modèles open-source ici, ainsi qu’une présentation de la start-up française Mistral (ici). Cet article présente les choses d’ un point de vue plus pratique : quels sont les élements à prendre en compte lors du choix et de l’ installation d’ un modèle local, et comment l’ exploiter ensuite.

1. Identifier et choisir un modèle local

La première question est de déterminer les cas d’ utilisation de modèles génératifs qui sont pertinents pour vous. Vous pourrez alors vous orienter vers un modèle répondant à vos besoins. Pour cela, vous pourrez vous baser sur différents indicateurs de performance qui sont publiés régulièrement pour tous les modèles disponibles.

Vous trouverez ici un tableau de bord reprenant une série représentative d’indicateurs de performance. Ce tableau de bord est remis à jour très régulièrement. Etudions-le un peu plus en détail.

Figure 1 : Le LMSYS Chatbot Arena sur Huggingface

Voyons tout d’ abord comment interpréter les différents indicateurs de performance mentionnés:

  • Arena Elo : Il s’ agit d’ un système de classement comparable aux points Elo utilisé par les joueurs d’ échecs. Un être humain pose une question et la réponse de deux modèles choisis au hasard lui est présentée en retour. L’ humain choisit la meilleure réponse (le gagnant), et les points Elo des deux modèles sont mis à jour en conséquence. Le système compte à ce jour plus de 200.000 affrontements entre modèles…
  • MT-bench : Ce test est basé sur une série de 80 dialogues standardisés couvrant huit domaines (10 questions par domaine) : rédaction, incarnation de rôle, extraction d’ information, raisonnement, mathématiques, programmation, sciences naturelles et sciences humaines. Chaque dialogue consiste en plusieurs questions successives sur le même sujet. Une fois le dialogue terminé, GPT4 évalue la qualité de la réponse et lui attribue un score.
  • MMLU : Cet indicateur utilise un grand nombre de questions à choix multiples choisies parmi 57 catégories couvrant l’ essentiel du savoir humain. L’ avantage d’ un QCM est que l’ évaluation de la réponse est immédiate et sans ambiguité.

Et si la programmation est votre cas d’ utilisation principal, il existe un indicateur spécialisé HumanEval qui évalue l’ aptitude à la programmation à travers 164 tests. Vous pouvez accéder à un tableau de bord pour HumanEval ici :

Figure 2 : Un tableau de bord HumanEval (credit : KLU.ai)

En règle générale, au plus le modèle compte de paramètres, au plus les réponses du modèle seront riches et précises, mais au plus de ressources son exploitation nécessitera. Beaucoup de modèles étant disponibles en plusieurs tailles, c’est un paramètre sur lequel vous pouvez jouer dans une seconde étape si vous vous rendez compte que le modèle est trop imprécis ou trop gourmand en ressources. Il faudra tenir compte de certaines contraintes: la mémoire de votre machine limitera la taille des modèles qui pourront fonctionner dessus, alors que la performance dépendra surtout du ou des processeurs disponibles (CPU ou GPU).

Autre point : certains modèles ont été affinés pour exceller dans un domaine particulier (la création artistique, la programmation, le domaine médical…). Si vous pouvez mettre la main sur un modèle affiné dans le domaine qui vous intéresse, utilisez-le en priorité car il a toutes les changes de présenter une meilleure efficacité relative qu’ un modèle généraliste de même taille. Par exemple, si c’ est la programmation qui vous intéresse, orientez-vers WizardCoder, Magicoder ou CodeLlama

Vous pouvez aussi affiner vous-même un modèle open-source généraliste pour le faire approcher au plus près de votre cas d’ utilisation. C’est une approche plus complexe, dont je parlerai dans un article futur.

Enfin, pensez toujours à vérifier les conditions de licence pour voir si cette dernière est compatible avec l’ utilisation que vous envisagez. Les modèles de langage sont souvent publiés sous des licences open-source modifiées contenant certaines restrictions d’ utilisation…

2. Installer un programme d’ exploitation et télécharger le modèle

L’ heure est maintenant venue d’ installer un moteur d’ exploitation sur votre ordinateur. En voici trois, tous gratuits :

Vous trouverez quelques bonnes vidéos explicatives des mécanismes d’ installation et d’ utilisation de ces programmes dans la partie « Références » ci-dessous. Ces programmes contiennent une fonctionnalité intégrée de recherche et d’ installation des modèles. Le téléchargement manuel du modèle depuis un site comme HuggingFace n’ est donc en général pas nécessaire.

Prenons l’ exemple de Ollama qui est extrêmement facile à utiliser. Une fois l’ application installée sur votre machine, vous pouvez aller voir la liste des modèles disponibles ici :

Figure 3 : Liste des modèles Ollama disponibles)

Il suffit ensuite de demander le lancement d’ un modèle via la commande ollama run *model*. Ollama téléchargera d’ abord le modèle si ce dernier n’ est pas déjà présent localement, puis ouvrira une session de dialogue interactif. Tapez /bye pour arrêter la session interactive.

Quelques autres commandes :

  • Ollama list : fournit la liste des modèles disponibles localement.
  • Ollama pull *model* : installe un modèle sans lancer l’ exécution.
  • Ollama rm *model* : supprime le modèle local.

Difficile de faire plus simple…

3. Exploiter un modèle local

Premier cas d’ utilisation, le plus évident : la conversation avec le modèle. Les applications décrites au point précédent offrent cette fonctionnalité sans besoin d’ installations supplémentaires.

Le second cas d’ utilisation que je voudrais présenter est l’ assistant de programmation intégré dans un environnement de développement (IDE). Je vais prendre comme example un des environnements les plus répandus: Microsoft VSCode.

Il existe des extensions pour VSCode comme Continue et Cody qui fournissent une fonction d’ assistance en interagissant avec un modèle de langage. Pour interagir avec un modèle cloud, il faudra configurer le modèle désiré et la clé d’accès. Pour un modèle local, il suffit de spécifier l’ application (Ollama ou autre) et le modèle à utiliser. C’est tout.

Par exemple, voici Continue utilisant le modèle Mistral7B via Ollama sur mon iMac :

Figure 4 : Intégration de VSCode et Mistral7B via l’ extension Continue

Enfin, troisième cas d’utilisation, l’ accès direct aux modèles locaux via un programme informatique. Ici aussi, c’ est facile : la présence d’ interfaces de programmation sur les applications les rend facilement intégrables dans des processus informatisés internes. Par exemple, Ollama offre un point d’entrée REST accessible sur le port 11434 dont la documentation est accessible ici. Et depuis peu, une librairie ollama-python est disponible ce qui simplifie encore plus les choses.

4. Réflexions

Avec les applications actuelles, l’ utilisation de modèles locaux est devenue très aisée. Les progrès rapides des modèles open-source en font une option très intéressante qui résout un certain nombre de désavantages des modèles propriétaires dans le cloud. Ces modèles n’ atteignent pas encore les performances des meilleurs modèles propriétaires comme GPT-4, mais la disponibilité prochaine de Llama 3 et les progrès rapides de Mistral permettent d’ être optimistes.

Si les modèles locaux sont opérationnels dès aujourd’hui, 2024 devrait voir l’ émergence de modèles fonctionnant sur smartphone. Internet bruisse de rumeurs selon lesquelles Apple se préparerait à lancer une nouvelle version de Siri basée sur un modèle génératif pouvant piloter certaines applications du téléphone. Samsung, de son côté a développé un modèle de langage appelé Gauss destiné à être intégré sur ses téléphones dans un avenir proche…

5. Notes et références