大模型微调参数
这是一个非常核心的问题。LLaMA-Factory 的 WebUI 把微调过程中所有繁杂的参数都变成了可视化的选项,我们来逐一详细解读这些参数,特别是**训练(Train)**选项卡下的核心设置。我会按照 WebUI 的布局,从上到下分成几个模块来讲解。
这是一个非常核心的问题。LLaMA-Factory 的 WebUI 把微调过程中所有繁杂的参数都变成了可视化的选项,我们来逐一详细解读这些参数,特别是**训练(Train)**选项卡下的核心设置。
我会按照 WebUI 的布局,从上到下分成几个模块来讲解。
1. 模型与方法 (Model & Method)
这个区域决定了你要用哪个基础模型,以及用什么方式来训练它。
-
模型名称 (Model Name / model_name_or_path)
-
作用:指定你要微调的基础大模型。
-
选项:可以是从 Hugging Face Hub 上拉取的模型 ID(例如 meta-llama/Llama-3-8B-Instruct),也可以是你本地已经下载好的模型文件夹路径。这是整个微调工作的起点。
-
-
微调方法 (Finetuning Method / finetuning_type)
-
作用:选择训练模型的方式,这直接决定了对硬件资源的需求和训练效率。
-
核心选项:
-
lora: (最常用,推荐) 低秩适应(Low-Rank Adaptation)。只训练一小部分新增的“适配器”参数,而模型主体部分保持冻结。
-
优点:显存占用极小,训练速度快,可以让你在消费级显卡(如 24G 显存的 3090/4090)上微调大模型。训练结果是一个几十到几百 MB 的小文件。
-
缺点:性能可能略逊于全量微调,但对于大多数任务来说已经足够好。
-
-
full: 全量微调。训练模型的所有参数。
-
优点:理论上能达到最好的微调效果。
-
缺点:需要巨大的显存和计算资源(例如,微调 7B 模型至少需要 4-8 张 A100/H100 高端显卡),普通用户无法承担。
-
-
pt: 预训练(Pre-training)。用于在你的专业领域数据上进行持续预训练,让模型学习新知识,而不是学习对话格式。
-
-
-
量化等级 (Quantization Bit / quantization_bit)
-
作用:通过降低模型权重的精度来减少显存占用。这是在小显存上运行大模型的关键技术。
-
选项:
-
None: 不量化,使用半精度(FP16/BF16)。显存占用最高,但精度也最高。
-
8-bit: 8比特量化。显存占用减半,性能损失很小。
-
4-bit: 4比特量化。(QLoRA 的核心) 显存占用降至原先的 1/4,性能损失可接受。通常与 LoRA 配合使用,称为 QLoRA,是消费级显卡微调的主流方案。
-
-
-
模板 (Template / template)
-
作用:极其重要! LLM 在预训练时被教导要遵循一种特定的对话格式。这个模板的作用就是将你的数据集(指令、输入、输出)转换成模型能“看懂”的格式。
-
选项:
-
default: LLaMA-Factory 会尝试根据模型名称自动匹配模板。大多数情况下这个就够了。
-
llama3, qwen, chatml 等:如果自动匹配不准,或者你有特殊需求,可以手动指定。选错模板会导致模型无法正确理解指令,微调效果会很差。
-
-
-
RoPE 缩放 (RoPE Scaling)
-
作用:用于扩展模型的上下文窗口长度。比如一个原生支持 2048 长度的模型,可以通过 RoPE 缩放技术让它处理 8192 甚至更长的文本。如果你不处理超长文本,保持 None 即可。
-
2. 数据集 (Dataset)
这个区域用来选择和配置你的训练数据。
-
数据集 (Dataset / dataset)
-
作用:选择用于训练的数据。
-
选项:你可以选择项目内置的多个数据集(如 alpaca_zh, sql_create_context),也可以在 data/dataset_info.json 中配置你自己的本地数据集(通常是 JSON 或 CSV 文件)。支持多选。
-
-
截止长度 (Cutoff Length / cutoff_len)
-
作用:设置模型处理的序列最大长度。任何超过这个长度的样本都会被截断。
-
影响:这个值直接影响显存占用。值越大,需要的显存越多。你需要根据你的任务和显卡显存来权衡。通常设置为 1024, 2048, 4096 等。
-
-
测试集大小 (Dev Size / dev_size)
-
作用:从训练数据中分出多大比例作为验证集。验证集不参与训练,只用来在训练过程中评估模型表现,以判断是否过拟合。一般设置为 0.1 (10%) 或更小。
-
3. 训练参数 (Training Arguments)
这是微调过程中的核心超参数,直接影响模型的最终效果和训练成本。
-
学习率 (Learning Rate / learning_rate)
-
作用:模型参数更新的步长。这是最重要的超参数之一。
-
建议:对于 LoRA 微调,常见值是 5e-5 到 1e-4。对于全量微调,通常更小,如 2e-5。
-
-
训练轮数 (Num Train Epochs / num_train_epochs)
-
作用:整个数据集被完整训练的次数。
-
建议:对于指令微调,通常 1-3 个 epoch 就足够了。太多轮次容易导致模型过拟合,只会“死记硬背”训练数据。
-
-
批处理大小 (Batch Size / per_device_train_batch_size)
-
作用:每次向 GPU 投喂多少个样本进行计算。
-
影响:这是另一个直接影响显存占用的关键参数。值越大,需要的显存越多,但训练通常更稳定。你需要根据你的显存大小,尽可能设置一个较大的值(通常是 2 的幂,如 1, 2, 4, 8)。
-
-
梯度累积步数 (Gradient Accumulation Steps / gradient_accumulation_steps)
-
作用:低显存下的神器! 它允许你实现一个大的“有效批处理大小”,而不需要实际占用那么多显存。
-
原理:计算 N 步的梯度,但不更新模型,而是将这些梯度累加起来,到第 N 步时再用累加的梯度更新一次模型。
-
公式:有效批处理大小 = 批处理大小 × 梯度累积步数。例如,你的显存只够设置 Batch Size = 2,但你希望达到 Batch Size = 16 的效果,就可以设置 Gradient Accumulation Steps = 8。
-
-
学习率调度器 (LR Scheduler / lr_scheduler_type)
-
作用:在训练过程中动态调整学习率。
-
建议:cosine 是一个非常常用且效果很好的选择。它会让学习率先缓慢预热,然后像余弦曲线一样平滑下降。
-
-
混合精度 (Mixed Precision / fp16 or bf16)
-
作用:使用 16 位浮点数(半精度)进行计算,可以大幅提升训练速度并降低显存占用。
-
选项:
-
fp16: 适用于大多数现代 GPU。
-
bf16: 适用于较新的 GPU(NVIDIA Ampere 架构及以上,如 A100, 30xx, 40xx 系列),数值稳定性更好。
-
-
4. LoRA 参数 (LoRA Arguments)
如果你在第一部分选择了 lora 微调方法,这个区域的参数才会生效。
-
LoRA 秩 (LoRA Rank / lora_rank)
-
作用:LoRA 适配器矩阵的维度。它决定了 LoRA 层的参数量。
-
影响:rank 越大,可训练参数越多,理论上拟合能力越强,但显存占用也会增加。
-
建议:通常从 8, 16, 32, 64 中选择。对于大多数任务,16 或 32 是一个很好的起点。
-
-
LoRA 透明度 (LoRA Alpha / lora_alpha)
-
作用:LoRA 层的缩放因子。
-
建议:一个常见的做法是将其设置为 rank 的两倍(例如 rank=16, alpha=32)。
-
-
LoRA 作用模块 (LoRA Target Modules / lora_target)
-
作用:指定在模型的哪些部分应用 LoRA 适配器。
-
建议:通常应用在注意力机制的查询(q_proj)和值(v_proj)矩阵上。你可以手动指定,也可以直接填写 all,让 LLaMA-Factory 自动寻找模型中所有适合应用 LoRA 的线性层。
-
新手推荐配置 (QLoRA)
如果你是新手,使用消费级显卡(例如 RTX 3090/4090 24G),一个非常稳妥的入门配置是:
-
模型与方法:
-
模型名称: 选择一个 7B 或 8B 的模型,如 meta-llama/Llama-3-8B-Instruct
-
微调方法: lora
-
量化等级: 4-bit
-
模板: default (或 llama3 for Llama-3)
-
-
数据集:
-
数据集: alpaca_zh (作为第一个测试)
-
截止长度: 1024 (如果显存够,可以尝试 2048)
-
-
训练参数:
-
学习率: 1e-4
-
训练轮数: 3.0
-
批处理大小: 2 (根据你的显存调整)
-
梯度累积步数: 8 (这样有效批大小就是 16)
-
混合精度: bf16 (如果你的显卡支持) 或 fp16
-
-
LoRA 参数:
-
LoRA 秩: 16
-
LoRA 透明度: 32
-
LoRA 作用模块: all
-
配置好这些参数后,点击“开始”按钮,就可以开始你的第一次微调了!
更多推荐
所有评论(0)