【论文分享】端侧多模态如何压到 4-Bit 还不崩?解密港科大与清华新作 ProQuant 的渐进式量化与自重标注范式

在多模态大模型(MLLM,如 Qwen-VL、InternVL、LLaVA)加速走向端侧智能硬件(智能手机、车机座舱、具身机器人、AI 智能眼镜与工业边缘网关)的过程中,每一位负责模型工程化部署的软件工程师都会撞上一堵冰冷的物理现实之墙:

16-bit 浮点(BF16/FP16)模型太重了,既吃光了端侧极为拮据的板载内存(DRAM),又在端侧无风扇散热被动受限的微瓦/毫瓦级功耗下频繁触发热降频。

以一个典型的 2B~3B 端侧多模态模型为例,仅权重本身就需要 4GB~6GB 存储,加上 KV Cache 和激活值,在边缘设备上几乎无法常驻;而端侧边缘 AI 芯片(NPU / ASIC)往往只配置了低功耗的整数计算单元(INT MACs),浮点算力极为昂贵。因此,将模型做权重与激活值的“双低比特量化”(如 W4A8、W4A4)是端侧部署的必经之路。

然而,一旦将模型从 8-bit(W8A8)进一步下压到 4-bit(W4A8/W4A4),工程师们会遭遇灾难性的“量化雪崩”:

  • 小尺寸模型容错率极低:在 70B 大模型上表现良好的量化技巧,用到 2B 模型上会瞬间瘫痪;
  • 视觉认知彻底失控:直接量化后,语言生成能力尚存,但多模态图表理解与细粒度感知准确率直接归零(0%);
  • 学术界既有方案的工程落地困境:许多算法论文引入复杂的在线旋转矩阵(如 Hadamard Rotation),看似刷高了准确率,但在端侧专用芯片上却需要专门开辟硬件逻辑或引入昂贵的额外算子,带来严重的运行时延迟与硬件开销。

2026 年 11 月,来自香港科技大学(HKUST)、西北工业大学(NWPU)、中国电信人工智能研究院(TeleAI)与清华大学(Tsinghua)的联合研究团队在 arXiv 上发表了针对端侧多模态量化训练的破局之作:

论文题目:ProQuant: Progressive Quantization-aware Training for Edge MLLMs
论文作者:Yufei Xue, Yushi Huang, Jiawei Shao, Pingcheng Dong, Yonghao Tan, Shiyao Li, Kwang-Ting Cheng, Jun Zhang
论文链接:https://arxiv.org/abs/2611.08216
HTML 格式:https://arxiv.org/html/2611.08216
开源代码:https://github.com/yufeixue-ai/ProQuant/
核心成果:面向端侧多模态的低比特量化感知训练框架 ProQuant,提出自重标注(SRL)消灭数据风格偏差,首创解耦视觉与语言能力的渐进式分块激活(PBA),并在台积电 22nm 真实流片 ASIC 芯片上验证了最高 3.64× 的 Prefill 提速与 3.9× 的 Decode 稳定提速。

本文将摒弃复杂的算法公式堆砌,立足于 软件开发工程师、系统架构师与后端研发 的视角,从数据契约对齐、系统分阶段灰度调度、端侧硬件 Memory-bound / Compute-bound 物理瓶颈等工程维度,深度拆解这一极具实用价值的工程落地范式。


00. 核心痛点与工程死穴:为什么端侧多模态一量化就“双重雪崩”?

在软件工程中,遇到系统性能瓶颈,首要任务是明确其物理约束。将大模型从云端机房搬到边缘设备,我们面临的约束发生了本质变化:

1
2
3
4
5
6
7
                    【端侧设备的两大物理死穴】
│
┌───────────────────────┴───────────────────────┐
▼ ▼
1. 内存带宽与容量墙 (Memory Wall) 2. 算力与能耗墙 (Compute & Power)
• 板载 LPDDR 仅 2GB~8GB (系统与应用共享) • 无风扇被动散热,TDP 仅数瓦至十几瓦
• 内存总线位宽窄 (仅数十 GB/s vs 云端 HBM 数 TB/s) • 芯片面积受限,浮点运算单元 (FP-MAC) 极其昂贵

