Fine-tune โมเดลด้วย Trainer

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

Dennis Lee

Data Engineer, Amazon

การเตรียมข้อมูล

 

แผนภาพการฝึกแบบกระจายที่แสดงการจำลองโมเดลและการแบ่งข้อมูล

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การฝึกแบบกระจาย

 

 

แผนผังแสดงหัวข้อในคอร์ส: การเตรียมข้อมูล การฝึกแบบกระจาย การฝึกอย่างมีประสิทธิภาพ และตัวเพิ่มประสิทธิภาพ

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

Trainer และ Accelerator

แผนภูมิเปรียบเทียบความง่ายในการใช้งานกับความสามารถในการปรับแต่งของ Accelerator และ Trainer

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

Trainer และ Accelerator

แผนภูมิเปรียบเทียบความง่ายในการใช้งานกับความสามารถในการปรับแต่งของ Accelerator และ Trainer

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

เพิ่มประสิทธิภาพการฝึกด้วย Trainer

  • ไลบรารี Trainer

    from transformers import Trainer
    
  • รันโมเดลบนแต่ละอุปกรณ์แบบขนาน

  • เร่งความเร็วการฝึก เหมือนสายการผลิต
  • ทบทวนอินพุต: ชุดข้อมูล โมเดล เมตริก
  • พัฒนาการวิเคราะห์ความรู้สึกสำหรับอีคอมเมิร์ซ

ภาพสายการผลิตรถยนต์ แสดงแนวคิดการประมวลผลแบบขนาน

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

ชุดข้อมูลรีวิวสินค้าเชิงความรู้สึก

print(dataset)
DatasetDict({
    train: Dataset({
        features: ['Text', 'Label'],
        num_rows: 1000
    }), ...})
print(f'"{dataset["train"]["Text"][0]}": {dataset["train"]["Label"][0]}')
"I love this product!": positive
การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

แปลง Label เป็นจำนวนเต็ม

def map_labels(example):
    if example["Label"] == "negative":
        return {"labels": 0}

else: return {"labels": 1} dataset = dataset.map(map_labels)
print(f'First label: {dataset["train"]["labels"][0]}')
First label: 1
การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

กำหนด tokenizer และโมเดล

  • โหลดโมเดลและ tokenizer ที่ผ่านการฝึกมาแล้ว:
model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased", 
                                                           num_labels=2)

tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")
  • ใช้ tokenizer กับฟิลด์ text:
def encode(examples):

return tokenizer(examples["Text"], padding="max_length", truncation=True, return_tensors="pt")
dataset = dataset.map(encode, batched=True)
print(f'The first tokenized review is {dataset["train"]["input_ids"][0]}.')
The first tokenized review is [101, 1045, 2293, 2023, 4031, 999, 102].
การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

กำหนดเมตริกการประเมิน

import evaluate


def compute_metrics(eval_predictions):
load_accuracy = evaluate.load("accuracy") load_f1 = evaluate.load("f1")
logits, labels = eval_predictions
predictions = np.argmax(logits, axis=-1)
accuracy = load_accuracy.compute(predictions=predictions, references=labels)[ "accuracy" ]
f1 = load_f1.compute(predictions=predictions, references=labels)["f1"]
return {"accuracy": accuracy, "f1": f1}
การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

อาร์กิวเมนต์การฝึก

  • output_dir: ตำแหน่งบันทึกโมเดล
  • ระบุ hyperparameter (เช่น learning_rate และ weight_decay)
  • save_strategy: บันทึกหลังแต่ละ epoch
  • evaluation_strategy: ประเมินเมตริกหลังแต่ละ epoch
from transformers import (
    TrainingArguments)

training_args = TrainingArguments(
    output_dir="output_folder",

learning_rate=2e-5, per_device_train_batch_size=16, per_device_eval_batch_size=16, num_train_epochs=2, weight_decay=0.01,
save_strategy="epoch", evaluation_strategy="epoch", )
การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

ตั้งค่า Trainer

from transformers import Trainer

trainer = Trainer(model=model,

args=training_args,
train_dataset=dataset["train"], eval_dataset=dataset["validation"],
compute_metrics=compute_metrics)
trainer.train()
{'epoch': 1.0, 'eval_loss': 0.79, 'eval_accuracy': 0.00, 'eval_f1': 0.00}
{'epoch': 2.0, 'eval_loss': 0.65, 'eval_accuracy': 0.11, 'eval_f1': 0.15}
print(trainer.args.device)
cpu
การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

วิเคราะห์ความรู้สึกสำหรับอีคอมเมิร์ซ

sample_review = "This product is amazing!"

input_ids = tokenizer.encode(sample_review, return_tensors='pt') print(f"Tokenized review: {input_ids}")
Tokenized review: tensor([[ 101, 2023, 4031, 2003, 6429,  999,  102 ]])
การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

วิเคราะห์ความรู้สึกสำหรับอีคอมเมิร์ซ

output = model(input_ids)
print(f"Output logits: {output.logits}")
Output logits: tensor([[ -0.0538, 0.1300 ]])
predicted_label = torch.argmax(output.logits, dim=1).item()
print(f"Predicted label: {predicted_label}")
Predicted label: 1
sentiment = "Negative" if predicted_label == 0 else "Positive"
print(f'The sentiment of the product review is "{sentiment}."')
The sentiment of the product review is "Positive."
การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

Checkpoint ด้วย Trainer

  • ดำเนินการต่อจาก checkpoint ล่าสุด เหมือนหยุดพักดูหนัง
trainer.train(resume_from_checkpoint=True)
{'epoch': 3.0, 'eval_loss': 0.29, 'eval_accuracy': 0.37, 'eval_f1': 0.51}
{'epoch': 4.0, 'eval_loss': 0.23, 'eval_accuracy': 0.46, 'eval_f1': 0.58}
  • ดำเนินการต่อจาก checkpoint ที่ระบุในไดเรกทอรีผลลัพธ์
trainer.train(resume_from_checkpoint="model/checkpoint-1000")
การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

มาฝึกกันเลย!

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

Preparing Video For Download...