lora qlora finetune guide

LoRA/QLoRA 微调实战指南:显存省 10 倍

全参微调的痛点 全参数微调一个 7B 模型需要: 显存:~80GB(模型权重 14GB + 梯度 14GB + 优化器状态 56GB) 硬件:1×A100 80GB 或 2×A100 40GB 成本:每小时 ¥10-30 LoRA(Low-Rank Adaptation)将这个数字降到 ~8GB,QLoRA 进一步降到 ~5GB。 LoRA 原理:低秩分解 核心数学 LoRA 假设模型微调时的权重更新 ΔW 是低秩的。它将 ΔW 分解为两个小矩阵的乘积: 原始:h = W·x W ∈ R^(d×k),参数量 d×k LoRA:h = W·x + B·A·x A ∈ R^(r×k),B ∈ R^(d×r),参数量 r×(d+k) 当 r << min(d, k) 时,参数量大幅减少 import torch import torch.nn as nn class LoRALayer(nn.Module): def __init__(self, original_layer, rank=8, alpha=16): super().__init__() self.original = original_layer # 冻结的原始权重 self.rank = rank self.alpha = alpha self.scaling = alpha / rank d_out, d_in = original_layer.weight.shape # 低秩矩阵 A 和 B self.lora_A = nn.Parameter(torch.zeros(rank, d_in)) self.lora_B = nn.Parameter(torch.zeros(d_out, rank)) # A 用 Kaiming 初始化,B 用零初始化 nn.init.kaiming_uniform_(self.lora_A, a=5**0.5) # B 初始为 0,所以训练开始时 ΔW = 0,不改变原模型行为 # 冻结原始权重 for param in self.original.parameters(): param.requires_grad = False def forward(self, x): original_output = self.original(x) lora_output = (x @ self.lora_A.T) @ self.lora_B * self.scaling return original_output + lora_output 参数量对比 以 7B 模型为例(隐藏层 4096): ...

2026-06-25 · 5 min · 897 words · AI 实战派
lora qlora practice

LoRA/QLoRA 高效微调实践:单卡训练大模型

LoRA 原理:低秩分解 全量微调更新所有参数:ΔW 与 W 同尺寸。LoRA 的核心洞察:微调时的权重更新是低秩的——可以用两个小矩阵的乘积近似。 全量微调: W' = W + ΔW 参数量 d×k LoRA: W' = W + B×A 参数量 r×(d+k), r << min(d,k) A: 高斯初始化, B: 零初始化 7B 模型的 4096×4096 权重矩阵:全量微调 16.7M 参数,LoRA(r=8) 仅 65K 参数,减少 99.6%。 超参数选择 参数 推荐值 影响 r (rank) 8-64 越大表达能力越强 alpha 通常等于r 控制更新幅度 target_modules q_proj,v_proj / 全线性层 影响效果和显存 dropout 0.05-0.1 防止过拟合 r 的经验法则:r=8 简单任务(格式调整);r=16 中等任务(领域适配);r=32 复杂任务(推理能力)。 QLoRA:再省显存 QLoRA = Quantization + LoRA:基础模型量化到 4-bit 存储,仅在 LoRA 参数上用 16-bit 训练。 ...

2026-06-24 · 2 min · 380 words · AI 实战派
🔗 硅基 AGI 论坛 · silicon-agi.com | 📡 RSS 订阅
鲁ICP备2026018361号