菜单

训练参数

相关源文件

训练参数是 Transformers 库训练系统的核心组成部分,作为模型训练各个方面的配置中心。TrainingArguments 类包含了控制训练过程的所有参数,从学习率和批大小等基本设置,到分布式训练和混合精度的进阶选项。

有关高层级训练工作流的信息,请参阅训练器类 (Trainer Class)

概述

TrainingArguments 类是一个数据类 (dataclass),它封装了使用 Trainer 类进行训练所需的所有配置选项。它作为一个集中的配置点,控制着:

  • 基本训练参数(批大小、学习率、训练轮数)
  • 输出和检查点设置
  • 优化策略
  • 评估调度和指标
  • 分布式训练设置
  • 混合精度选项(FP16、BF16)
  • 日志记录和报告配置
  • 特殊训练技术和优化

图表:训练器系统中的训练参数

来源:src/transformers/trainer.py418-443 src/transformers/training_args.py209-210(src/transformers/training_args.py:277-289)

主要参数类别

TrainingArguments 类将其参数组织成几个逻辑类别:

1. 基本训练配置

这些参数控制着基本的训练参数:

参数默认描述
output_dir必需保存输出(模型、日志)的目录
per_device_train_batch_size8每个设备用于训练的批大小
per_device_eval_batch_size8每个设备用于评估的批大小
num_train_epochs3.0训练轮数
max_steps-1如果为正数,则覆盖 num_train_epochs
learning_rate5e-5AdamW 的初始学习率
gradient_accumulation_steps1梯度累积的步数

来源:src/transformers/training_args.py247-262(src/transformers/training_args.py:277-289)

2. 优化参数

这些参数控制优化设置:

参数类型描述
weight_decay浮点数除了 bias 和 LayerNorm 之外所有层的权重衰减
adam_beta1浮点数AdamW 的 Beta1
adam_beta2浮点数AdamW 的 Beta2
adam_epsilon浮点数AdamW 的 Epsilon
max_grad_norm浮点数梯度裁剪的最大梯度范数
lr_scheduler_typeSchedulerType学习率调度器的类型
warmup_ratio浮点数线性预热的步数百分比
warmup_stepsint预热的步数(覆盖比率设置)

来源:src/transformers/training_args.py277-304

3. 评估与保存

这些参数控制何时以及如何进行评估和保存:

参数默认描述
eval_strategy“no”何时评估:“no”、“steps” 或 “epoch”
evaluation_strategy“no”与 eval_strategy 相同(向后兼容)
save_strategy“steps”何时保存:“no”、“steps”、“epoch” 或 “best”
save_steps500每 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])

4. 混合精度训练

这些参数控制混合精度训练:

参数默认描述
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

5. 分布式训练设置

用于多 GPU 或多节点训练

参数类型描述
local_rankint分布式训练中进程的 rank
ddp_backendstr分布式训练的后端(nccl、mpi、ccl 等)
fsdpstr/listPyTorch FSDP 选项(full_shard、shard_grad_op 等)
fsdp_configdictFSDP 的配置
deepspeedstr/dictDeepSpeed 配置文件或字典

来源:src/transformers/training_args.py416-560

图表:分布式训练配置流程

来源:src/transformers/training_args.py585-617(src/transformers/trainer.py:575-601])

6. 日志记录与报告

控制日志行为以及与实验跟踪工具的集成

参数默认描述
logging_diroutput_dir/runs/timestampTensorBoard 日志目录
logging_strategy“steps”何时记录日志:“no”、“steps” 或 “epoch”
logging_steps500如果策略为“steps”,则每 X 步记录日志
logging_first_step是否记录第一步日志
report_to“all”要报告的集成列表(“tensorboard”、“wandb” 等)
run_nameoutput_dir用于报告的运行描述符

来源:src/transformers/training_args.py305-339

与训练器 (Trainer) 的集成

Trainer 类几乎所有的配置都依赖于 TrainingArguments。它们协同工作的方式如下:

  1. 初始化:创建 Trainer 时,你需要提供一个 TrainingArguments 实例。
  2. 训练循环控制max_stepsnum_train_epochs 等参数控制训练时长。
  3. 优化设置:参数配置优化器、调度器和混合精度。
  4. 评估策略:参数决定评估发生的时间和方式。
  5. 检查点管理:参数控制模型检查点的保存和加载。
  6. 日志记录与报告:参数配置指标跟踪以及与各种平台的集成。

图表:训练器生命周期中的 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 库的功能至关重要。