1. 为什么“仅量化权重(Weight-Only)”在端侧行不通?

业界很多轻量方案采用 W4A16(权重 4-bit,激活值维持 16-bit 浮点)。这种做法在 PC 端或云端 GPU 上很受欢迎,但在定制化边缘芯片(ASIC/NPU)上却是一个“伪命题”:

  • 硬件代价高昂:只要激活值依然是浮点数,芯片内部的核心乘加阵列(MAC)就必须做成浮点计算单元。而一个浮点乘加器的硅片面积和动态功耗是纯整数(INT)乘加器的数倍。
  • 双量化是硬性要求:端侧专用芯片若想追求极致性价比与能效比,必须做到权重与激活值全整型化(W4A8 或 W4A4),才能让高密度的整数计算流水线满载狂奔。

2. 传统量化方案在多模态小模型上的三大工程缺陷

flowchart TD
    subgraph P1["缺陷 1:非对称崩溃 (Asymmetric Collapse)"]
        direction TB
        M1["全精度 BF16 模型"] -->|粗暴 4-bit 量化| M2["低比特学生模型"]
        M2 -->|语言基座先验依然保留| R1["文本问答准确率 ~47%"]
        M2 -->|跨模态对齐链路瞬间崩塌| R2["图表理解 AI2D 直接归零 (0%)"]
    end

    subgraph P2["缺陷 2:数据契约漂移 (Distribution Shift)"]
        direction TB
        D1["开源 LLaVA-680K 数据集"] -->|由外部 GPT-4 标注生成| D2["偏好绝对空间坐标与刻板词句"]
        T1["目标微调模型 (如 Qwen)"] -->|天然具备宏观综合语义偏好| D3["二者监督信号内在冲突,Loss 震荡"]
    end

    subgraph P3["缺陷 3:运行时引入额外算子负债 (Runtime Overhead)"]
        direction TB
        A1["学术界旋转矩阵方案 (Hadamard/Rotation)"] --> A2["需要在网络层间动态插入在线变换算子"]
        A2 --> A3["端侧 ASIC 缺少原生硬件指令,流水线频繁停顿"]
    end

针对上述三大工程痛点,论文提出了 ProQuant(Progressive Quantization-aware Training) 框架。其核心思想可以用两句话概括:

  1. 在数据端:用模型自身的 Golden Response 重写训练集,消除风格撕裂(自重标注 SRL);
  2. 在训练管线端:像复杂系统灰度上线一样,按模块视觉敏感度分阶段激活量化,优先保住最脆弱的视觉感知路径(渐进式分块激活 PBA)。

01. 数据工程范式:自重标注(SRL)—— 用“自身先验”消除跨模型风格冲突

在分布式系统重构中,最稳妥的回归测试方案不是拿竞品服务的输出来做断言,而是先拿自己重构前的高保真基准版本录制一套“流量回放快照”。

多模态小模型的量化训练,在本质上也是一场极端恶劣条件下的模型重构。

1. 发现暗坑:开源数据集背后的“风格偏见”

目前学术界与工业界通用的多模态微调语料(如 LLaVA-680K),其标注绝大多数来源于 GPT-4。作者对比了 GPT-4 与目标模型(Qwen3-VL-2B-Instruct)在面对完全相同图像时的生成文本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
【输入图像】:一张桌子上摆放着各式各样、烘焙精致的花式甜甜圈展示盘
────────────────────────────────────────────────────────────────────────
【GPT-4 标注风格】:强调绝对机械空间与物理坐标
"The image features an assortment of many different types of pastries...
some in the center of the table, a few closer to the top left corner,
and several more arranged along the top edge of the scene..."
(极度偏向“左上角、桌子正中央、右下边缘”,机械死板)

【Qwen3-VL 自身风格】:强调宏观语义概括与色彩质感
"This photo is about a display of an assortment of colorful and creatively
decorated donuts... presented in a visually appealing way... different flavors,
toppings, and textures such as coconut and purple glazed donut..."
(偏向“场景概括、装饰风格、色彩与口味纹理”,富含高级语义)
────────────────────────────────────────────────────────────────────────

