OPERATOR RULE

Gemm

输入激活、权重和输出激活都必须量化。

quant-only
规则定位quant-only
量化判定输入、权重、输出必须量化
数据类型激活 U4(偶数通道) / S8 / U8 / S16 / U16;权重 S4(偶数 OC) / S8;bias FP32 / S32
示例状态7/7 PASS

数据类型与量化边界

数据类型概述
激活 U4(偶数通道) / S8 / U8 / S16 / U16;权重 S4(偶数 OC) / S8;bias FP32 / S32
量化要求
输入、权重、输出必须量化

规则原文

规则定位:quant-only

本页是 ax quant spec 的逐算子展开。本页与统一规范冲突时,以统一规范为准。

规则

  • 输入激活、权重和输出激活都必须量化。
  • 输入激活与输出激活的整数量化类型、scalezero_point 相互独立。
  • 激活量化类型从 U4 非对称、S8 对称或非对称、U8 非对称、S16 对称、U16 非对称中选择,粒度为 per-tensor。
  • 权重只允许 S4 或 S8 对称 per-channel 量化,并且 axis = 0
  • U4 激活要求输入通道数为偶数;S4 权重要求输出通道数为偶数。
  • bias 可省略、直接使用 FP32 initializer,或使用 S32 对称 per-channel 量化。
  • 量化 bias 允许 FP32 initializer 经 Q/DQ,或 INT32 initializer 经 DQ。
  • 量化 bias 必须逐通道满足 bias_scale = input_scale * weight_scale;该数值检查为 warn,受 check_value 控制,使用绝对阈值 1e-7 和相对阈值 1e-5 判定。
  • 只允许 transA = 0transB = 1alpha = 1beta = 1 的 canonical fully-connected 形式。
  • 不额外限制 bias shape 和广播形式。

本文档未增加限制的属性、shape 和输入形式,遵循模型声明 opset 下的 ONNX 语义。

与 Pattern 的关系

  • Transpose + MatMul + Add 的分解形式不是 Gemm/FC Pattern,各节点分别应用自身规则并保留规则要求的 Q/DQ。

MODEL EVIDENCE

可验证的 ONNX 案例

每张卡片直接嵌入对应的 Netron 模型图,进入页面后自动加载。

无 bias

VERIFIED

权重使用整数量化 initializer,经 DQ 进入主算子。

errors 0warnings 0nodes 6Q/DQ 2 / 3patterns none
Netron正在加载模型…
新窗口打开

U4 激活

VERIFIED

激活使用 U4 非对称 per-tensor,输入通道数为偶数;权重 S8 per-channel,无 bias。

errors 0warnings 0nodes 6Q/DQ 2 / 3patterns none
Netron正在加载模型…
新窗口打开

S16 激活

VERIFIED

激活使用 S16 对称 per-tensor;权重 S8 per-channel,无 bias。

errors 0warnings 0nodes 6Q/DQ 2 / 3patterns none
Netron正在加载模型…
新窗口打开

U16 激活

VERIFIED

激活使用 U16 非对称 per-tensor;权重 S8 per-channel,无 bias。

errors 0warnings 0nodes 6Q/DQ 2 / 3patterns none
Netron正在加载模型…
新窗口打开

FP32 bias

VERIFIED

直接引用 FP32 initializer 作为 bias。

errors 0warnings 0nodes 6Q/DQ 2 / 3patterns none
Netron正在加载模型…
新窗口打开

S32 bias

VERIFIED

使用 INT32 initializer 经 DQ 表达逐通道 bias。

errors 0warnings 0nodes 7Q/DQ 2 / 4patterns none
Netron正在加载模型…
新窗口打开

S4 权重

VERIFIED

使用 INT4 per-channel 权重 DQ,输出通道数为偶数。

errors 0warnings 0nodes 6Q/DQ 2 / 3patterns none
Netron正在加载模型…
新窗口打开