其他
配置 LoRA/QLoRA…
在已确定用 LoRA/QLoRA 做 SFT 后,按最佳实践生成可直接消费的适配器配置(target_modules、rank、alpha、学习率、批大小、Unsloth 默认值)。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 47/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 50/100 ×0.15
适用场景
配置 LoRA/QLoRA 监督微调超参通用
解决思路
- 目标模块选 all-linear,而非只选 attention:target_modules = ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],其中 MLP 层(gate_proj、up_proj、down_proj)最关键。
- lora_alpha 固定取 2 * r,由 rank 推导,不要独立手调 alpha。
- LoRA 学习率约为等效全量微调学习率的 10 倍;QLoRA 标准起点为 2e-4。
- 按任务选 rank:RL(GRPO/RLVR 适配器)1–32;通用默认 16–32;大规模 SFT 最高约 256。只有低 rank 在留出评估上明显欠拟合时才升一档,不要默认上调。
- 保持有效批大小(effective batch size)低于 32,该配方在此规模下验证过。
- 使用 Unsloth 默认值:lora_dropout=0(优化内核路径假设零 dropout)、bias="none"、use_gradient_checkpointing="unsloth"(比不检查点省约 30% VRAM)、optim="adamw_8bit"、固定 random_state(如 3407)以保证 LoRA 初始化可复现。
- 在 get_peft_model 调用中一并传入上述参数,例如 r=32、lora_alpha=64、lora_dropout=0、bias="none"、use_gradient_checkpointing="unsloth"、random_state=3407。
- 方法选择默认:在演示数据上适配行为用 LoRA;基座模型在目标 rank 下放不进 bf16 时用 QLoRA;注入密集新领域知识用全量微调;不确定时先用 LoRA,仅当显存逼迫才升级到 QLoRA。
- QLoRA = NF4 量化的冻结基座权重 + BF16 适配器;显存收益来自量化基座而非适配器本身。
- 全量微调不是默认选项,仅用于需要在权重层面改变模型知识的密集知识注入。
- 在 DGX Spark 上若 QLoRA OOM,先尝试等效 bf16 LoRA 运行,而不是继续缩小 QLoRA;bitsandbytes 反量化缓冲区在加载时会瞬时飙升。
- 避免 fp16 发散:在支持 BF16 的硬件上强制 bf16=True,不要退回 fp16;先用 python -c "import torch; print(torch.cuda.is_bf16_supported())" 检查硬件支持。
- 避免在小数据集上用过高 rank(如为大规模 SFT 选的最高约 256),否则会记忆而非泛化;按 Rank by Task 表匹配 rank。
- 显存紧张时不要删减 target_modules:gate_proj/up_proj/down_proj 的适配器参数只占模型总量很小一部分,删掉几乎不省显存但明显损害质量;应改用 QLoRA 或降低 rank/批大小/打包长度。
- 当出现 loss 尖峰、平台期或记忆化时,先对照本配方检查配置,再调试训练循环本身。
适用边界 · 注意事项
- 数据形态不是演示(SFT),而是偏好对或可验证奖励信号时(应走其他路由)。
- 需要注入密集新领域知识、目标是在权重层面改变模型所知时(应使用全量微调)。
- 数据集规模不足以支撑所选高 rank 时,不要使用大规模 SFT 的高 rank 设置。