Affinage par LUDWIG#
Maintenant, pour ĂȘtre honnĂȘte, nous nâavons pas rĂ©ellement besoin de suivre toutes ces Ă©tapes Ă partir de zĂ©ro pour affiner un modĂšle de nos jours. Nous pouvons utiliser des frameworks tels que LUDWIG.
Cette section explique comment effectuer le fine-tuning dâun modĂšle de langage en utilisant Ludwig, un outil puissant qui simplifie le cycle de vie de lâapprentissage automatique. Le processus implique lâutilisation dâune configuration de modĂšle spĂ©cifique et dâun ensemble de donnĂ©es pour adapter un modĂšle prĂ©-entraĂźnĂ© Ă une tĂąche spĂ©cialisĂ©e.
Configuration#
Avant de commencer, assurez-vous que Ludwig est installĂ© et configurĂ© dans votre environnement. Vous devrez Ă©galement configurer le token du Hugging Face Hub pour accĂ©der aux modĂšles prĂ©-entraĂźnĂ©s. Ceci est rĂ©alisĂ© en dĂ©finissant la variable dâenvironnement HUGGING_FACE_HUB_TOKEN avec votre clĂ© API Hugging Face :
pip install ludwig ludwig[llm] peft
import os
os.environ["HUGGING_FACE_HUB_TOKEN"] = os.getenv('HUGGINGFACE_API_KEY')
Ludwig nĂ©cessite une configuration YAML qui dĂ©crit les paramĂštres du modĂšle et de lâentraĂźnement. Les Ă©lĂ©ments clĂ©s de cette configuration incluent :
model_type : Indique le type de modĂšle. Pour les modĂšles de langage, âllmâ est utilisĂ©.
base_model : SpĂ©cifie le modĂšle prĂ©-entraĂźnĂ© Ă utiliser. Plusieurs options peuvent ĂȘtre fournies, commentĂ©es pour un changement facile.
quantization : Applique la quantification du modĂšle pour rĂ©duire la taille du modĂšle, avec âbitsâ spĂ©cifiant le niveau de quantification.
adapter : Un adaptateur permet un fine-tuning efficace. Lâadaptateur âloraâ est utilisĂ© dans cet exemple.
prompt : DĂ©finit le modĂšle de prompt pour les donnĂ©es dâentrĂ©e.
input_features et output_features : DĂ©crivent les structures de donnĂ©es dâentrĂ©e et de sortie et les Ă©tapes de prĂ©traitement.
trainer : Configure le processus dâentraĂźnement, y compris le taux dâapprentissage, la taille du lot et les Ă©poques.
Voici un extrait de la configuration YAML :
model_type: llm
base_model: mistralai/Mistral-7B-v0.1
quantization:
bits: 4
adapter:
type: lora
prompt:
template: |
### Instruction :
{instruction}
### Entrée :
{input}
### Réponse :
input_features:
- name: prompt
type: text
output_features:
- name: output
type: text
trainer:
type: finetune
Dataset#
Le dataset quâon a utilisĂ© dans cet exemple câest Alpaca, câest une ressource unique destinĂ©e Ă lâentraĂźnement et au fine-tuning des modĂšles de langue pour mieux suivre les instructions.
Alpaca comprend 52 000 instructions et dĂ©monstrations gĂ©nĂ©rĂ©es par lâengine text-davinci-003 dâOpenAI. Ce dataset est spĂ©cialement conçu pour le fine-tuning instructif des modĂšles de langue, afin dâamĂ©liorer leur capacitĂ© Ă suivre des instructions.
EntraĂźnement#
Pour entraĂźner le modĂšle, chargez la configuration et spĂ©cifiez lâensemble de donnĂ©es. La classe LudwigModel est utilisĂ©e avec la mĂ©thode train :
from ludwig.api import LudwigModel
import yaml
import logging
config = yaml.safe_load(config_str)
model = LudwigModel(config=config, logging_level=logging.INFO)
results = model.train(dataset="ludwig://alpaca")
Sauvegarde du ModĂšle#
AprĂšs lâentraĂźnement, sauvegardez le modĂšle pour une utilisation ou un dĂ©ploiement ultĂ©rieurs :
model.save("results")
Vous pouvez ainsi le sauvegarder directement sur la plateforme huggingface đ€
python -m ludwig.upload hf_hub --repo_id "Ensamien_001/mistralai-7B-v01-fine-tuned-using-ludwig-4bit" --model_path results/api_experiment_run_2