2. 工程直觉:不要让忍受 4-Bit 噪声的学生去学别人的方言

在全精度微调时,模型的参数容量巨大,能够勉强兼顾“学习视觉”与“模仿 GPT-4 的口吻”。但在 W4A8 / W4A4 的极端约束下,学生的权重被粗暴压缩到仅有 16 个离散量化阶,此时如果监督信号还在强迫它扭转原本的语言习惯,就会产生剧烈的梯度冲突与振荡:

  • 自重标注方案(Self-Relabeling, SRL):在微调开始前,直接将开源训练集(如 LLaVA-680K)中的 Prompt 和 Image 输入到全精度的目标模型本身中,使用随机采样(Temperature=0.7, Top-p=0.8, Top-k=20)离线全量生成一套全新的监督目标 YSRLY_{SRL}。
  • 工程收益:
    • 完全对齐学生原本的先验分布:模型微调时无需分心适应陌生口吻,所有的梯度更新全力用于弥合量化带来的精度损伤;
    • 消灭长尾死循环:通过设定 max_token_len=512 截断无效长尾输出,大幅提升后续训练流水线的 Batch 吞吐量;
    • 单机极速生成:在单台 8×H200 机器上用 vLLM 离线跑完整个 68 万样本仅需约 2.5 个 GPU 天。

02. 训练调度范式:渐进式分块激活(PBA)—— 系统级“分阶段灰度发布”

如果一个复杂单体系统要重构降级,最忌讳的做法就是“Big Bang”(一次性在生产环境全量切开关)。明智的架构师一定会先给最脆弱、依赖最多的核心服务做灰度演练。

传统的 QAT 训练就是典型的 Big Bang 方案:第 0 步就把几十层 Transformer 的权重和激活全部挂上量化伪算子,结果原本脆弱的视觉投影路径瞬间休克。

1. 探针度量:定位谁是“视觉最敏感模块”(τ⃗\vec{\tau} 因子)

多模态大模型的 Transformer 每一层内部都同时流淌着视觉 Token 和文本 Token。为了定量探查每一层到底有多依赖视觉,论文设计了一个轻量级梯度探针——视觉敏感度因子 τ\tau:

τi=KKv⋅∑k=1Kv∥Gvi[k,:]∥ℓ1∑j=1K∥Gi[j,:]∥ℓ1\tau^i = \frac{K}{K_v} \cdot \frac{\sum_{k=1}^{K_v} \|\mathbf{G}_{v}^i[k, :]\|_{\ell_1}}{\sum_{j=1}^{K} \|\mathbf{G}^i[j, :]\|_{\ell_1}}

  • KvK_v 与 KK 分别为视觉 Token 数和全局 Token 总数;
  • Gvi\mathbf{G}_{v}^i 是该层对视觉 Token 的输出梯度,分母是该层全部 Token 的输出梯度总模长。
  • 物理含义:τi>1\tau^i > 1 说明该层视觉 Token 引起的梯度波动显著高于平均值,是典型的视觉敏感块(VSB, Vision-Sensitive Block);反之则是文本敏感块(TSB)。
1
2
3
4
5
6
【Qwen3-VL-2B 共 28 层 Decoding Layers 的敏感度实测分布】

层号: Layer 0 ──► Layer 8 ──────► Layer 18 ──────► Layer 27
[ 浅层输入区 ] [ 核心中层融合区 ] [ 深层输出决策区 ]
属性: TSB VSB TSB
τ 曲线: 低 (文本为主) 高峰凸起 (视觉敏感主干) 低 (文本生成为主)

关键事实:模型对图像的深层理解完全锚定在网络的中部层。浅层主要做局部特征初筛,深层已经收敛到具体的文字 Token 预测上。

2. 调度执行:Logarithm 渐进式激活流水线

ProQuant 提出了 渐进式分块激活(Progressive Block Activation, PBA) 机制。训练不再一视同仁,而是严格按照 τ\tau 值的降序,先将量化加在最脆弱的中层(VSB),其余层保持 BF16 精度作为“绝缘保护伞”,随后逐步灰度到外围层:

