SuperAPI AI 工具集

lora-qlora-recipes

智能体与模型

查看项目

更新于 10-16 07:22

技能介绍

用途:当训练数据形态为示范数据(SFT)、且路由决策已确定采用 LoRA/QLoRA 时,本技能给出适配器配置的最佳实践配方,产出经过验证的配置参数(而非自由建议),供下游训练脚本直接使用。数据集准备与质量检查属于另一技能范畴。

主要能力:规定目标模块应覆盖全部线性层,包括注意力的 q_proj、k_proj、v_proj、o_proj 以及 MLP 的 gate_proj、up_proj、down_proj,其中 MLP 层影响最大,仅针对注意力是较旧且较弱的做法。alpha 采用 lora_alpha = 2 * r 的惯例,由秩推导而非独立调参。LoRA 学习率约为等效全量微调的 10 倍,QLoRA 常用起点 2e-4。秩按任务选择:RL(GRPO/RLVR)为 1–32,通用默认 16–32,大规模 SFT 可至约 256;更高秩并非自动更好,只有在低秩在留出评估中明显欠拟合时才上调。有效批大小保持在 32 以下。

使用方式:以 Unsloth 为参考实现,示例调用为 FastLanguageModel.get_peft_model,设置 r=32、target_modules、lora_alpha=64、lora_dropout=0、bias="none"、use_gradient_checkpointing="unsloth"、random_state=3407。其默认值均有理由:零 dropout 以保留融合内核加速,bias 不启用,使用 Unsloth 版梯度检查点节省约 30% 显存,优化器用 adamw_8bit,固定随机种子保证可复现。对于 messages 形态且 assistant_only_loss=True 的对话式 SFT,应回退到普通 TRL。

适用场景与限制:在示范数据上适配行为默认选 LoRA;基座在目标秩下无法以 bf16 容纳时选 QLoRA,其内存收益来自 NF4 量化冻结基座加 BF16 适配器。全量微调仅用于注入密集新领域知识,不是默认选项。注意在非 BF16 硬件上训练易出现 fp16 发散,可用 python -c "import torch; print(torch.cuda.is_bf16_supported())" 检查;小数据集上秩过高会过拟合;为省显存删除目标模块收益甚微却损害质量。在 DGX Spark 上 QLoRA 可能因反量化缓冲峰值而比等效 bf16 LoRA 更早 OOM,此时应先尝试 bf16 LoRA 而非继续缩减 QLoRA。更多细节见 references/hyperparameters.md 与 references/unsloth-trl-mapping.md。