Fine-tune model dengan Trainer

Pelatihan Model AI Efisien dengan PyTorch

Dennis Lee

Data Engineer, Amazon

Persiapan data

 

Diagram pelatihan terdistribusi yang menunjukkan replikasi model dan pembagian data.

Pelatihan Model AI Efisien dengan PyTorch

Pelatihan terdistribusi

 

 

Bagan alur yang menggambarkan topik kursus: persiapan data, pelatihan terdistribusi, pelatihan efisien, dan optimizer.

Pelatihan Model AI Efisien dengan PyTorch

Trainer dan Accelerator

Grafik yang membandingkan kemudahan penggunaan vs. kemampuan kustomisasi untuk Accelerator dan Trainer.

Pelatihan Model AI Efisien dengan PyTorch

Trainer dan Accelerator

Grafik yang membandingkan kemudahan penggunaan vs. kemampuan kustomisasi untuk Accelerator dan Trainer.

Pelatihan Model AI Efisien dengan PyTorch

Percepat pelatihan dengan Trainer

  • Pustaka Trainer

    from transformers import Trainer
    
  • Jalankan model pada tiap perangkat secara paralel

  • Percepat pelatihan, seperti lini perakitan
  • Tinjau input: dataset, model, metrik
  • Kembangkan analisis sentimen untuk e-commerce

Gambar pembuatan mobil di lini perakitan, menggambarkan pemrosesan paralel.

Pelatihan Model AI Efisien dengan PyTorch

Dataset sentimen ulasan produk

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
Pelatihan Model AI Efisien dengan PyTorch

Konversi label ke integer

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
Pelatihan Model AI Efisien dengan PyTorch

Definisikan tokenizer dan model

  • Muat model dan tokenizer pra-latih:
model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased", 
                                                           num_labels=2)

tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")
  • Terapkan tokenizer pada field 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].
Pelatihan Model AI Efisien dengan PyTorch

Definisikan metrik evaluasi

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}
Pelatihan Model AI Efisien dengan PyTorch

Argumen pelatihan

  • output_dir: Lokasi penyimpanan model
  • Tentukan hiperparameter (mis. learning_rate dan weight_decay)
  • save_strategy: Simpan tiap epoch
  • evaluation_strategy: Evaluasi metrik tiap 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", )
Pelatihan Model AI Efisien dengan PyTorch

Menyiapkan 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
Pelatihan Model AI Efisien dengan PyTorch

Menjalankan analisis sentimen untuk e-commerce

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 ]])
Pelatihan Model AI Efisien dengan PyTorch

Menjalankan analisis sentimen untuk e-commerce

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."
Pelatihan Model AI Efisien dengan PyTorch

Checkpoint dengan Trainer

  • Lanjutkan dari checkpoint terakhir, seperti menjeda film
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}
  • Lanjutkan dari checkpoint tertentu di direktori output
trainer.train(resume_from_checkpoint="model/checkpoint-1000")
Pelatihan Model AI Efisien dengan PyTorch

Ayo berlatih!

Pelatihan Model AI Efisien dengan PyTorch

Preparing Video For Download...