flowchart TD
    subgraph S1["阶段 1:0% ~ 30% 训练步数 (先攻坚最脆弱模块)"]
        direction LR
        L_mid1["前 50% 视觉敏感中层 (高 τ)"] -->|开启 4-bit 量化| O1["在 BF16 稳定保护下优先修复跨模态对齐"]
        L_side1["浅层 & 深层 (50%)"] -->|保持 BF16 高精度| O1
    end

    subgraph S2["阶段 2 & 3:30% ~ 50% 步数 (对数级灰度推进)"]
        direction LR
        P2["30% 步数: 激活至 75% 层"] --> P3["40% 步数: 激活至 88% 层"] --> P4["50% 步数: 激活至 100% 层"]
    end

    subgraph S3["阶段 4:50% ~ 100% 步数 (全局端到端收敛)"]
        direction LR
        P_all["100% 层全量处于低比特状态"] -->|统一 Post-hoc 收尾微调| Final["最终产出极致稳健的量化模型"]
    end

    S1 ==> S2 ==> S3

3. 分块粒度的工程决策:为什么必须是 1 个 Decoding Layer?

作者在消融实验中探索了分块粒度对系统收敛的影响:

  • 0.5 层(拆分 Attention 与 FFN):导致同一层内部 Attention 和 FFN 激活时机不同步,引入层内相位差,最终准确率反而下降 0.39%;
  • 2 层打包(Coarse-grained):粒度太粗,导致高敏感层和钝感层被强行绑定在同一个阶段降级,准确率骤降 2.26%;
  • 1 个 Decoding Layer(Fine-grained):最佳甜蜜点。既保证了单层模块内张量变换的自洽性,又精准隔离了层间的敏感度梯度。

03. 端到端实现算法与开销账单(Implementation Details)

对于工程团队来说,技术方案能否落地,不仅看理论上限,更看研发开销、训练时长与依赖复杂度。

1. 整体训练主循环(伪代码实现)

ProQuant 的训练逻辑高度精简,在现有 HuggingFace / DeepSpeed 训练管线上改造成本极低:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 算法核心流程:ProQuant Trainer 简化逻辑
def proquant_training_loop(teacher_model_fp, student_model_q, dataloader, total_steps):
# 灰度激活时间节点与目标层数预算 (对数调度)
schedule_steps = [0, int(0.3 * total_steps), int(0.4 * total_steps), int(0.5 * total_steps)]
block_budgets = [0.50, 0.75, 0.88, 1.00]

# 预先根据少量样本前向反向,计算每层的视觉敏感度 tau 向量
tau_scores = compute_vision_sensitivity(student_model_q, dataloader)
sorted_layer_indices = argsort_descending(tau_scores)

for step, batch in enumerate(dataloader):
# 1. 如果到达灰度晋级节点,扩展量化层范围
if step in schedule_steps:
stage_idx = schedule_steps.index(step)
num_quant_layers = int(total_layers * block_budgets[stage_idx])
active_layers = sorted_layer_indices[:num_quant_layers]
student_model_q.activate_quantization(active_layers)

# 2. 教师模型 (BF16) 与 学生模型 (低比特) 同步前向
logits_fp = teacher_model_fp(batch)
logits_q = student_model_q(batch)

# 3. 计算三元多目标损失函数 (Eq. A2)
# 前向 KL (覆盖多样性) + 反向 KL (聚焦模式) + 交叉熵 (真实标签约束)
loss = alpha * F.kl_div(logits_q, logits_fp) + \
(1 - alpha) * F.kl_div(logits_fp, logits_q) + \
beta * F.cross_entropy(logits_q, batch["y_srl"])

# 4. 梯度反传与参数更新
loss.backward()
optimizer.step()
optimizer.zero_grad()

2. 工程落地参数与硬件账单

  • 技术栈依赖:标准 PyTorch + DeepSpeed,完全兼容主流大模型训练生态。
  • 显存节约技巧:完全冻结视觉编码器(ViT),只训练 LLM 语言骨干网络及其量化 Scale 参数,显存开销大幅下降。
  • 算力开销总账单(以 2B 模型为例):
