参考链接
训练的epoch数,默认为3
假设你有 1000 条训练样本,并且设置了:
num_train_epochs = 3
这意味着:
每个设备训练批量大小,在GRPO中,指 completion 的批次大小
假设你设置:
perDeviceTrainBatchSize = 16
per_device_train_batch_size * num_devices
方面 | 影响 |
---|---|
训练速度 | 越大的 batch size 可能训练更快(利用硬件并行能力) |
内存占用 | batch size 越大,占用显存越多,太大可能导致 OOM(out of memory) |
模型效果 | 太小可能不稳定(梯度噪声大),太大可能导致泛化能力下降 |
分布式训练 | 控制每个设备的负载,便于多设备训练 |
快速训练 | 使用尽可能大的 batch size(不超过显存限制) |
---|---|
避免 OOM | 从小开始逐步尝试(2 → 4 → 8) |
微调大模型 | 推荐1~8,配合 gradient accumulation |
多卡训练 | 可适当放大 per_device_batch_size |
批量归一化(BatchNorm)问题 | batch size 不宜过小(否则影响 BN 效果) |
学习率,全参数默认为1e-5,LoRA等tuners为1e-4
更通俗的解释
learning_rate
决定了每一步调整的“力度”。公式大致如下:
newParameter = oldParameter - learningRate * gradient
学习率大小 | 效果 | 问题 |
---|---|---|
太大 | 更新步子大,训练快 | 容易跳过最优解,导致震荡或发散 |
太小 | 更新步子小,稳定但慢 | 收敛慢,可能陷入局部最小值或耗时太久 |
0.1
开始,配合学习率衰减策略(如 Step Decay 或 Cosine Annealing)3e-4
(即 0.0003
)5e-5
(即 0.00005
)3e-5
或 2e-5
,特别是在微调阶段1e-4
到 1e-5
2e-5
~ 5e-5
它表示在整个训练过程中,有多少比例的训练步数(training steps)将被用于“学习率预热”阶段(Warmup Phase)。
通俗地讲:
num_warmup_steps = int(warmup_ratio * total_training_steps)
total_training_steps
:整个训练过程中的总步数(通常等于 num_epochs × num_batches_per_epoch
)warmup_ratio
一般取值在 0.01 ~ 0.2
之间它表示训练集和验证集(或测试集)之间的划分比例
通常我们会将一个完整的数据集划分为:
假设你有一个包含 1000 条样本的数据集,并设置:
let splitDatasetRatio = 0.8
那么:
1000 × 0.8 = 800
条样本;1000 × (1 - 0.8) = 200
条样本;也就是说,这个参数控制了训练集占整个数据集的比例。
lora_rank
表示 LoRA 中低秩矩阵的秩(rank),它控制了插入到原始模型权重中的适配矩阵的“复杂度”或“表达能力”。
lora_rank
越小 → 适配矩阵越“简单”,参数越少,节省内存和计算;lora_rank
越大 → 适配矩阵越“复杂”,拟合能力越强,但也更容易过拟合;模型规模 | 推荐lora_rank值 |
---|---|
小模型(<1B) | 8 ~ 64 |
中等模型(1B~10B) | 8 ~ 32 |
大模型(>10B,如 LLaMA-13B、InternLM-7B) | 8 ~ 16 |
lora_alpha
是 LoRA 中用于控制适配矩阵缩放的一个超参数。
数学公式如下:
ΔW=rα⋅A⋅BT
其中:
lora_rank
lora_alpha
假设你设置了:
lora_rank = 8
lora_alpha = 16
那么 LoRA 中的缩放因子就是:
16 / 8 = 2
也就是说,你的低秩矩阵的影响会被放大 2 倍。
场景 | 推荐lora_alpha值 |
---|---|
默认推荐 | lora_alpha = 2 × lora_rank |
小模型(<1B) | 8 ~ 32 |
大模型(>10B,如 InternLM-7B) | 16 ~ 64 |
常见组合示例:
lora_rank = 8, lora_alpha = 16
lora_rank = 16, lora_alpha = 32
lora_rank = 32, lora_alpha = 64
决定是否在推理或训练过程中自动应用模型内置的“对话格式模板”来组织输入文本
例如,你传入如下对话历史:
[
{"role": "user", "content": "介绍一下你自己"},
{"role": "assistant", "content": "我是 InternLM,由上海人工智能实验室开发的语言模型..."},
{"role": "user", "content": "你能帮我写一篇关于夏天的文章吗?"}
]
如果启用了 use_chat_template = true
,系统会自动将这段对话转换为类似下面的字符串:
<|User|>: 介绍一下你自己
<|Assistant|>: 我是 InternLM...
<|User|>: 你能帮我写一篇关于夏天的文章吗?
值 | 含义 |
---|---|
true | 使用模型自带的 chat template 自动格式化对话输入 |
false | 不使用模板,需要手动构造完整的 prompt |
找不到更多的信息
是用来指定哪些模块将接入 LoRA 或其他 tuner 的核心参数
默认为all-linear
. 在LLM和多模态LLM中,其行为有所不同. 若是LLM则自动寻找除lm_head外的linear并附加tuner,若是多模态LLM,则默认只在LLM上附加tuner,该行为可以被freeze_llm
、freeze_vit
、freeze_aligner
控制。该参数不限于LoRA,可用于其他tuners。
它表示在更新模型参数之前,累计多少个 batch 的梯度后再进行一次参数更新。
通俗地说:
gradient_accumulation_steps = N
,那么会先计算 N 个 batch 的梯度,把它们累加起来,再做一次参数更新;假设你设置如下参数:
{
"per_device_train_batch_size": 4,
"gradient_accumulation_steps": 8
}
那么:
4 × 8 = 32
;场景 | 推荐gradient_accumulation_steps值 |
---|---|
单卡 A10 / RTX 3090 / L40(24G 显存) | 1 ~ 4(batch 较大时可不累积) |
单卡 T4 / V100(16G 显存) | 4 ~ 8 |
单卡 RTX 3060 / 2080(12G 显存) | 8 ~ 16 |
显存非常紧张 | 可设为 32 或更高(牺牲训练速度) |
它表示在训练过程中,每隔多少个 step 保存一次模型的当前状态(权重、优化器状态等),默认值 500
通俗地说:
假设你设置:
"save_steps": 100
那么:
场景 | 推荐save_steps值 |
---|---|
小数据集 / 快速实验 | 50 ~ 100 |
中等规模训练 | 500 ~ 1000 |
大规模预训练任务 | 1000 ~ 10000 |
需要频繁备份 | 设置为较小值(如 50) |
它表示在整个训练过程中最多保留多少个模型检查点(checkpoint),超出部分会被自动删除
通俗地说:
save_steps
步),都会生成一个 checkpoint;save_total_limit = 2
,那么最多只保留最近的两个模型文件;它用于指定在启用梯度检查点时的一些高级选项,通常是为了进一步节省显存(GPU 内存)占用,默认为 None
这是一个深度学习训练优化技术,它的核心思想是:
目标 | 建议做法 |
---|---|
节省内存(显存不够) | 启用gradient_checkpointing |
提高训练效率 | 设置"use_reentrant": false(新版推荐) |
兼容老模型 | 设置"use_reentrant": true |
大模型微调(如 LLaMA、InternLM) | 强烈建议开启并合理配置 |
它表示每隔多少个训练步(step),就将当前的训练状态(如 loss、学习率等)打印到控制台或写入日志文件一次,默认为5
通俗地说:
它表示 PyTorch DataLoader 在加载训练或验证数据时使用的子进程数量。
通俗地说:
dataloader_num_workers
就是用来指定使用多少个这样的子进程来加速数据加载。