掘金 人工智能 20小时前
ms-swift 部分命令行参数说明
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入浅出地解析了大模型训练中关键参数的含义及其影响,包括num_train_epochs、per_device_train_batch_size、learning_rate、warmup_ratio、split_dataset_ratio、lora_rank、lora_alpha、use_chat_template、target_modules、gradient_accumulation_steps、save_steps、save_total_limit、gradient_checkpointing_kwargs、logging_steps、dataloader_num_workers,旨在帮助读者更好地理解和优化大模型训练过程。

⏰ **训练周期与数据遍历:** `num_train_epochs`定义了模型完整遍历训练数据的次数,一个epoch指对所有训练样本完成一次“看”与“学”的过程。设置多个epoch有助于模型学习更深入的知识,但过多的epoch可能导致过拟合。

⚙️ **批量大小与设备负载:** `per_device_train_batch_size`指定了每个设备上每次训练的样本数量,总的batch size取决于设备数量。batch size影响训练速度和模型效果,过小可能不稳定,过大可能导致OOM或泛化能力下降。

📈 **学习率与梯度调整:** `learning_rate`决定了模型参数在每次更新时的调整幅度。合适的学习率能使模型快速收敛。`warmup_ratio`则用于在训练初期逐渐增加学习率,提高训练稳定性。

📊 **数据集划分与模型保存:** `split_dataset_ratio`控制训练集和验证集的划分比例,而`save_steps`和`save_total_limit`分别控制模型保存的频率和数量,方便训练过程中的模型管理和性能评估。

💡 **LoRA与梯度累积:** `lora_rank`和`lora_alpha`是LoRA(低秩适应)中的关键参数,控制适配矩阵的复杂度和缩放比例。`gradient_accumulation_steps`则通过累积梯度来模拟更大的batch size,从而提高训练效率。

参考链接

swift.readthedocs.io/zh-cn/lates…

chat.qwen.ai/s/b68589f3-…

num_train_epochs

训练的epoch数,默认为3

假设你有 1000 条训练样本,并且设置了:

num_train_epochs = 3

这意味着:

为什么需要多个 epoch?

per_device_train_batch_size

每个设备训练批量大小,在GRPO中,指 completion 的批次大小

假设你设置:

perDeviceTrainBatchSize = 16

为什么这个参数重要?

方面影响
训练速度越大的 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 效果)

learning_rate

学习率,全参数默认为1e-5,LoRA等tuners为1e-4

更通俗的解释

公式大致如下:

newParameter = oldParameter - learningRate * gradient

🔍 学习率的影响:

学习率大小效果问题
太大更新步子大,训练快容易跳过最优解,导致震荡或发散
太小更新步子小,稳定但慢收敛慢,可能陷入局部最小值或耗时太久

建议

1. 图像分类任务(如 CIFAR-10、ImageNet)

2. 自然语言处理(NLP)任务

3. 强化学习

4. 大规模预训练模型微调(Fine-tuning)

warmup_ratio

它表示在整个训练过程中,有多少比例的训练步数(training steps)将被用于“学习率预热”阶段(Warmup Phase)。

通俗地讲:

公式解释:

num_warmup_steps = int(warmup_ratio * total_training_steps)

split_dataset_ratio

它表示训练集和验证集(或测试集)之间的划分比例

通常我们会将一个完整的数据集划分为:

假设你有一个包含 1000 条样本的数据集,并设置:

let splitDatasetRatio = 0.8

那么:

也就是说,这个参数控制了训练集占整个数据集的比例。

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_alpha ****是 LoRA 中用于控制适配矩阵缩放的一个超参数。

数学公式如下:

ΔW=r αAB T

其中:

假设你设置了:

那么 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 = 16lora_rank = 16,  lora_alpha = 32lora_rank = 32,  lora_alpha = 64

use_chat_template

决定是否在推理或训练过程中自动应用模型内置的“对话格式模板”来组织输入文本

例如,你传入如下对话历史:

[ {"role": "user", "content": "介绍一下你自己"}, {"role": "assistant", "content": "我是 InternLM,由上海人工智能实验室开发的语言模型..."}, {"role": "user", "content": "你能帮我写一篇关于夏天的文章吗?"}]

如果启用了 use_chat_template = true,系统会自动将这段对话转换为类似下面的字符串:

<|User|>: 介绍一下你自己<|Assistant|>: 我是 InternLM...<|User|>: 你能帮我写一篇关于夏天的文章吗?

参数值说明:

含义
true使用模型自带的 chat template 自动格式化对话输入
false不使用模板,需要手动构造完整的 prompt

target_modules

找不到更多的信息

是用来指定哪些模块将接入 LoRA 或其他 tuner 的核心参数

默认为all-linear. 在LLM和多模态LLM中,其行为有所不同. 若是LLM则自动寻找除lm_head外的linear并附加tuner,若是多模态LLM,则默认只在LLM上附加tuner,该行为可以被freeze_llmfreeze_vitfreeze_aligner控制。该参数不限于LoRA,可用于其他tuners。

gradient_accumulation_steps

它表示在更新模型参数之前,累计多少个 batch 的梯度后再进行一次参数更新。

通俗地说:

假设你设置如下参数:

{  "per_device_train_batch_size": 4,  "gradient_accumulation_steps": 8}

那么:

推荐值范围(根据硬件配置):

场景推荐gradient_accumulation_steps
单卡 A10 / RTX 3090 / L40(24G 显存)1 ~ 4(batch 较大时可不累积)
单卡 T4 / V100(16G 显存)4 ~ 8
单卡 RTX 3060 / 2080(12G 显存)8 ~ 16
显存非常紧张可设为 32 或更高(牺牲训练速度)

save_steps

它表示在训练过程中,每隔多少个 step 保存一次模型的当前状态(权重、优化器状态等),默认值 500

通俗地说:

假设你设置:

"save_steps": 100

那么:

推荐值范围(根据训练规模):

场景推荐save_steps
小数据集 / 快速实验50 ~ 100
中等规模训练500 ~ 1000
大规模预训练任务1000 ~ 10000
需要频繁备份设置为较小值(如 50)

save_total_limit

它表示在整个训练过程中最多保留多少个模型检查点(checkpoint),超出部分会被自动删除

通俗地说:

gradient_checkpointing_kwargs

它用于指定在启用梯度检查点时的一些高级选项,通常是为了进一步节省显存(GPU 内存)占用,默认为 None

🔍 什么是梯度检查点(Gradient Checkpointing)?

这是一个深度学习训练优化技术,它的核心思想是:

使用建议总结:

目标建议做法
节省内存(显存不够)启用gradient_checkpointing
提高训练效率设置"use_reentrant": false(新版推荐)
兼容老模型设置"use_reentrant": true
大模型微调(如 LLaMA、InternLM)强烈建议开启并合理配置

logging_steps

它表示每隔多少个训练步(step),就将当前的训练状态(如 loss、学习率等)打印到控制台或写入日志文件一次, 默认为5

通俗地说:

dataloader_num_workers

它表示 PyTorch DataLoader 在加载训练或验证数据时使用的子进程数量。

通俗地说:

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

大模型 训练参数 深度学习 LoRA 梯度累积
相关文章