Ajustement fin du modèle avec Hugging Face

Ajustement fin avec Llama 3

Francesca Donadoni

Curriculum Manager, DataCamp

De quoi a-t-on besoin pour faire un ajustement fin ?

  1. Modèle de langue + tokenizer (un modèle LLama, p. ex. TinyLLama-v0)
  2. Ensemble d'entraînement (ensemble Bitext de service à la clientèle)
  3. Paramètres d'entraînement
  4. Lancer l'ajustement fin (SFTTrainer de TRL)
  5. Référentiel ou ensemble d'évaluation

La boucle d'entraînement. L'entraînement requiert des paramètres, des données et le modèle, et produit un modèle ajusté finement. L'évaluation se fait avec le modèle ajusté finement et un ensemble 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 d'entraînement 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 fin 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 un texte de référence et un 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

Exécuter 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 fin vs sans ajustement fin

Avec ajustement fin

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

Sans ajustement fin

{'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...