大模型(LLM)的训练适配(通常指微调 Fine-tuning,特别是 SFT 和 LoRA)涉及众多的超参数。这些参数的选择直接决定了训练的效果(是否收敛、是否变聪明)和效率(显存占用、训练速度)。

以下是大模型训练中最关键的适配参数详解,分为四大类:核心训练参数LoRA/PEFT 专用参数显存/硬件优化参数以及数据策略参数


一、 核心训练参数 (Core Training Hyperparameters)

这是所有深度学习训练的基础,对模型性能影响最大。

参数名称典型值 / 范围解释与建议
Learning Rate (LR)
学习率
全量微调: 1e-5 ~ 5e-5
LoRA: 1e-4 ~ 3e-4
最重要的参数。过大导致Loss震荡不收敛,过小导致训练极慢或陷入局部最优。LoRA 因为训练参数少,通常可以使用更大的学习率。
Batch Size (BS)
批次大小
64, 128, 512 (全局)Global Batch Size = per_device_batch_size gradient_accumulation num_gpus
大BS收敛更稳,但显存要求高。如果显存不够,减小单卡BS,增加梯度累积步数。
Epochs
训练轮数
SFT: 1 ~ 3 轮
预训练: 1 轮
对于高质量的指令微调数据,通常 1个Epoch就够了。过多会导致过拟合(Overfitting),模型会只会背诵数据,失去泛化能力。
LR Scheduler
学习率调度器
cosine (最常用)
linear
推荐使用 Cosine。配合 Warmup(预热),让学习率从0逐渐升到最高,再平滑下降,有助于模型稳定。
Warmup Ratio
预热比例
0.03 (3%) ~ 0.1 (10%)在训练初期防止梯度爆炸。如果是继续微调(SFT),Warmup非常重要。
Max Sequence Length
最大上下文长度
2048, 4096, 8192取决于数据长度和显存。长度翻倍,注意力矩阵计算量呈平方级增长(除非用Flash Attn)。长文本训练需要开启 Flash Attention 2。

二、 LoRA / QLoRA 专用参数 (PEFT Parameters)

目前绝大多数适配都是基于 LoRA(低秩适配)进行的,因为它极大地降低了显存需求。

参数名称典型值解释与建议
LoRA Rank (r)8, 16, 64, 128秩的大小。决定了可训练参数量。
一般任务 r=816 足够。
如果是复杂逻辑/数学任务,建议 r=64 或更高。
LoRA Alphar 的 1倍 或 2倍缩放因子。通常设置为 Rank 的2倍(如 r=64, alpha=128)。它决定了新增权重对原模型权重的影响力度。
Target Modules
目标模块
q_proj, v_proj
all-linear
非常关键
最省显存:仅微调 q_proj, v_proj(Attention部分)。
效果最好:微调所有线性层(gate_proj, up_proj, down_proj 等),即 all-linear,但这会增加显存和参数量。
LoRA Dropout0.05 ~ 0.1防止过拟合。数据量少时建议设为 0.1。

三、 显存与硬件优化参数 (Hardware Optimization)

这些参数不直接改变模型智能程度,但决定了你能否在有限的显卡上跑起来。

参数名称建议设置解释
Precision (精度)bf16 (首选) > fp16A100/A800/H800/4090 等新卡务必用 BF16,能防止训练溢出(NaN)。旧卡(V100/2080ti)只能用 FP16。
Gradient Accumulation
梯度累积
1, 2, 4, 8...显存救星。如果单卡显存只能跑 Batch Size=1,你可以设置累积16次,等效 Batch Size=16。
Gradient Checkpointing
梯度检查点
True (开启)显存救星。以时间换空间。开启后可节省约 50%-70% 的显存,但训练速度变慢约 20%。训练长文本时必开。
Flash Attention 2True (开启)极大加速训练并节省显存,特别是 Context Length > 2048 时。需要 Ampere 架构以上显卡。
Optimizeradamw_torch
paged_adamw_32bit
显存极度紧张时,使用 QLoRA 配合 paged_adamw_8bit 优化器,可将优化器状态显存占用降到极低。

四、 数据与损失函数策略 (Data & Loss Strategy)

  1. Prompt Masking (提示词遮蔽) / Loss on Target Only:

    • 在 SFT 过程中,必须只计算“回答(Completion)”部分的 Loss,而将“提问(Prompt)”部分的 Loss 遮蔽掉(设为 -100)。
    • 如果计算了提问部分的 Loss,模型会倾向于模仿提问而不是回答,导致只会复读。
  2. Packing (数据打包):

    • 将多条短数据拼接到一个 Max Sequence Length 中训练。
    • 作用: 极大提升训练效率(速度快几倍)。需确保使用支持 Packing 的训练框架(如 LLaMA-Factory 或 Axolotl),否则会造成样本间干扰。

五、 实战配置模版参考

假设你使用 Llama-3-8B 进行 LoRA 微调,显存 24G (RTX 3090/4090),以下是一套稳健的起步参数

# 模型参数
model_name: "Llama-3-8b"
precision: "bf16"                # 30系/40系显卡推荐 BF16

# LoRA 参数
lora_r: 16                       # 秩
lora_alpha: 32                   # alpha = 2 * r
lora_dropout: 0.05
lora_target_modules: "all-linear" # 效果优于仅微调 q,v

# 训练超参
learning_rate: 2e-4              # LoRA 学习率通常比全量微调大
lr_scheduler_type: "cosine"
warmup_ratio: 0.05
num_train_epochs: 3              # 数据少于1万条建议3轮,多于10万条建议1轮

# 显存优化
per_device_train_batch_size: 4   # 单卡BS,根据显存调整,爆显存就调小
gradient_accumulation_steps: 4   # 累积步数,保证 全局BS = 4*4*GPU数 = 16~64
gradient_checkpointing: true     # 开启以节省显存
max_seq_length: 4096             # 上下文长度

# 其他
logging_steps: 10
save_strategy: "epoch"
optim: "adamw_torch"

六、 常见问题与调优方向

  1. Loss 不下降 / 下降极慢:

    • 原因: 学习率太小、数据质量太差、Prompt 格式错误(模型看不懂指令结构)。
    • 对策: 增大 LR(如从 1e-5 提至 2e-4),检查数据格式化模板。
  2. Loss 迅速降为 0 或 NaN:

    • 原因: 学习率太大(梯度爆炸)、FP16溢出。
    • 对策: 减小 LR,开启 bf16,或者调大 Warmup 步数。
  3. 灾难性遗忘 (Catastrophic Forgetting):

    • 现象: 微调后模型学会了新任务,但原来的通用能力(如写代码、逻辑推理)变废了。
    • 对策: 减小 LR,减少 Epochs,或者在训练数据中混入 10%~20% 的通用数据集(Replay Buffer)。
  4. 复读机现象 (Repetition):

    • 原因: 训练数据中包含大量重复文本,或者没有正确 Mask 掉 Prompt 部分的 Loss。

标签: none

添加新评论