Ajustement de modèle avec Hugging Face

Ajustement fin avec Llama 3

Francesca Donadoni

Curriculum Manager, DataCamp

De quoi a-t-on besoin pour ajuster un modèle ?

  1. Modèle de langue + tokenizer (un modèle LLama, comme TinyLLama-v0)
  2. Jeu d’entraînement (le jeu de service client Bitext)
  3. Paramètres d’entraînement
  4. Effectuer l’ajustement (SFTTrainer de TRL)
  5. Référentiel d’évaluation ou jeu de données

La boucle d’entraînement. L’entraînement nécessite des paramètres, des données et le modèle, et produit un modèle ajusté. L’évaluation se fait avec le modèle ajusté et un jeu d’évaluation.

Ajustement fin avec Llama 3

Charger modèles et tokenizers avec les classes Auto

model_name="Maykeye/TinyLLama-v0"

model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

tokenizer.pad_token = tokenizer.eos_token
1 https://huggingface.co/docs/transformers/main/en/model_doc/auto
Ajustement fin avec Llama 3

Définir les paramètres avec TrainingArguments

training_arguments = TrainingArguments(

per_device_train_batch_size=1,
learning_rate=2e-3,
max_grad_norm=0.3,
max_steps=200,
... gradient_accumulation_steps=2, save_steps=10,
)
1 https://huggingface.co/docs/transformers/v4.40.1/en/main_classes/trainer#transformers.TrainingArguments
Ajustement fin avec Llama 3

Configurer l’entraînement avec SFTTrainer

trainer = SFTTrainer(

model=model, tokenizer=tokenizer,
train_dataset=dataset, dataset_text_field='conversation',
max_seq_length=250,
args=training_arguments
)
Ajustement fin avec Llama 3

Interpréter les résultats d’ajustement avec SFTTrainer

trainer.train()
TrainOutput(global_step=200, training_loss=1.9401231002807617,
            metrics={'train_runtime': 142.5501, 
                     'train_samples_per_second': 2.806,
                     'train_steps_per_second': 1.403, 
                     'total_flos': 1461265827840.0, 
                     'train_loss': 1.9401231002807617, 
                     'epoch': 2.0})
Ajustement fin avec Llama 3

Évaluer un modèle entraîné avec ROUGE-1

  • ROUGE-1 : Taux de chevauchement de mots entre une référence et le texte généré
import evaluate

rouge = evaluate.load('rouge')
predictions = ["hello there", "general kenobi"] references = ["hello there", "master yoda"]
results = rouge.compute(predictions=predictions, references=references) print(results)
{'rouge1': 0.5, 'rouge2': 0.5, 'rougeL': 0.5, 'rougeLsum': 0.5}
1 https://huggingface.co/spaces/evaluate-metric/rouge
Ajustement fin avec Llama 3

Utiliser le score ROUGE-1

  1. Utiliser l’ensemble d’évaluation dans evaluation_dataset
def generate_predictions_and_reference(dataset):
    predictions = []
    references = []
    for row in dataset:
        inputs = tokenizer.encode(row["instruction"], return_tensors="pt")

outputs = model.generate(inputs)
decoded_outputs = tokenizer.decode(outputs[0, inputs.shape[1]:], skip_special_tokens = True)
references += [row["response"]] predictions += [decoded_outputs] return references, predictions
Ajustement fin avec Llama 3

Lancer ROUGE-1 sur un ensemble d’évaluation

references, predictions = generate_predictions_and_reference(evaluation_dataset)
rouge = evaluate.load('rouge')
results = rouge.compute(predictions=predictions, references=references)
print(results)
Ajustement fin avec Llama 3

Ajustement vs sans ajustement

Ajusté

{'rouge1': 0.22425812699023645,
 'rouge2': 0.039502543246449,
 'rougeL': 0.1501513006868983,
 'rougeLsum': 0.18685597710721613}

Sans ajustement

{'rouge1': 0.1310928764315105,
 'rouge2': 0.04581654122835097,
 'rougeL': 0.08415351421221628,
 'rougeLsum': 0.1224749866097021}
Ajustement fin avec Llama 3

Passons à la pratique !

Ajustement fin avec Llama 3

Preparing Video For Download...