多数后训练量化方法把线性层看成一个完整的数值矩阵。SegQuant 还会追问:输入从哪里来,输出将流向哪里。它从计算图中自动识别语义分段,分别量化各个区域,并通过硬件原生的双尺度执行路径保留正负激活的不对称性。

SegLinear从计算图拓扑发现语义分段,无需人工维护层名单。
DualScale分别保留负值与非负激活所需的数值分辨率。
面向实际部署继续使用定长整数 GEMM、批处理和融合后处理。

1. 为什么只看张量数值还不够

扩散模型会在多个去噪时间步中反复调用同一主干网络,因此单层误差也可能不断传播。DiT 类模型还有一层特殊困难:chunksplitconcatreshape 等操作表明,一个物理线性层中可能融合了多种计算语义。

例如,AdaNorm 的线性层会同时产生注意力与 MLP 分支所需的 shift、scale 和 gate 参数。不同部分的数值范围、用途与量化敏感度并不相同。若整个矩阵共用一套量化配置,大范围区域会主导量化器,让较小但更敏感的区域失去分辨率,这就是语义分段之间的量化干扰。

传统的统一量化视角
\[ Y=XW, \qquad \widehat{Y}=Q(X)Q(W). \]

这一写法没有表达 \(X\) 与 \(W\) 在计算图中的语义。SegQuant 先恢复结构,再决定如何量化。

2. SegLinear:从计算图拓扑识别语义

SegLinear 使用 torch.fx 完成符号追踪和拓扑模式匹配。它不依赖具体模型名称,而是在线性算子附近寻找两类可复用结构。

输出分段量化

若线性层输出随后被 chunksplit 拆分,说明不同输出区间会流向不同分支。SegLinear 沿输出维度拆分权重矩阵,再分别量化:

\[ W=[W_1,W_2,\ldots,W_N], \qquad \widehat{Y}=[\widehat{X}\widehat{W}_1,\widehat{X}\widehat{W}_2,\ldots,\widehat{X}\widehat{W}_N]. \]

输入分段量化

若输入由 concat 或改变结构的 reshape 产生,不同输入通道来自不同计算路径。SegLinear 同时划分输入和权重矩阵对应的行:

\[ X=[X_1,X_2,\ldots,X_N], \qquad W=[W_1^{\mathsf T},W_2^{\mathsf T},\ldots,W_N^{\mathsf T}]^{\mathsf T}, \] \[ \widehat{Y}=\sum_{i=1}^{N}\widehat{X}_i\widehat{W}_i. \]

每个分段的宽度直接从计算图元数据中推断。随后,各分段可以独立使用 SmoothQuant、GPTQ、SVDQuant 等优化器和校准参数。这样,结构发现与数值优化便不再绑定。

SegQuant 从计算图到执行内核的流程
追踪计算图构建包含张量形状和依赖关系的静态算子图。
识别语义匹配 concat-to-linear 与 linear-to-split 模式。
划分张量切分相应输入通道或权重区域。
局部优化按语义一致区域分别校准与量化。
下沉到内核以低比特 GEMM 执行,并融合结果重构。
该流程图由网页原生元素绘制,可在不同分辨率下保持清晰。

3. DualScale:不改变位宽,保留正负极性

SiLU 与 GELU 会保留大量绝对值较小的负激活,同时产生范围宽得多的正激活。若正负数共用一个步长,正向离群值会主导量化尺度,狭窄负区间只能分到很少的量化格点。论文发现,这些负激活恰好承载扩散生成中的高频纹理与细节。

DualScale 分别为负区间和非负区间设置步长:

极性感知量化
\[ Q_{\mathrm{dual}}(x)= \begin{cases} \operatorname{round}(x/s_-), & x<0,\\ \operatorname{round}(x/s_+), & x\geq0, \end{cases} \] \[ s_-=\frac{|\min(X)|}{q_{\min}}, \qquad s_+=\frac{\max(X)}{q_{\max}}. \]

令 \(X_+=\max(X,0)\),\(X_-=\min(X,0)\),线性结果可以写为

\[ Y\approx (s_+s_w)\widehat{X}_+\widehat{W}+(s_-s_w)\widehat{X}_-\widehat{W}. \]

虽然公式中出现两次矩阵乘法,实现上会把它们合并为一次 BatchedGEMM,并在融合 epilogue 中完成缩放与求和。因此,DualScale 继续使用标准定长整数算术,无需定制数值格式,也不额外启动执行内核。

4. 两个机制为什么互补

SegLinear 解决结构干扰

不同语义分支不再相互决定量化参数。

DualScale 解决极性干扰

宽正区间不再吞噬窄负区间的数值分辨率。

不绑定优化器

两个机制都封装在已有 PTQ 优化器外部,而不是再造一套模型专用方法。

兼容编译器

静态图检测与标准低比特 GEMM 能够接入现有部署工具链。

5. 实验证据

论文覆盖 SD3.5、FLUX.1-dev、SDXL,包含 DiT 与 UNet 两类骨干、INT8 与 INT4 配置,以及 COCO、MJHQ-30K、DCI 三个图像集。下表在 SD3.5 W8A8 设置下分别加入两个核心模块。

MJHQ-30K 上的消融实验,SD3.5 W8A8
方法FID ↓Image Reward ↑LPIPS ↓PSNR ↑SSIM ↑
基线23.350.8770.41911.930.536
+ SegLinear23.360.8990.39512.030.554
+ DualScale22.610.9090.40112.140.551
+ SegLinear + DualScale22.540.9520.37712.500.567

逐层测量进一步解释了质量提升的来源。采用 GPTQ 时,DiT.11.norm1 context 的 Frobenius 量化误差在语义划分后从 \(3.0176\) 降至 \(1.7637\)。同样趋势出现在 SmoothQuant、SVDQuant 和 GPTQ 上,说明收益来自图结构划分,而不是某个特定优化器。

RTX 4090 上部署 SD3.5 的资源开销
配置峰值显存 (GiB)主干大小 (GiB)单步时延 (ms)
FP1618.633.88317.18
INT8 基线16.732.00278.86
SegQuant-816.722.02287.85
INT4 基线16.061.29209.78
SegQuant-416.121.42212.87
22.54 FID完整方法优于 W8A8 消融基线的 23.35。
0.952 IR两个模块同时启用后,Image Reward 从 0.877 提高到 0.952。
W4 仅增 1.5%SegQuant-4 相比 INT4 基线每步增加 3.09 ms,仍保留主要效率收益。
如何理解这些结果? SegQuant 并不宣称语义处理没有成本。它会增加少量时延与尺度存储,系统贡献在于:执行代价仍接近普通 INT8 或 INT4,而生成质量指标得到稳定改善。

6. 更广的研究方向

SegQuant 把模型结构视为部署信息。Shiva-DiT 从另一个角度延续这一方向,通过基于残差的可微 top-k 选择,学习哪些 Transformer 计算应当保留。两项工作都强调结构感知效率,而不是对每个参数、激活或 token 采用完全相同的近似。

相关工作

Shiva-DiT:可微 top-k 选择 ↗生成式人工智能系统研究