Transformers documentation
Pencarian hiperparameter
Pencarian hiperparameter
Hyperparameter seperti learning rate, batch size, dan jumlah epoch sangat memengaruhi hasil pelatihan. Trainer.hyperparameter_search() menemukan kombinasi terbaik dengan menjalankan beberapa percobaan, masing-masing dengan set nilai yang berbeda, dan mengembalikan yang terbaik.
Setiap percobaan menginisialisasi model baru dengan model_init, mengambil sampel hiperparameter baru, menjalankan loop pelatihan penuh, dan melaporkan tujuan ke backend pencarian. Backend menggunakan setiap tujuan untuk menginformasikan percobaan berikutnya. Setelah semua percobaan selesai, hiperparameter terbaik dikembalikan dalam ~trainer.utils.BestRun.
Menginisialisasi model
Mulai setiap percobaan dengan model baru untuk menghindari state dari eksekusi sebelumnya. model_init dipanggil di awal setiap percobaan dan mengembalikan instance model baru, sehingga setiap percobaan dimulai dari bobot awal yang sama.
from transformers import AutoModelForCausalLM
def model_init(trial):
return AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-0.6B")
trainer = Trainer(
model_init=model_init,
args=args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
)Jangan meneruskan model= dan model_init= bersamaan, atau Trainer akan memicu error.
Definisikan ruang pencarian
Buat fungsi yang mendefinisikan ruang pencarian. Formatnya bergantung pada backend. Jika Anda tidak mendefinisikan fungsi hp_space, pencarian default mencakup learning_rate, num_train_epochs, dan per_device_train_batch_size.
# install one of these hyperparam search backends
pip install optuna
pip install wandb
pip install ray[tune]Optuna adalah kerangka kerja ringan untuk optimasi hiperparameter.
def hp_space(trial):
return {
"learning_rate": trial.suggest_float("learning_rate", 1e-6, 1e-4, log=True),
"per_device_train_batch_size": trial.suggest_categorical("per_device_train_batch_size", [16, 32, 64, 128]),
}Ray Tune adalah pustaka penyetelan hiperparameter yang dapat diskalakan dan juga dapat mendistribusikan percobaan ke beberapa mesin.
from ray import tune
def hp_space(trial):
return {
"learning_rate": tune.loguniform(1e-6, 1e-4),
"per_device_train_batch_size": tune.choice([16, 32, 64, 128]),
}Weights & Biases adalah platform pelacakan eksperimen dengan pencarian hiperparameter bawaan. Platform ini mendukung strategi pencarian Bayesian, acak, dan grid.
def hp_space(trial):
return {
"method": "random",
"metric": {"name": "objective", "goal": "minimize"},
"parameters": {
"learning_rate": {"distribution": "uniform", "min": 1e-6, "max": 1e-4},
"per_device_train_batch_size": {"values": [16, 32, 64, 128]},
},
}Jalankan pencarian
Sediakan fungsi compute_objective opsional untuk mendefinisikan target optimasi. Nilainya secara default adalah eval_loss jika ada, atau jumlah dari semua nilai metrik jika tidak. Sampaikan fungsi eksplisit untuk menghindari ketergantungan pada fallback ini. backend pencarian mengoptimalkan tujuan tersebut selama n_trials eksekusi dalam direction tertentu.
def compute_objective(metrics):
return metrics["eval_loss"]
best_run = trainer.hyperparameter_search(
hp_space=hp_space,
compute_objective=compute_objective,
n_trials=30, # how many trials to run
direction="minimize", # or "maximize" for metrics like accuracy/F1
backend="optuna", # "optuna", "ray", or "wandb"
)hyperparameter_search() mengembalikan ~trainer.utils.BestRun yang berisi nilai objektif dan kombinasi hyperparameter terbaik.
best_run = trainer.hyperparameter_search(...)
best_run.objective # 0.38 (best eval loss)
best_run.hyperparameters # {"learning_rate": 5e-5, "num_train_epochs": 4, ...}Terapkan hiperparameter terbaik ke TrainingArguments dan latih ulang pada dataset lengkap.
Update on GitHub