Le fine-tuning est une technique incontournable dans le domaine des grands modèles de langage (LLM) qui permet d'adapter des modèles pré-entraînés à des tâches ou domaines spécifiques. Le processus de fine-tuning LLM implique un entraînement supplémentaire d'un modèle pré-entraîné sur un ensemble de données plus petit et spécifique à une tâche pour affiner ses capacités et améliorer ses performances pour des applications particulières.
D'une certaine manière, le fine-tuning LLM est une voie pour créer un modèle personnalisé pour le cas d'usage d'une entreprise.
Fine-tuning LLM : pourquoi optimiser ses modèles de langage ?
Les avantages du fine-tuning LLM
L'utilité du fine-tuning provient de sa capacité à combler l'écart entre les LLM à usage général et les cas d'utilisation spécialisés. Bien que les modèles pré-entraînés comme Claude 3.5 ou GPT4o possèdent une large compréhension du langage, ils peuvent manquer de connaissances nuancées nécessaires pour des tâches spécifiques.
Le fine-tuning de LLM répond à cette limitation en permettant au modèle d'apprendre des motifs et des connaissances spécifiques à la tâche sans avoir besoin d'un entraînement à partir de zéro (ce qui est impossible financièrement pour une petite ou moyenne entreprise).
Le fine-tuning de LLM offre plusieurs avantages clés :
- Personnalisation : il permet l'adaptation des LLM aux besoins uniques des entreprises, au jargon spécifique à l'industrie et aux domaines de connaissances spécialisées.
- Performance améliorée : les modèles affinés surpassent souvent leurs homologues de base sur des tâches spécifiques, atteignant une meilleure précision et pertinence dans les résultats.
- Efficacité des ressources : comparé à l'entraînement de modèles à partir de zéro, le fine-tuning nécessite significativement moins de ressources computationnelles et de données.
- Développement plus rapide : il accélère le déploiement des solutions d'IA en exploitant les connaissances pré-existantes du modèle de base.
- Atténuation des biais : le fine-tuning LLM peut aider à réduire les biais présents dans le modèle original en l'exposant à des ensembles de données plus diversifiés ou soigneusement sélectionnés.
Le processus de fine-tuning LLM implique généralement des techniques comme l'apprentissage par transfert, où les poids du modèle pré-entraîné sont mis à jour en utilisant un taux d'apprentissage plus faible. Cette approche permet au modèle de conserver sa compréhension générale du langage tout en s'adaptant à de nouvelles tâches.
Fine-tuning LLM : les avancées technologiques
Les avancées récentes dans les techniques de fine-tuning LLM, comme les méthodes de Fine-Tuning Efficace en Paramètres (PEFT) telles que LoRA (Low-Rank Adaptation), ont encore amélioré l'efficacité du processus. Ces méthodes permettent l'ajustement d'un petit sous-ensemble des paramètres du modèle, réduisant les besoins en calcul tout en maintenant les gains de performance.
Une façon simple d'en tirer parti est d'utiliser la bibliothèque Unsloth, qui est essentiellement une suite d'optimisations autour de l'utilisation de la mémoire et du calcul, rendant l'entraînement beaucoup plus simple et moins coûteux sans perdre en performance. La capacité d'Unsloth à accélérer le processus de fine-tuning jusqu'à 30 fois et à réduire l'utilisation de la mémoire de 60% permet d'affiner des modèles plus grands sur du matériel plus modeste, démocratisant ainsi l'accès à la personnalisation avancée des LLM.
Fine-tuning LLM : comment Unsloth facilite-t-il le processus ?
Unsloth emploie plusieurs techniques innovantes pour optimiser le fine-tuning de LLM :
- L'autograd manuel et la multiplication matricielle chaînée réduisent les coûts de calcul en calculant précisément les gradients et en séquençant efficacement les opérations matricielles.
- Les implémentations Flash Attention de xformers améliorent l'efficacité du modèle transformer.
- Le calcul optimisé de la perte d'entropie croisée et la normalisation RMS utilisant Triton réduisent significativement la consommation de mémoire.
- La quantification 4-bit et la précision bfloat16 permettent des lots plus importants et un entraînement plus rapide sur les GPU.
Compromis RAG vs Fine-Tuning
Nous avons déjà publié plusieurs articles sur le RAG (sur AWS et Azure) vous pouvez les consulter au cas où vous ne connaîtriez pas RAG.
Pour choisir entre fine-tuning et RAG pour améliorer les performances des LLM, plusieurs facteurs doivent être considérés :
Intégration des connaissances :
- Le fine-tuning modifie les poids du modèle, intégrant directement les connaissances spécifiques au domaine dans le réseau neuronal.
- Le RAG maintient une base de connaissances séparée, récupérant les informations pertinentes lors de l'inférence.
Adaptabilité :
- Les modèles fine-tunés nécessitent un réentraînement pour intégrer de nouvelles informations, ce qui peut être coûteux en calcul.
- Le RAG permet des mises à jour faciles de la base de connaissances sans réentraînement du modèle.
Vitesse d'inférence :
- Les modèles fine-tunés offrent généralement une inférence plus rapide car toutes les connaissances sont encodées dans les poids.
- Le RAG peut introduire une latence due à l'étape de récupération.
Empreinte mémoire :
- Le fine-tuning peut augmenter la taille du modèle, particulièrement avec les approches de fine-tuning complet.
- Le RAG garde le modèle de base inchangé mais nécessite un stockage supplémentaire pour la base de connaissances.
Spécialisation vs. généralisation :
- Le fine-tuning excelle dans les domaines hautement spécialisés où un comportement cohérent est crucial.
- Le RAG maintient les connaissances générales tout en les augmentant avec des informations spécifiques.
Exigences en données :
- Le fine-tuning nécessite généralement une quantité substantielle de données étiquetées de haute qualité.
- Le RAG peut exploiter plus facilement des données non structurées, nécessitant moins de pré-traitement.
Ressources computationnelles :
- Le fine-tuning demande plus de puissance de calcul (même avec Unsloth, pour un entraînement à grande échelle).
- Le RAG est généralement moins gourmand en ressources pour l'implémentation mais peut en demander plus lors de l'inférence.
Explicabilité :
- Les modèles fine-tunés peuvent être moins interprétables car les connaissances sont intégrées dans les poids.
- Le RAG offre une meilleure explicabilité en fournissant les sources des informations récupérées.
Cohérence :
- Les modèles fine-tunés produisent des sorties plus cohérentes dans leur domaine spécialisé.
- Les réponses RAG peuvent varier selon les informations récupérées.
Approches hybrides :
Le Retrieval-Augmented Fine-Tuning (RAFT) combine les deux méthodes, offrant potentiellement le meilleur des deux mondes.
Qu'est-ce que l'instruct tuning LLM ?
Instruct tuning LLM : adaptation de modèles basés sur les instructions
Le fine-tuning LLM par instructions, également connu sous le nom d'instruct tuning, est une forme spécialisée de fine-tuning qui vise à améliorer la capacité d'un grand modèle de langage à suivre des instructions en langage naturel et à effectuer des tâches spécifiques. Cette technique implique l'entraînement du modèle sur un ensemble de données de paires instruction-sortie, où chaque entrée consiste en une description de tâche ou une instruction, et la sortie correspondante démontre la réponse souhaitée.
La principale distinction entre l'instruct tuning et le fine-tuning LLM traditionnel réside dans la structure des données d'entraînement. Alors que le fine-tuning standard peut utiliser des paires entrée-sortie spécifiques à une tâche, l'instruct tuning LLM incorpore explicitement des instructions dans l'entrée, apprenant au modèle à interpréter et exécuter une grande variété de tâches basées sur des prompts en langage naturel.
Les étapes du processus d'instruct tuning LLM
- Préparation des données : Création ou conservation d'un ensemble diversifié de paires instruction-sortie couvrant une gamme de tâches et domaines.
- Ingénierie des prompts : Conception de formats d'instruction efficaces qui communiquent clairement les exigences de la tâche au modèle.
- Entraînement : Fine-tuning du modèle pré-entraîné sur l'ensemble de données d'instructions.
- Évaluation : Évaluation de la performance du modèle sur des instructions et tâches non vues pour mesurer la généralisation.
Les avantages de l'instruct tuning LLM par rapport au fine-tuning traditionnel
- Meilleure généralisation des tâches : Les modèles peuvent s'adapter plus efficacement à de nouvelles tâches non vues en apprenant à interpréter les instructions.
- Réduction de l'ingénierie des prompts : Le besoin de prompts complexes et spécifiques aux tâches est diminué car le modèle devient plus apte à suivre les instructions.
- Apprentissage zéro-shot et few-shot amélioré : Les modèles instruits performent souvent mieux sur des tâches avec peu ou pas d'exemples fournis.
- Polyvalence accrue : Un seul modèle peut gérer une plus grande variété de tâches sans nécessiter de fine-tuning spécifique.
Les avancées récentes dans l'instruct tuning LLM
- Fine-Tuning par Instructions Phasé (Phased IFT) : Cette approche stratifie les données d'instruction en sous-ensembles de difficulté croissante, permettant un apprentissage progressif.
- Génération de données synthétiques : Utilisation de modèles de langage plus grands pour créer des paires instruction-sortie diverses et de haute qualité.
- Instruct tuning multi-tâches : Combinaison d'instructions de différents domaines pour créer des modèles plus polyvalents.
- Prompting conscient des instructions : Développement de stratégies de prompting qui exploitent efficacement les capacités du modèle instruit.
L'efficacité de l'instruct tuning LLM est évidente dans les modèles d'usage quotidien. Chaque modèle avec lequel nous interagissons habituellement est un instruct finetuning ! Tous les grands modèles comme Claude 3.5, GPT4o, o1-preview etc sont entraînés par instructions. Leur contrepartie est le modèle "base", qui est le modèle initial entraîné uniquement pour compléter des phrases, et non pour répondre aux requêtes des utilisateurs. Ce modèle n'est généralement pas très utile pour les applications quotidiennes, mais ils sont le commencement de tous les LLM.

Démo d'instruct tuning LLM
Pour voir cela en action, utilisons un modèle assez petit mais puissant sorti récemment, Llama3.2 1B. Comme nous allons faire de l'instruct training LLM, nous devons utiliser le modèle de base. Heureusement, nous pouvons facilement le trouver sur la page Hugging Face de Meta, et pour un exemple simple, nous allons apprendre au modèle à répondre aux requêtes de l'utilisateur pour fournir du code Python pour une tâche donnée. La plupart des "connaissances Python" sont déjà présentes dans les poids du modèle, nous apprenons simplement au modèle à répondre effectivement avec du code Python, donc nous pouvons obtenir de bons résultats avec seulement 18k paires de questions -> réponses (que nous pouvons heureusement trouver dans ce jeu de données open-source avec des exemples Python).
Pour toutes les étapes du fine-tuning LLM et le modèle final créé, vous pouvez utiliser ce notebook Colab qui vous permet de réaliser l'entraînement complet en quelques minutes sans dépenser un centime !