阶段 执行内容 使用硬件 耗时
数据准备 (SRL) 使用全精度模型重标注 680K 样本 单节点 8 × H200 ~2.5 GPU 天
量化训练 (PBA) 5 个 Epoch 低比特微调 (Batch Size=32) ~2.0 GPU 天
总计成本 端到端一站式交付高保真 W4A8 模型 单机 8 卡 4.5 GPU 天(约 14 小时即可跑完)

04. 真实芯片打桩实测:22nm ASIC 上的性能硬核解构

不同于许多仅在 GPU 上模拟浮点时延的论文,作者团队将量化模型真正烧录进了台积电(TSMC)22nm 工艺定制流片的端侧 MLLM 专用加速芯片(ASIC),配合 Linux FPGA 平台完成了真实闭环测量。

1
2
3
4
5
6
7
8
┌────────────────────────────────────────────────────────────────────────┐
│ 测试硬件规格:TSMC 22nm 边缘多模态专用加速芯片 (ASIC) │
├────────────────────────────────────────────────────────────────────────┤
│ • 算力阵列:2 个混合精度张量引擎 (MPTE),含 2048 个 MACs,INT8 算力 2.46 TOPS │
│ • 精度支持:原生支持 BF16、INT8、INT4 权重与激活矩阵运算 │
│ • 片上存储:4MB 全局 Token 缓存 + 4MB 权重缓存 │
│ • 板载内存:8GB 外部 DDR4,提供 38.4 GB/s 内存带宽 │
└────────────────────────────────────────────────────────────────────────┘

在这块真实的端侧硬件上,测试结果生动地展现了体系结构中的经典规律:

1. 评测成绩单:基准准确率与性能对比

在涵盖文档理解(DocVQA)、图表解析(ChartQA)、综合推理(MMMU, ScienceQA)等多项基准上,Qwen3-VL-2B-Instruct 的实测表现如下:

量化模式 量化方案 平均准确率 (Avg Acc) 相对 BF16 跌幅 端侧硬件适配度
全精度 BF16 Baseline 基线 73.57% - 内存超标,功耗过大
W4A8 (中度压缩) 传统 PTQ (MBQ) 65.94% -7.63% (严重退化) 优
ProQuant (本文) 72.54% 仅 -1.03% (几乎无损) 极佳 (零额外算子)
W4A4 (极致低比特) 传统 PTQ (MBQ) 39.81% -33.76% (模型彻底报废) 优
ProQuant (本文) 59.83% 稳健可用 (+20.02% 绝对反超) 极佳 (纯整数阵列)

2. 硬件行为解密:为什么 Decode 阶段提速如此稳定?

1
2
3
4
5
6
7
8
9
【输入配置:256 图像 Token + 256 文本 Token 下的实测数据 (Qwen2.5-VL-3B)】

┌─────────────────┬───────────────────┬───────────────────┐
│ 运行阶段 │ W4A8 表现 │ W4A4 表现 │
├─────────────────┼───────────────────┼───────────────────┤
│ Prefill (首字) │ 提速 1.89×, 省能 3.04×│ 提速 3.28×, 省能 4.66×│
├─────────────────┼───────────────────┼───────────────────┤
│ Decode (吐字) │ 提速 3.93×, 省能 3.97×│ 提速 3.98×, 省能 3.99×│
└─────────────────┴───────────────────┴───────────────────┘

仔细观察上表,会发现一个极具工程趣味的现象:在 Decode 阶段,无论是 W4A8 还是 W4A4,提速比都整整齐齐地收敛在 ~3.9× 左右,为什么?

  • Decode 是典型的 Memory-Bound 场景:大模型生成时逐字吐 Token,计算强度(FLOPs/Byte)极低,每个 Token 都要将全量权重从板载 DDR 搬进片上 SRAM。
  • 物理带宽直接翻倍:原本 16-bit(2 字节)的权重在 4-bit(0.5 字节)下体积直接缩水至 14\frac{1}{4}。受限的总线带宽搬运耗时瞬间压缩至 25%25\%,因此吞吐直接逼近理论极限的 4×4\times(实测 3.9×~3.98×)。此时激活值是 8-bit 还是 4-bit,对显存带宽的冲击已经微乎其微。

