Transformers 文档
超参数搜索
并获得增强的文档体验
开始使用
超参数搜索
超参数搜索旨在找到产生最佳模型性能的最佳超参数集。 Trainer 通过 hyperparameter_search() 支持多种超参数搜索后端 - Optuna, SigOpt, Weights & Biases, Ray Tune - 以优化一个或多个目标。
本指南将介绍如何为每个后端设置超参数搜索。
pip install optuna/sigopt/wandb/ray[tune]
要使用 hyperparameter_search(),你需要创建一个 model_init
函数。此函数包含基本的模型信息(参数和配置),因为它需要在每次搜索试验中重新初始化。
model_init
函数与 optimizers 参数不兼容。子类化 Trainer 并重写 create_optimizer_and_scheduler() 方法以创建自定义优化器和调度器。
下面显示了一个 model_init
函数的示例。
def model_init(trial):
return AutoModelForSequenceClassification.from_pretrained(
model_args.model_name_or_path,
from_tf=bool(".ckpt" in model_args.model_name_or_path),
config=config,
cache_dir=model_args.cache_dir,
revision=model_args.model_revision,
token=True if model_args.use_auth_token else None,
)
将 model_init
传递给 Trainer 以及训练所需的一切。然后你可以调用 hyperparameter_search() 来开始搜索。
hyperparameter_search() 接受一个 direction 参数来指定是最小化、最大化还是最小化和最大化多个目标。 你还需要设置你正在使用的 backend、一个包含要优化的超参数的 对象、要运行的 trials 数量 以及一个 compute_objective 来返回目标值。
如果未定义 compute_objective,则会调用默认的 compute_objective,它是评估指标(如 F1)的总和。
from transformers import Trainer
trainer = Trainer(
model=None,
args=training_args,
train_dataset=small_train_dataset,
eval_dataset=small_eval_dataset,
compute_metrics=compute_metrics,
processing_class=tokenizer,
model_init=model_init,
data_collator=data_collator,
)
trainer.hyperparameter_search(...)
以下示例演示了如何使用不同的后端对学习率和训练批大小执行超参数搜索。
Optuna 优化类别、整数和浮点数。
def optuna_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]),
}
best_trials = trainer.hyperparameter_search(
direction=["minimize", "maximize"],
backend="optuna",
hp_space=optuna_hp_space,
n_trials=20,
compute_objective=compute_objective,
)
分布式数据并行
Trainer 仅在 Optuna 和 SigOpt 后端上支持分布式数据并行 (DDP) 的超参数搜索。只有 rank-zero 进程用于生成搜索试验,结果参数会传递给其他 rank。
< > 在 GitHub 上更新