LLaMA-Factory 模型微调指令参数详解

llamafactory-cli train \
--stage sft \
--do_train True \
--model_name_or_path deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B \
--preprocessing_num_workers 16 \
--finetuning_type lora \
--template deepseek3 \
--flash_attn auto \
--dataset_dir data \
--dataset identity \
--cutoff_len 2048 \
--learning_rate 5e-05 \
--num_train_epochs 3.0 \
--max_samples 100000 \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--max_grad_norm 1.0 \
--logging_steps 5 \
--save_steps 100 \
--warmup_steps 0 \
--packing False \
--report_to none \
--output_dir saves\DeepSeek-R1-1.5B-Distill\lora\train_2025-03-26-09-56-13 \
--bf16 True \
--plot_loss True \
--trust_remote_code True \
--ddp_timeout 180000000 \
--include_num_input_tokens_seen True \
--optim adamw_torch \
--lora_rank 8 \
--lora_alpha 16 \
--lora_dropout 0 \
--lora_target all
一、模型选择与路径设置
- 模型名称与路径:选择模型为Qwen2.5-7B-Instruct,建议下载后填入绝对路径,避免使用相对路径,因其难以把控。在Hugging Face或ModelScope路径下下载模型,下载后存储在相对路径
root/.cache/hub
或root/.cache/modelscope
下。 - 输出路径:训练完成后,LoRA训练生成的小块会存储在指定输出路径。该路径是相对路径,基于启动命令
llamafactory-cli
的位置,一般在llama_factory
同级目录下的saves
文件夹中,自动生成的路径包含当前点击预览命令的时分秒。若在界面执行,修改路径需在相应位置操作;若在后端执行,则可自由修改 。
二、训练参数设置
- 基本训练参数
- 训练阶段与训练开关:
stage sft
指定训练阶段为监督微调(SFT),do_train True
表示进行训练,false
则不训练。此设置在框架中较为灵活,可用于在界面点击运行,也可将命令复制到shell
或yaml
文件中在后端执行 。 - 数据处理线程数:
preprocessing_num_workers
指定处理数据时使用的线程数,调大耗费资源但处理速度快,调小则相反。通常设置为总核数减1或减2 。 - 数据集路径与名称:
dataset_dir
指定数据集目录,为相对路径;dataset
指定使用的数据集,多个数据集用英文逗号分隔 。 - 输入长度与样本数量:
cutoff_len
指定输入序列的最大长度,调大会占用更多资源但能保留更多上下文信息,调小则节省资源但可能导致上下文不连贯;max_samples
指定最多使用的样本数量,增大样本数可提供更多训练信号,但可能导致过拟合,减少样本数可能导致欠拟合 。
- 训练轮数与批次大小
- 训练轮数:
num_epochs
根据数据集大小调整训练轮数,如数据量较大,3轮即可;数据量较小,可适当增加轮数,但可能存在过拟合风险 。 - 批次大小:
batch_size
批次大小影响模型学习效果和资源消耗。批次大,一次学习内容多但资源需求大;批次小,每次学习内容少但资源消耗小,学习次数增多。需根据服务器资源调整,若仅作测试,可将批次大小设为1 。
- 梯度与学习率相关参数
- 梯度累积步数:
gradient_accumulation_steps
指定梯度累积步骤数,用于模拟更大或更小的批次大小,可增加训练稳定性,但会增加内存使用和训练时间 。 - 学习率:
learning_rate
指定学习率,如5e-05
表示0.00005 ,e
后数字表示小数点往前移动的位数。学习率过大可能导致模型在损失函数最小值附近震荡或发散,过小则容易欠拟合 。 - 学习率调度器:
lr_scheduler_type
指定学习率调度器类型,如cosine
(余弦退火)适合训练周期较长的任务,可避免训练后期震荡;Constant
适合模型已预训练只需微调的任务 。 - 学习预热步数:
warmup_steps
指定学习率预热步数,默认值为0 ,一般根据个人需求设置,多数情况下可使用默认值 。
- 其他训练相关参数
- 日志记录与模型保存:
logging_steps
指定每多少步记录一次日志,步数大记录频率低、占用资源少,步数小则记录更详细、占用资源多;save_steps
指定每多少步保存一次模型检查点,同样存在频率与资源占用的平衡问题 。 - 打包技术:
packing
指定是否使用打包技术,通常不使用,因其虽可提高训练效率,但会增加数据处理复杂性,初期操作建议保持默认 。 - 报告方式:
report_to
指定报告训练进度的方式,none
表示不报告,若设置为如TensorBoard
的地址和端口,可查看更丰富的张量、损失率等信息 。
- 优化器与精度参数
- 混合精度训练:
fp16 True
指定使用混合精度训练,若选择fp32
,在命令中不会显示相关设置;选择其他精度(如fp8
、bf16
等)会正常显示 。 - 优化器类型:
optim adamw_torch
指定优化器类型为Adamw
,此设置在其他参数一栏中以kv
形式存在,属于进阶操作,初期不建议修改,以免报错 。
- LoRA相关参数
- 微调类型:
finetuning_type lora
指定微调类型为LoRA(Low - Rank Adaptation),也可选择如冻结等其他类型 。 - LoRA秩:
lora_rank
指定LoRA的秩,如设置为8 ,并非越大越好,需根据实际效果调整,秩越小参数量和计算开销越小 。 - 比例因子:
lora_alpha
指定LoRA的比例因子,用于缩放低秩矩阵的贡献,值越大微调效果可能越强,但也可能导致过拟合 。 - dropout概率:
lora_dropout
指定LoRA的dropout概率,调大增加模型泛化能力、减少过拟合,调小则减少正则化、可能提高模型表达能力 。 - 目标层:
lora_target all
指定LoRA的目标层为所有层,也可指定特定层(如q_proj
、v_proj
、k_proj
、fc
层)进行调整 。
- 其他配置参数
- 模板选择:
template qwen
根据模型类型选择模板,若为基座大模型可选择default
,若为当前系列模型则选择对应模板,若没有合适模板也可注册新模板 。 - 加速选项:
flash_attn auto
在0.9版本中增加了加速内容,一般选择auto
即可,若熟悉transformer
结构,可自定义选择 。 - 绘制损失曲线:
plot_loss True
指定绘制损失曲线,曲线横轴表示训练迭代次数,纵轴表示损失率。通过观察曲线,若一直波动说明模型学习效果不佳;若快速降低后不再上升,可能出现过拟合 。
三、训练过程与监控
- 保存训练参数:完成参数设置后,可点击保存训练参数,系统会在启动命令相对目录下的
config
文件夹中,根据当前日期生成命令参数文件 。 - 训练启动与显存使用:点击开始训练后,可观察到后端模型对显存的使用情况。如使用7B模型时,若设置的批次大小不合理,可能导致显存占用过高。若资源不足,可将批次大小设置为1 。
- 训练时间与结果验证:本次训练验证使用了约30分钟完成对训练集的验证 。
四、llamafactory微调参数及作用汇总
参数名称 | 参数作用 | 取值建议及注意事项 |
---|
stage | 指定训练阶段,如监督微调(SFT) | 通常根据任务需求选择,微调任务多选用SFT |
do_train | 确定是否进行训练,True 为训练,False 为不训练 | 根据实际需求设置,若仅查看配置效果可设为False |
model_name_or_path | 指定预训练模型的路径 | 建议使用绝对路径,确保模型路径准确无误 |
output_dir | 指定训练结果和日志的输出目录 | 为相对路径,基于启动命令位置,自动生成包含时间的路径,可按需修改 |
preprocessing_num_workers | 设定预处理数据时使用的线程数 | 一般设为总核数减1或减2,根据服务器资源和处理速度需求调整 |
dataset_dir | 指定数据集所在目录 | 为相对路径,需确保数据集路径正确 |
dataset | 指定使用的数据集,可多个并用逗号分隔 | 根据任务选择合适数据集,注意数据集格式及兼容性 |
cutoff_len | 规定输入序列的最大长度 | 调大占用更多资源但保留更多上下文,调小节省资源但可能丢失上下文,根据模型性能和资源情况调整 |
max_samples | 指定最多使用的样本数量 | 增大可提供更多训练信号,但可能过拟合;减小可能欠拟合,需根据数据集和模型情况调整 |
gradient_accumulation_steps | 指定梯度累积步骤数,模拟更大或更小批次大小 | 增加可提高模型稳定性,但会增加内存使用和训练时间,根据硬件资源和训练需求设置 |
learning_rate | 设定学习率,如5e-05 表示0.00005 | 学习率过大可能导致模型震荡或发散,过小易欠拟合,需根据模型训练情况微调 |
lr_scheduler_type | 指定学习率调度器类型,如cosine (余弦退火)、Constant 等 | cosine 适合长周期训练,避免后期震荡;Constant 适合已预训练只需微调的任务,根据训练场景选择 |
warmup_steps | 指定学习率预热步数 | 默认值为0,一般根据个人需求设置,多数情况可使用默认值 |
logging_steps | 指定每多少步记录一次日志 | 步数大记录频率低、占用资源少;步数小记录更详细、占用资源多,根据需求平衡 |
save_steps | 指定每多少步保存一次模型检查点 | 与logging_steps 类似,需平衡保存频率和资源占用 |
packing | 指定是否使用打包技术 | 通常不使用,使用可提高训练效率但增加数据处理复杂性,初期建议保持默认 |
report_to | 指定报告训练进度的方式,如none 、TensorBoard 地址和端口等 | none 表示不报告,设置为TensorBoard 相关信息可查看更多训练信息 |
fp16 | 指定是否使用混合精度训练 | 选择fp16 开启,选择fp32 在命令中不显示相关设置,其他精度(如fp8 、bf16 等)正常显示 |
optim | 指定优化器类型,如adamw_torch | 属于进阶操作,初期不建议修改,以免报错,根据模型和任务选择合适优化器 |
finetuning_type | 指定微调类型,如lora 、freeze 等 | 根据需求选择,lora 为低秩适应微调,可有效减少参数量和计算量 |
lora_rank | 指定LoRA的秩,如设置为8 | 并非越大越好,需根据实际效果调整,秩越小参数量和计算开销越小 |
lora_alpha | 指定LoRA的比例因子 | 用于缩放低秩矩阵贡献,值越大微调效果可能越强,但可能导致过拟合 |
lora_dropout | 指定LoRA的dropout概率 | 调大增加模型泛化能力、减少过拟合;调小减少正则化、可能提高模型表达能力 |
lora_target | 指定LoRA的目标层,如all 、q_proj 、v_proj 、k_proj 、fc 等 | all 表示所有层,也可指定特定层进行调整,根据模型结构和微调需求选择 |
template | 根据模型类型选择模板 | 若为基座大模型可选择defOT ,当前系列模型选择对应模板,无合适模板可注册新模板 |
flash_attn | 指定是否使用Flash Attention,如auto | 一般选择auto ,若熟悉transformer 结构,可自定义选择,以优化训练速度 |
plot_loss | 指定是否绘制损失曲线 | 设置为True 绘制,通过观察曲线可了解模型训练效果,判断是否过拟合或欠拟合 |
ddp_timeout | 指定分布式训练的超时时间 | 更大的超时时间可以给进程更多的时间来同步,避免因网络延迟或计算差异导致的训练中断;设置过小,可能因为某些网络动荡而造成训练中断。具体取值需根据网络环境和训练需求调整,如网络不稳定时可适当增大该值 |
以下是 llama_factory
中补充的参数的表格总结,方便查阅和使用:
补充参数表格
参数类别 | 参数名 | 类型 | 默认值 | 描述 |
---|
模型保存与加载 | save_best_model | bool | False | 是否保存验证集上表现最好的模型。 |
| resume_from_checkpoint | str | None | 从指定的检查点恢复训练。 |
| save_format | str | pytorch | 模型保存的格式(如 pytorch 或 huggingface )。 |
数据增强与正则化 | data_augmentation | bool | False | 是否启用数据增强。 |
| weight_decay | float | 0.0 | 权重衰减系数,用于 L2 正则化。 |
| dropout_rate | float | 0.1 | Dropout 概率,用于防止过拟合。 |
硬件与性能优化 | gradient_checkpointing | bool | False | 是否启用梯度检查点,以减少 GPU 内存占用。 |
| local_rank | int | 0 | 分布式训练时的本地 GPU 编号。 |
| bf16 | bool | False | 是否使用 BF16 混合精度训练。 |
评估与验证 | eval_steps | int | 500 | 每多少步进行一次验证。 |
| eval_ratio | float | 0.1 | 验证集占训练集的比例。 |
| metrics | str | accuracy | 评估模型性能的指标(如 accuracy 或 f1 )。 |
日志与调试 | debug | bool | False | 是否启用调试模式,输出更详细的日志。 |
| log_dir | str | ./logs | 日志文件的保存目录。 |
| disable_progress_bar | bool | False | 是否禁用训练进度条。 |
LoRA 微调高级参数 | lora_init | str | normal | LoRA 参数的初始化方式(如 normal 或 zero )。 |
| lora_modules | str | attention | 指定 LoRA 微调的模块(如 attention 或 feedforward )。 |
| lora_learning_rate | float | 1e-4 | LoRA 参数的独立学习率。 |
模板与提示 | prompt_template | str | default | 使用的提示模板(如 default 或 custom )。 |
| template_args | str | {} | 提示模板的参数,以 JSON 格式提供。 |
其他高级参数 | max_steps | int | None | 最大训练步数,优先级高于 num_epochs 。 |
| seed | int | 42 | 随机种子,用于确保实验可复现。 |
| disable_cache | bool | False | 是否禁用数据缓存。 |