详细介绍:https://mp.weixin.qq.com/s/0zLHA_VQkD3tf0BSzjd7Ag
一、 remove_columns 删除选定的列
作用:去掉原始数据集里面的字段以及对应的数据。
原因:如果不去掉,在进行微调时,模型就会将数据集原始字段和新加的字段一起输入到模型,导致格式与期望的不一致。
二、 TrainingArguments 核心参数
2.1 基础训练设置
参数 | 介绍 |
output_dir (str) | 模型和日志的输出目录(必需参数) |
max_steps (int) | 训练总步数(默认 -1) |
num_train_epochs (int) | 训练的总轮数(默认 3) |
per_device_train_batch_size (int) | 每个设备的训练批次大小(如 8) |
learning_rate (float) | 初始学习率(默认 5e-5 |
weight_decay (float) | 权重衰减系数(L2 正则化,默认 0.0) |
gradient_accumulation_steps (int) | 梯度累积步数(用于小显存场景,默认 1) |
参数关系与计算
-
有效批次大小公式:
-
Effective Batch Size = per_device_train_batch_size * num_devices * gradient_accumulation_steps
-
单GPU场景:
num_devices=1
,有效批次仅由前两个参数决定。 -
多GPU分布式训练:例如,
--nproc_per_node=4
(4个GPU)时,全局有效批次为单卡批次的4倍。 -
实例:
# 示例1:单卡训练,有效批次=8*1*2=16 per_device_train_batch_size=8 gradient_accumulation_steps=2 # 示例2:4卡训练,有效批次=8*4*1=32 per_device_train_batch_size=8 gradient_accumulation_steps=1
计算 max_steps 的方法
数据集大小:假设数据集有 N 个样本。
每步的样本数:per_device_train_batch_size * gradient_accumulation_steps。
总步数:max_steps = ceil(N / (per_device_train_batch_size * gradient_accumulation_steps))。
2.2 优化器与调度器
参数 | 含义 |
optim (str) | 优化器类型(如 "adamw_torch", "adamw_hf", "sgd") |
lr_scheduler_type (str) | 学习率调度策略(如 "linear", "cosine", "constant") |
warmup_ratio (float) | 学习率预热的比例(如 0.1,即前 10% 的步数预热) |
warmup_steps (int) | 直接指定预热步数(与 warmup_ratio 二选一) |
2.3 硬件与性能
参数 | 介绍 |
fp16 (bool) | 是否启用混合精度训练(适用于 NVIDIA GPU,默认 False) |
bf16 (bool) | 是否启用 BFloat16 混合精度(适用于 Ampere+ GPU 或 TPU,默认 False) |
gradient_checkpointing (bool) | 是否使用梯度检查点节省显存(默认 False) |
torch_compile (bool) | 是否启用 PyTorch 2.0 的模型编译加速(默认 False) |
group_by_length (bool | 是否将训练数据集中长度大致相同的样本分组在一起(以最大限度地减少所应用的填充并提高效率)(默认 False) |
2.4 日志与保存
参数 | 介绍 |
logging_dir (str) | 日志保存目录(默认与 output_dir 一致) |
logging_steps (int) | 每隔多少步记录一次日志(如 100) |
save_total_limit (int) | 最多保留的模型检查点数量(默认 None,即全部保留) |
2.5 分布式训练
参数 | 介绍 |
ddp_find_unused_parameters (bool) | 是否检测未使用的参数(分布式训练专用) |
deepspeed (str) | DeepSpeed 配置文件路径(用于启用 DeepSpeed 优化) |
2.6 评估与测试
参数 | 介绍 |
eval_accumulation_steps (int) | 将评估过程拆分为多个小步骤(mini-steps),通过分批次计算和累积结果,减少单次显存占用。如果未设置,则在移动到CPU之前,在GPU/NPU/TPU上累积所有预测(更快,但需要更多内存) |
per_device_eval_batch_size (int) | 每个设备的评估批次大小(如 8) |
metric_for_best_model (str) | 训练结束后是否加载最佳模型(默认 False) |
eval_strategy (str) | 控制训练过程中何时在验证集上评估模型性能(默认 no) |
save_strategy (str) | 训练期间采用的检查点保存策略(默认 no) |
eval_steps (int) | 每隔多少步评估一次(需 evaluation_strategy="steps") |
save_steps (str) | 指定模型每间隔多少步骤进行保存(默认 500) |
greater_is_better (bool) | 判断评估指标越大还是越小来表示模型性能越好还是越差,该指标的True与Fasle必须与metric_for_best_model中指定的参数对应 |
显存优化机制: 假设评估批次大小为 eval_batch_size
,设置 eval_accumulation_steps=2
时,实际会将每个批次的评估拆分为 2 个子步骤:
-
通过分步累积,显存峰值降低为原来的 1/N。
原始批次显存需求 → [eval_batch_size, seq_len, hidden_size]
分步后显存需求 → [eval_batch_size/2, seq_len, hidden_size]
from transformers import TrainingArguments
training_args = TrainingArguments(
output_dir="output",
eval_accumulation_steps=2,
eval_strategy="steps", # 启用基于步骤的评估
eval_steps=500, # 每500步评估一次
save_strategy="steps", # 保存策略与评估对齐
save_steps=500, # 保存间隔=评估间隔
load_best_model_at_end=True, # 训练结束时加载最佳模型
metric_for_best_model="eval_loss",
greater_is_better=False, # 损失越低越好
)
三、 generate 核心参数
3.1 控制生成长度
参数 | 介绍 |
max_length (int) | 生成文本的最大总长度(包括输入上下文) |
max_new_tokens (int) | 生成的新 token 的最大数量(不包含输入长度) |
min_length (int) | 生成文本的最小长度 |
early_stopping (bool) | 是否在达到 num_beams 束后提前停止生成 |
repetition_penalty (float) | 对重复 token 的惩罚系数(>1 降低重复,<1 增加重复) |
3.2 采样策略
参数 | 介绍 |
do_sample (bool) | 是否使用采样贪婪搜索(Greedy Search)或束搜索(Beam Search)(默认 False,即贪婪搜索) |
temperature (float) | 调整采样随机性(值越大越随机,值小则更确定) |
top_k (int) | 仅从概率最高的前 k 个 token 中采样 |
top_p (float) | 核采样(nucleus sampling),仅从累积概率超过 p 的最小 token 集合中采样 |
num_return_sequences (int) | 返回的独立生成序列数量(需配合采样或束搜索使用) |
3.3 束搜索(Beam Search)
|
|
|
|
|
|
|
|
3.4 高级控制
参数 | 介绍 |
| 指定填充符的 ID |
| 指定结束符的 ID |
| 是否返回每个步骤的预测分数 |
| 是否以字典形式返回完整生成信息 |
-
pad_token_id
,eos_token_id
: 指定填充符和结束符的 ID。 -
output_scores
(bool): 是否返回每个步骤的预测分数。 -
return_dict_in_generate
(bool): 是否以字典形式返回完整生成信息。
四、 Trainer 核心参数
4.1 核心组件配置
参数 | 介绍 |
model | 待训练/评估的模型 |
args | 训练超参数配置 |
callbacks | 训练过程回调函数,如添加早停(EarlyStoppingCallback)、日志上传回调 |
compute_loss | 自定义损失计算函数 |
optimizers | 自定义优化器和调度器 |
compute_metrics | 自定义评估指标计算 |
preprocess_logits_for_metrics | Logits 预处理函数(显存优化),以降低显存占用 |
4.2 数据集配置
参数 | 介绍 |
train_dataset | 训练数据集 |
eval_dataset | 评估数据集(支持多数据集) |
data_collator | 批次数据整合器 |