Ajustarea fină a modelelor cu Hugging Face

Fine-Tuning cu Llama 3

Francesca Donadoni

Curriculum Manager, DataCamp

Ce este necesar pentru ajustarea fină?

  1. Model de limbaj + tokenizator (un model LLama, precum TinyLLama-v0)
  2. Set de date pentru antrenament (setul de date Bitext pentru servicii clienți)
  3. Argumente de antrenament
  4. Efectuarea ajustării fine (SFTTrainer din TRL)
  5. Benchmark sau set de date pentru evaluare

Bucla de antrenament. Antrenamentul necesită argumente de antrenament, date și model, producând un model ajustat fin. Evaluarea are loc cu modelul ajustat fin și un set de date de evaluare.

Fine-Tuning cu Llama 3

Încărcarea modelelor și tokenizatoarelor cu clasele 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
Fine-Tuning cu Llama 3

Definirea parametrilor de antrenament cu 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
Fine-Tuning cu Llama 3

Configurarea antrenamentului cu SFTTrainer

trainer = SFTTrainer(

model=model, tokenizer=tokenizer,
train_dataset=dataset, dataset_text_field='conversation',
max_seq_length=250,
args=training_arguments
)
Fine-Tuning cu Llama 3

Înțelegerea rezultatelor ajustării fine cu 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})
Fine-Tuning cu Llama 3

Evaluarea unui model antrenat cu ROUGE-1

  • ROUGE-1: Rata de suprapunere a cuvintelor dintre un text de referință și unul generat
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
Fine-Tuning cu Llama 3

Utilizarea scorului ROUGE-1

  1. Utilizați setul de evaluare din 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
Fine-Tuning cu Llama 3

Rularea ROUGE-1 pe un set de evaluare

references, predictions = generate_predictions_and_reference(evaluation_dataset)
rouge = evaluate.load('rouge')
results = rouge.compute(predictions=predictions, references=references)
print(results)
Fine-Tuning cu Llama 3

Cu ajustare fină vs. fără ajustare fină

Cu ajustare fină

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

Fără ajustare fină

{'rouge1': 0.1310928764315105,
 'rouge2': 0.04581654122835097,
 'rougeL': 0.08415351421221628,
 'rougeLsum': 0.1224749866097021}
Fine-Tuning cu Llama 3

Să exersăm!

Fine-Tuning cu Llama 3

Preparing Video For Download...