À retenir
- Comment déployer ces modèles d’une façon encore plus efficace ?
- Cette possibilité est particulièrement utile si vous avez entraîné un modèle dans un environnement, mais devez le déployer ou faire son fine-tuning dans un autre.
- En retirant les parties les moins utiles, vous rendez le modèle plus petit et plus rapide sans lui faire perdre sa puissance.
Plongeons dans le fine-tuning des grands modèles de langage (LLMs) pour la génération augmentée par récupération, ou RAG.
Qu’est-ce que le fine-tuning ?
Vous avez donc cet immense modèle de langage préentraîné, comme le récent Llama 405B ou GPT-4. Imaginez un étudiant brillant qui a lu tous les livres de la bibliothèque. Le fine-tuning revient à lui offrir du tutorat supplémentaire dans un domaine précis, comme l’algèbre linéaire. Nous prenons ce modèle préentraîné et l’entraînons un peu plus sur un dataset spécialisé qui contient seulement des problèmes mathématiques pour le rendre excellent dans ce domaine. Le modèle comprend ainsi beaucoup mieux le sujet précis qui vous intéresse.
Le fine-tuning ne fait pas concurrence au RAG. Il peut le compléter. En entraînant le modèle sur des données précises, le système de recherche trouve aussi des documents plus pertinents, tandis que le générateur peut fournir des réponses plus exactes puisque les deux comprennent mieux le sujet. Ce processus réduit les erreurs et produit des réponses plus claires et plus précises. Il améliore les performances du RAG dans des domaines comme le soutien à la clientèle ou les conseils techniques, ainsi que la façon dont le modèle traite les questions complexes ou rares. Le fine-tuning assure aussi une collaboration fluide entre le système de recherche et le générateur, ce qui produit des réponses pertinentes de haute qualité. Dans l’ensemble, il rend les modèles RAG beaucoup plus efficaces pour fournir la bonne information. Mais il comporte tout de même un grand inconvénient : le fine-tuning est complexe et coûteux. Vous devez construire le bon dataset, comprendre le processus et itérer pour trouver la bonne combinaison de paramètres. Tout cela entraîne beaucoup de coûts supplémentaires.
Les techniques d’optimisation du fine-tuning
Heureusement, plusieurs techniques permettent de faire le fine-tuning de votre modèle plus efficacement. Examinons la première, appelée quantification. Cette méthode accélère nos modèles et réduit leur utilisation de la mémoire. Il n’y a rien de nouveau ici. Tout repose sur le fonctionnement des ordinateurs et des bits. Pour le comprendre, il faut savoir ce qu’est la précision. La précision représente essentiellement le nombre de bits que nous utilisons pour représenter les nombres dans nos modèles. Les précisions en virgule flottante FP32 et FP16 utilisent respectivement 32 et 16 bits pour représenter chaque nombre. Elles sont très exactes, mais exigent aussi beaucoup de mémoire et de calculs. Les précisions entières INT8 et INT4 utilisent respectivement 8 et 4 bits. Elles sont évidemment plus légères et plus rapides, mais aussi moins précises.
La quantification transforme ces nombres en virgule flottante de haute précision, comme fp32, en nombres entiers de plus faible précision, comme int4. Pourquoi ? Parce qu’elle réduit l’utilisation de la mémoire, augmente la vitesse de calcul et améliore l’efficacité énergétique. Pour simplifier, les poids ressemblent à des règles fixes qui indiquent à quel élément d’une phrase chaque mot doit porter attention. Dans la phrase « Louis possède une chaîne YouTube, et vous devriez vous y abonner pour en apprendre plus sur l’IA », nous voulons clairement que le mot « abonner » porte attention à Louis afin de comprendre que nous ne parlons pas d’une autre chaîne YouTube.
Ces règles, appelées poids, ressemblent à des directives fixes qui aident le modèle à comprendre les parties de l’input auxquelles il doit porter attention. Dans une phrase, par exemple, les poids aident le modèle à déterminer les mots les plus importants les uns par rapport aux autres. Ces poids sont relativement stables et changent peu pendant le fonctionnement du modèle.
Les activations sont au contraire les outputs dynamiques générés par le modèle à mesure qu’il traite l’information dans ses couches. Lorsque le modèle applique les poids aux données d’input, il produit des activations qui représentent sa compréhension actuelle de l’input à chaque étape. Puisque le modèle met constamment sa compréhension à jour pendant son passage dans chaque couche, les activations changent fréquemment et sont plus sensibles à la précision.
Un modèle typique contient plus d’activations que de poids, souvent dans un rapport d’environ 3:1. La réduction de la précision des poids, donc l’utilisation de moins de bits pour les représenter, a un plus faible impact sur l’exactitude du modèle, parce que les poids sont relativement stables et changent peu. La réduction de la précision des activations peut toutefois avoir un plus grand impact sur l’exactitude, puisque celles-ci changent à chaque étape du traitement et que toute perte de précision peut s’accumuler d’une couche à l’autre.
En convertissant les poids et les activations vers une précision plus faible, la quantification nous permet donc de déployer de grands modèles sur de plus petits appareils tout en conservant de hautes performances.
Le seul problème de la quantification est qu’il est impossible de représenter parfaitement de grands nombres précis avec de plus petits nombres moins précis. Le format FP32 est utilisé pour une raison. Imaginez par exemple le nombre 3,14159, une valeur précise de pi, au format FP32. Si vous le convertissez dans un format plus petit comme Int8, il pourrait simplement devenir 3 et perdre tous les détails décimaux. Cette perte de détail peut réduire l’exactitude de vos calculs. En machine learning, votre modèle pourrait commettre plus d’erreurs, parce qu’il ne peut pas saisir les petites différences qui comptent. Même si la quantification accélère les calculs et réduit l’utilisation de la mémoire, elle peut donc nuire aux performances et à l’exactitude de vos résultats. Heureusement, un modèle possède tellement de poids que cette méthode fonctionne généralement bien. Nous utilisons aussi une tonne d’astuces pour améliorer ce processus et trouver le meilleur équilibre entre la vitesse et l’exactitude.
Bits and Bytes est une librairie populaire qui accomplit ce travail. Elle utilise deux principales méthodes : la quantification 8 bits et la quantification 4 bits. Imaginez que vous possédez une tonne de nombres, certains grands et d’autres petits. B&B conserve les grands nombres, ou valeurs aberrantes, dans un format plus détaillé comme FP16, mais stocke les autres dans un format 8 bits plus simple comme INT8. Le modèle utilise ainsi moins de mémoire et traite les données plus rapidement sans perdre trop d’exactitude, puisqu’il reste prudent avec les grands nombres.
Bits and Bytes peut aussi stocker les poids du modèle dans un format 4 bits encore plus simple. Lorsque le modèle doit utiliser ces poids, il les convertit temporairement dans un format plus détaillé pour assurer l’exactitude. L’utilisation de la mémoire reste donc très faible, sans sacrifier les performances au moment important.
Mais il ne suffit pas de choisir entre 4 bits et 8 bits. Pendant le fine-tuning d’un modèle, une astuce intéressante appelée Parameter-Efficient Fine-Tuning (PEFT) permet d’ajuster seulement une petite partie du modèle plutôt que chacune de ses composantes, afin de l’améliorer pour votre tâche précise. Il existe plusieurs façons d’y arriver. La première consiste à utiliser des adaptateurs pour ajouter une nouvelle couche qui sera la seule à subir le fine-tuning. Des techniques comme Low-Rank Adaptation, ou LoRA, utilisent des mathématiques intelligentes, comme la multiplication matricielle, pour modifier seulement une partie du modèle sans toucher au reste. QLoRA va plus loin en réduisant d’abord les poids du modèle à 4 bits, le Q signifiant quantifié, puis en appliquant LoRA. Avec QLoRA, les poids 4 bits économisent donc une tonne d’espace, tandis que les calculs importants restent en 16 bits pour préserver l’exactitude.
Jusqu’ici, nous avons parlé de ce qui se passe pendant le fine-tuning. Mais qu’arrive-t-il ensuite ? Comment déployer ces modèles d’une façon encore plus efficace ? Deux méthodes solides permettent de contourner les problèmes de performance causés par la simplification des nombres : SmoothQuant et la quantification par gradient après l’entraînement.
Contrairement à QLoRA, SmoothQuant adopte une autre approche en quantifiant à la fois les poids et les activations avec une précision de 8 bits. Cette méthode équilibre la charge entre les poids et les activations, ce qui accélère le traitement, économise la mémoire et maintient une haute exactitude. SmoothQuant est intégré à des outils populaires comme FasterTransformer, Amazon SageMaker, Nvidia TensorRT et ONNX. Vous pouvez donc faire fonctionner les grands modèles jusqu’à 1,56 fois plus rapidement avec seulement la moitié de la mémoire.
En passant, ONNX facilite le déplacement des modèles entre différents outils et frameworks. Cette possibilité est particulièrement utile si vous avez entraîné un modèle dans un environnement, mais devez le déployer ou faire son fine-tuning dans un autre. Si vous devez un jour changer de framework, ONNX peut rendre le processus beaucoup plus fluide.
La quantification par gradient après l’entraînement, ou GPTQ, intervient également une fois le modèle entièrement entraîné. Elle se concentre sur le fine-tuning du modèle quantifié afin de réduire toute perte d’exactitude. GPTQ se distingue par sa flexibilité : cette méthode peut s’appliquer aux poids et, dans certains cas, aux activations. GPTQ fonctionne avec différents degrés de quantification, y compris des formats très compacts comme 4 bits. Elle produit ainsi un modèle plus petit et plus rapide qui reste exact. GPTQ représente donc un excellent choix de déploiement lorsque vous devez équilibrer les performances, la vitesse et l’utilisation de la mémoire sur différentes plateformes.
La quantification n’est toutefois pas la seule astuce qui améliore l’efficacité du fine-tuning. D’autres méthodes peuvent aussi aider, comme l’élagage du modèle.
L’élagage ressemble à la taille d’un arbre. En retirant les parties les moins utiles, vous rendez le modèle plus petit et plus rapide sans lui faire perdre sa puissance. Il exige ainsi moins de calculs, mais conserve les mêmes performances. Des outils comme TensorFlow Model Optimization Toolkit et TorchPrune repèrent les poids du réseau qui ne font pas leur part et les retirent sans danger afin que votre modèle reste léger et efficace. Nous utilisons souvent une estimation de l’importance pour déterminer quels poids élaguer. Si le sujet vous intéresse, vous pouvez en apprendre davantage dans l’article de NVIDIA sur Minitron.
Une autre approche intelligente est l’entraînement en précision mixte. Elle utilise une précision plus faible, comme FP16, pour la majeure partie du modèle afin d’économiser du temps et de la mémoire, puis une précision plus élevée, comme FP32, là où elle compte vraiment. Des outils comme Apex de NVIDIA et Mixed Precision API de TensorFlow déterminent automatiquement les parties du modèle qui peuvent se contenter d’une plus faible précision et celles qui exigent ces détails supplémentaires. L’ensemble du processus devient ainsi plus rapide et plus efficace en matière de mémoire.
Il y a ensuite la distillation des connaissances, sur laquelle Meta mise beaucoup avec ses modèles Llama 3.1. L’entreprise prévoit utiliser l’immense modèle 405B pour distiller les plus petits. Essentiellement, vous entraînez un plus petit modèle « étudiant » à imiter un plus grand modèle « enseignant », au lieu d’entraîner les petits modèles avec un dataset plus petit. Le modèle étudiant apprend à devenir presque aussi performant que l’enseignant, mais reste beaucoup plus léger. Il n’a pas besoin de données de référence, puisque le modèle enseignant les lui fournit. Cette approche convient donc parfaitement aux appareils dont la puissance ou la mémoire est limitée ET permet d’obtenir un excellent modèle avec beaucoup moins de préparation des données.
Enfin, nous avons les techniques d’optimisation des graphes, comme la fusion des couches, qui simplifient un processus en retirant les étapes inutiles. La fusion réunit en une seule opération plus efficace plusieurs opérations que le modèle exécuterait normalement l’une après l’autre. Elle réduit ainsi le nombre de fois où le modèle doit transférer les données entre différentes couches, ce qui diminue le temps et la mémoire nécessaires au travail. Des outils comme ONNX Runtime et NVIDIA TensorRT regroupent des opérations semblables et réduisent le nombre de calculs effectués par le modèle. Celui-ci fonctionne plus rapidement et utilise moins de mémoire, un grand avantage pour le déploiement sur des plateformes aux ressources limitées.
Ces techniques puissantes accélèrent les modèles, réduisent leur utilisation de la mémoire et préservent leur exactitude. Elles sont particulièrement utiles aux petites entreprises et au déploiement. Elles permettent de déployer de grands modèles même sur des appareils aux ressources limitées et rendent l’IA plus accessible et plus efficace.
L’optimisation des LLMs combine donc l’ajustement des hyperparamètres, des techniques d’entraînement avancées et plusieurs formes de quantification qui peuvent survenir pendant une seule ou toutes les étapes habituelles : le préentraînement, le fine-tuning ou la production. Avec d’autres stratégies d’optimisation comme l’élagage, l’entraînement en précision mixte, la distillation des connaissances et l’optimisation des graphes, ces méthodes assurent que le modèle est efficace, puissant et prêt à être déployé !
Nous abordons ces méthodes beaucoup plus en profondeur avec des exemples pratiques dans notre cours sur le RAG.
Merci d’avoir lu jusqu’au bout. J’espère que cet article vous a été utile !
FAQ
Tous les systèmes RAG devraient-ils faire le fine-tuning de leur modèle de langage ?
Non. Améliorez d’abord les documents, la recherche d’information, les prompts et l’évaluation, puisqu’ils peuvent corriger l’échec observé à moindre coût.
Quand le fine-tuning peut-il améliorer le RAG ?
Il peut améliorer le comportement dans un domaine, le style des réponses, le formatage, l’utilisation des outils ou l’emploi cohérent des preuves récupérées.
Qu’est-ce que le fine-tuning économe en paramètres ?
Le PEFT met à jour un petit ensemble de paramètres ou d’adaptateurs plutôt que de réentraîner tous les poids du modèle de base.
Pourquoi utiliser une précision numérique plus faible ?
La quantification réduit la mémoire et peut accélérer le traitement en acceptant une perte mesurée de détail numérique.
Comment une équipe devrait-elle déterminer si l’optimisation a fonctionné ?
Comparez les métriques de recherche d’information et de réponse, la latence, la mémoire et les coûts sur le même ensemble d’évaluation représentatif.
Qu’est-ce que QLoRA change pendant le fine-tuning ?
QLoRA quantifie le modèle de base pour réduire l’utilisation de la mémoire, puis entraîne de petits adaptateurs de faible rang au lieu de mettre à jour tous les poids du modèle.

