训练参数是 Transformers 库训练系统的核心组成部分,作为模型训练各个方面的配置中心。TrainingArguments 类包含了控制训练过程的所有参数,从学习率和批大小等基本设置,到分布式训练和混合精度的进阶选项。
有关高层级训练工作流的信息,请参阅训练器类 (Trainer Class)。
TrainingArguments 类是一个数据类 (dataclass),它封装了使用 Trainer 类进行训练所需的所有配置选项。它作为一个集中的配置点,控制着:
图表:训练器系统中的训练参数
来源:src/transformers/trainer.py418-443 src/transformers/training_args.py209-210(src/transformers/training_args.py:277-289)
TrainingArguments 类将其参数组织成几个逻辑类别:
这些参数控制着基本的训练参数:
| 参数 | 默认 | 描述 |
|---|---|---|
output_dir | 必需 | 保存输出(模型、日志)的目录 |
per_device_train_batch_size | 8 | 每个设备用于训练的批大小 |
per_device_eval_batch_size | 8 | 每个设备用于评估的批大小 |
num_train_epochs | 3.0 | 训练轮数 |
max_steps | -1 | 如果为正数,则覆盖 num_train_epochs |
learning_rate | 5e-5 | AdamW 的初始学习率 |
gradient_accumulation_steps | 1 | 梯度累积的步数 |
来源:src/transformers/training_args.py247-262(src/transformers/training_args.py:277-289)
这些参数控制优化设置:
| 参数 | 类型 | 描述 |
|---|---|---|
weight_decay | 浮点数 | 除了 bias 和 LayerNorm 之外所有层的权重衰减 |
adam_beta1 | 浮点数 | AdamW 的 Beta1 |
adam_beta2 | 浮点数 | AdamW 的 Beta2 |
adam_epsilon | 浮点数 | AdamW 的 Epsilon |
max_grad_norm | 浮点数 | 梯度裁剪的最大梯度范数 |
lr_scheduler_type | SchedulerType | 学习率调度器的类型 |
warmup_ratio | 浮点数 | 线性预热的步数百分比 |
warmup_steps | int | 预热的步数(覆盖比率设置) |
来源:src/transformers/training_args.py277-304
这些参数控制何时以及如何进行评估和保存:
| 参数 | 默认 | 描述 |
|---|---|---|
eval_strategy | “no” | 何时评估:“no”、“steps” 或 “epoch” |
evaluation_strategy | “no” | 与 eval_strategy 相同(向后兼容) |
save_strategy | “steps” | 何时保存:“no”、“steps”、“epoch” 或 “best” |
save_steps | 500 | 每 X 步保存检查点(如果 save_strategy="steps") |
eval_steps | 无 | 每 X 步评估(如果 eval_strategy="steps") |
save_total_limit | 无 | 要保留的最大检查点数量 |
load_best_model_at_end | 否 | 是否在训练结束时加载最佳模型 |
metric_for_best_model | 无 | 用于确定最佳模型的指标 |
来源:src/transformers/training_args.py238-246(src/transformers/training_args.py:340-357]、src/transformers/training_args.py:425-485])
图表:评估和检查点逻辑
来源:src/transformers/trainer.py1825-1866(src/transformers/trainer.py:2280-2340])
这些参数控制混合精度训练:
| 参数 | 默认 | 描述 |
|---|---|---|
fp16 | 否 | 是否使用 fp16 16 位(混合)精度 |
bf16 | 否 | 是否使用 bf16 16 位(混合)精度 |
fp16_opt_level | “O1” | 对于 fp16,Apex AMP 优化级别 |
half_precision_backend | “auto” | 用于混合精度的后端 |
bf16_full_eval | 否 | 评估时是否使用完整 bf16 |
fp16_full_eval | 否 | 评估时是否使用完整 fp16 |
来源:src/transformers/training_args.py391-410
用于多 GPU 或多节点训练
| 参数 | 类型 | 描述 |
|---|---|---|
local_rank | int | 分布式训练中进程的 rank |
ddp_backend | str | 分布式训练的后端(nccl、mpi、ccl 等) |
fsdp | str/list | PyTorch FSDP 选项(full_shard、shard_grad_op 等) |
fsdp_config | dict | FSDP 的配置 |
deepspeed | str/dict | DeepSpeed 配置文件或字典 |
来源:src/transformers/training_args.py416-560
图表:分布式训练配置流程
来源:src/transformers/training_args.py585-617(src/transformers/trainer.py:575-601])
控制日志行为以及与实验跟踪工具的集成
| 参数 | 默认 | 描述 |
|---|---|---|
logging_dir | output_dir/runs/timestamp | TensorBoard 日志目录 |
logging_strategy | “steps” | 何时记录日志:“no”、“steps” 或 “epoch” |
logging_steps | 500 | 如果策略为“steps”,则每 X 步记录日志 |
logging_first_step | 否 | 是否记录第一步日志 |
report_to | “all” | 要报告的集成列表(“tensorboard”、“wandb” 等) |
run_name | output_dir | 用于报告的运行描述符 |
来源:src/transformers/training_args.py305-339
Trainer 类几乎所有的配置都依赖于 TrainingArguments。它们协同工作的方式如下:
Trainer 时,你需要提供一个 TrainingArguments 实例。max_steps 和 num_train_epochs 等参数控制训练时长。图表:训练器生命周期中的 TrainingArguments 流程
来源:src/transformers/trainer.py1603-1883(src/transformers/trainer.py:459-460])
你可以通过继承 TrainingArguments 来创建自定义训练参数。
TrainingArguments 实例在训练事件期间会传递给所有回调,允许回调访问并响应配置设置。
来源:src/transformers/trainer_callback.py151-190(src/transformers/trainer_callback.py:309-352])
TrainingArguments 类作为 Transformers 训练系统的配置中心。通过集中管理所有训练参数,它提供了一个简洁的接口来控制复杂的训练工作流,同时简化了 Trainer 的实现。
理解可用的参数及其作用对于优化训练性能和充分利用 Transformers 库的功能至关重要。