Tinh chỉnh mô hình với Hugging Face

Fine-Tuning với Llama 3

Francesca Donadoni

Curriculum Manager, DataCamp

Cần gì để tinh chỉnh mô hình?

  1. Mô hình ngôn ngữ + tokenizer (một mô hình LLama, như TinyLLama-v0)
  2. Tập huấn luyện (bộ dữ liệu CSKH Bitext)
  3. Tham số huấn luyện
  4. Tiến hành tinh chỉnh (SFTTrainer từ TRL)
  5. Thước đo hoặc tập đánh giá

Vòng lặp huấn luyện. Cần tham số huấn luyện, dữ liệu và mô hình để tạo mô hình đã tinh chỉnh. Đánh giá dùng mô hình đã tinh chỉnh và tập đánh giá.

Fine-Tuning với Llama 3

Tải model và tokenizer với Auto classes

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 với Llama 3

Đặt tham số huấn luyện với 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 với Llama 3

Cách thiết lập huấn luyện với SFTTrainer

trainer = SFTTrainer(

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

Hiểu kết quả tinh chỉnh với 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 với Llama 3

Đánh giá mô hình đã huấn luyện bằng ROUGE-1

  • ROUGE-1: Tỉ lệ trùng từ giữa văn bản tham chiếu và văn bản sinh ra
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 với Llama 3

Cách dùng điểm ROUGE-1

  1. Dùng tập đánh giá trong 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 với Llama 3

Chạy ROUGE-1 trên tập đánh giá

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

Tinh chỉnh vs. không tinh chỉnh

Đã tinh chỉnh

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

Chưa tinh chỉnh

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

Ayo berlatih!

Fine-Tuning với Llama 3

Preparing Video For Download...