3. 为什么 Prefill 阶段 W4A4 能打出 3.28×~3.64× 的飞跃?

  • Prefill 是典型的 Compute-Bound 场景:在处理几百上千个视觉提示词时,矩阵维度变大,芯片进入高度密集的矩阵乘法状态。
  • INT4 纯整型乘加器的威力:芯片内部的计算单元在 INT4 模式下的吞吐能力是 INT8 的两倍。算力瓶颈被有效打破,直接拉升了整体推理时效。

4. 警惕“阿姆达尔定律(Amdahl’s law)”木桶短板:ViT 瓶颈

在实测中,作者指出了一条极其珍贵的部署陷阱:当输入图像分辨率增加、视觉 Token 从 256 增加到 1024 时,整机的端到端加速比反而下降了(例如从 1.89× 掉到 1.70×)!

  • 原因揭秘:为了保住精细视觉特征,前端的 ViT 图像编码器被保留在 BF16 精度。
  • 阿姆达尔定律生效:当图像变大,运行在低算力 BF16 模式下的 ViT 耗时占比从原本的 5% 激增到 30% 以上。即便后面的 LLM 提速了 4 倍,整体速度依然被未经量化的 ViT 短板无情拖累。这提示我们在未来的端侧全链路优化中,前端视觉编码器的轻量化同样至关重要。

05. 给软件与系统开发工程师的架构启示

ProQuant 不仅是一篇模型量化论文,其蕴含的方法论对于分布式系统研发、复杂业务重构与高性能服务治理同样具备高度的指导意义:

1
2
3
4
5
6
7
8
┌────────────────────────────────────────────────────────┐
│ ProQuant 的四大系统工程哲学 │
├────────────────────────────────────────────────────────┤
│ 1. 契约一致性高于数据规模 (Contract Alignment Over Scale) │
│ 2. 区分脆弱度灰度降级 (Vulnerability-Aware Canary) │
│ 3. 运行期零额外负债 (Zero Runtime Overhead) │
│ 4. 体系结构瓶颈的精准把控 (IO-bound vs CPU-bound) │
└────────────────────────────────────────────────────────┘
  1. 协议/契约一致性高于单纯的数据堆砌(SRL 的哲学):
    • 许多工程师在做模型微调或 Agent 提示词工程时,迷信“调用最强模型生成海量数据”。然而,如果上游生成的数据风格与下游模型内在的先验协议不一致,这种“脏数据”带来的噪音可能远大于增益。优先保证端到端上下文协议的纯净与同构,往往能用极小的数据量取得最高质量的系统表现。
  2. 高风险技术改造必须有“敏感度探针”与“灰度调度器”(PBA 的哲学):
    • 在涉及核心数据库分库分表、底座网络协议重构等系统级“降级/重构”操作时,切忌全量切换。应该像 τ\tau 探针一样,先在监控中识别出对变更最敏感的核心业务链路,给次要模块保留高可用保护伞,优先将关键路径适配完成,再逐步推进全量灰度。
  3. 不要为了算法指标向运行期转移技术负债(Zero Runtime Overhead):
    • 优秀的技术架构绝不应该把复杂度抛给下游运行时。ProQuant 宁可在离线训练期多花几天时间跑 SRL 和 PBA,也坚决不在推理期增加任何非标算子(如旋转矩阵)。把复杂度吃在离线编译期,把极简留给线上执行路径,是高性能工业系统永远的设计准则。
  4. 性能排查先定性:永远分清是带宽墙还是算力墙:
    • 当服务吞吐上不去时,先看火焰图:是类似于 Decode 的高频微小 IO 搬运(Memory/Network-bound),还是类似于 Prefill 的重度批量运算(Compute-bound)?前者靠压缩协议体积与批量聚合(Batching/Quantization)解题,后者靠并发流水线与低精度整型算力提升解题。对症下药,方能事半功倍。