Recover-LoRA 技术揭秘:Edge0 如何让 4-bit 量化大模型只损失 3.9 分精度
【免费下载链接】Edge0项目地址: https://gitcode.com/gh_mirrors/ed/Edge0
Edge0是一个开源的流式 MoE(混合专家)推理框架,其中的Recover-LoRA是它的三大核心机制之一。简单说:把 35B 级大模型压缩到4-bit(int4)量化后,Edge0 通过「冻结量化基模 + FP 教师模型蒸馏训练 LoRA 适配器」的方式,恢复了 4-bit 量化损失的绝大部分——edge0-35b 平均只比 fp16 原基座低3.9 分,edge0-8b 更低2.8 分。这篇文章将带你理解它的原理、实现与真实测数据。
为什么 4-bit 量化一定会掉精度?
先讲清楚问题背景。MoE 模型(如 35B 级、256 个专家)的显存/内存消耗极大,直接 fp16 推理在消费级硬件上根本跑不动。Edge0 的做法是把专家权重压到4-bit affine 量化(group 64),整份 checkpoint 只占约 23 GB(35b 档),并配合 SSD 流式按需加载——峰值内存由「激活的专家集」而非总参数量决定(35b 档实测仅 ≈2.9 GiB)。
但 4-bit 量化的代价是真实的:16 bit → 4 bit,每个权重的表示空间缩小 16 倍,模型行为会系统性漂移。行业里常见的补救办法是把 LoRA 训完合并回权重,但这要求反量化→合并→重新量化,一旦基模是只读的 int4 存储,这条路就断了。
Recover-LoRA 原理:冻结 int4 基模,用 LoRA 补偿量化误差
Recover-LoRA 的核心思路只有一句话:
int4 基模保持逐字节不变(frozen),另训一组 fp16 低秩适配器(LoRA),用 FP 教师模型蒸馏的方式,把量化导致的输出漂移「补」回来。
具体到实现(见 python/src/edge0/adapters/lora.py),每个被适配的线性层被包成一条并行的残差通路(parallel delta path):
y = base(x) + scale * ((x @ A.T) @ B.T) # scale = alpha / rbase(x)是原生的 4-bit 量化矩阵乘法,不做反量化、不做重量化;A(形状[r, in])与B(形状[out, r])是训练好的 fp16 小矩阵,默认r=16, alpha=32.0(见 docs/models/edge0-35b.md 的 LoRA 参数表);- 数学上它与「合并后的权重」完全等价,但物理上从不触碰基模字节。
适配器以标准.safetensors文件分发(键名<target>.lora_A/<target>.lora_B),与基模放在同一目录,AutoEngine.from_pretrained()会自动加载——这就是框架文档中强调的「一份只读基模服务多套适配器」:升级只需替换适配器文件,基模不动、不 merge。
实测:4-bit + Recover-LoRA 只落后 3.9 分
以下是官方用 OpenCompass 在完全相同设置下测得的结果(满分 100):
| 评测集 | edge0-35b(int4) | Qwen3.6-35B-A3B(fp16) | edge0-8b(int4) | Ling 3.0 tiny(fp16) |
|---|---|---|---|---|
| AIME 2026 | 86.6 | 92.7 | 63.3 | 73.3 |
| HumanEval | 90.9 | 95.1 | 91.5 | 92.7 |
| GPQA-Diamond | 79.8 | 81.8 | 70.7 | 71.2 |
| MMLU-Pro | 81.0 | 84.6 | 70.1 | 65.8 |
| IFBench | 57.9 | 61.7 | 53.9 | 60.6 |
| 平均 | 79.2 | 83.2 | 69.9 | 72.7 |
几个值得注意的信号:
- edge0-35b 平均仅落后 3.9 分,而它只有 fp16 基座 1/4 的存储体积;
- edge0-8b 在 MMLU-Pro 上反超 fp16 基座 4.3 分——Recover-LoRA 不只是「止血」,还能小幅增益;
- 代价是可感知的:数学类基准(AIME)仍是短板,蒸馏无法完全弥合 4-bit 表示的信息损失。
三步用上 Recover-LoRA(Python 框架)
- 安装框架(macOS + Apple Silicon,Python ≥3.10):
cd python python3.12 -m venv .venv && .venv/bin/pip install -e '.[dev,fetch]'- 下载模型:发布仓库把基模 checkpoint、
lora_edge0_35b.safetensors、prerouter_edge0_35b.safetensors打包在同一目录,一次下载即可运行:
.venv/bin/python scripts/fetch_models.py --tier edge0-35b --target-dir models- 直接跑:适配器与基模同目录时自动识别加载,无需任何额外配置:
edge0 serve models/edge0-35b # 起 OpenAI 兼容服务 edge0 chat models/edge0-35b --prompt "用一句话解释流式推理。"提示:缺少 LoRA/prerouter 文件时
edge0会明确报错;也可加--no-lora/--no-prerouter跑裸基模做对照实验(对照分数的差距,就是 Recover-LoRA 的净贡献)。
延伸阅读
- docs/architecture.md:整体架构与 LoRA / prerouter 的分层设计
- docs/models/edge0-35b.md 与 docs/models/edge0-8b.md:两档模型的完整参数与默认配置
- python/src/edge0/adapters/lora.py:并行 LoRA 通路的核心实现
- python/src/edge0/models/edge0_35b/:LoRA
r=16, alpha=32等默认值的来源
一句话总结:Recover-LoRA = 冻结量化基模 + 蒸馏 LoRA 补偿残差 + 永不合并,它让 4-bit 大模型在几乎不损失精度的前提下,跑进了消费级设备的内存预算。
【免费下载链接】Edge0项目地址: https://gitcode.com/gh_mirrors/ed/Edge0
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考