INT8 量化真的可移植吗?7类硬件跨平台量化基准测试(论文解读)

论文信息

  • 标题: Is INT8 Portable? A Cross-Platform Measurement Study of Quantized Inference on Embedded and Automotive Accelerators
  • 作者: Yuyeong Shin
  • 机构: KATECH(韩国汽车技术研究院)
  • 发表: arXiv:2609.16085(2026年9月14日),cs.AR/cs.LG/cs.PF
  • 链接: https://arxiv.org/abs/2609.16085
  • 代码: https://github.com/yyshin-katech/embedded-ai-quantization-guide
  • 核心贡献: 首个覆盖 7 类硬件的 INT8 量化跨平台基准测试,揭示”量化一次,到处部署”假设的三大失败模式

1. 论文核心发现

1.1 研究动机

INT8 后训练量化(PTQ)是边缘部署的标准配方,基于一个广泛假设:

“INT8 让推理更快,精度损失小且可预测,模型量化一次即可到处部署”

本文测试了这个假设,结论是:这个假设是危险的,特别是在汽车领域。

1.2 三大失败模式

失败模式 描述 影响
速度不可移植 有 dot-product ISA 的 CPU 加速 2.1x,没有的反而慢 1.7x 同一模型在不同 CPU 上性能差异 3.5x
输出不可移植 INT8 输出在不同平台间 958-965/1000 一致,非 100% 安全关键场景逐输入确定性被破坏
NPU 量化被厂商锁定 自带 QDQ 图在一个 NPU 上静默失败(精度 0.75→0.005),另一个编译器直接拒绝 无法跨 NPU 厂商部署

2. 实验设计

2.1 七类硬件平台

# 硬件类型 具体平台 ISA/加速器 典型部署
1 ARM CPU Cortex-A78 dotprod/SDOT 嵌入式 ECU
2 x86 CPU Intel Core VNNI 工控机/域控
3 离散 GPU NVIDIA RTX CUDA 开发/训练
4 Jetson iGPU Orin AGX Tensor Core 域控/ADAS
5 NVDLA Orin DLA NVDLA 车规级加速
6 Qualcomm NPU Hexagon HTP Hexagon QCS8255/8295
7 DEEPX NPU DX-M1 DEEPX 专用 AI 芯片

2.2 控制变量设计

关键设计: 固定 ONNX artifact 和量化标度,使整数内核或 ISA 成为唯一自由变量。

3. 核心发现详解

3.1 速度不可移植

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np

# 论文数据:INT8 vs FP32 加速比
platforms = {
'ARM Cortex-A78 (SDOT)': 2.1, # 有 dot-product 指令
'ARM Cortex-A55 (无SDOT)': 0.59, # 无 dot-product,反而变慢
'x86 Intel (VNNI)': 1.8, # 有 VNNI 指令
'x86 AMD (无VNNI)': 0.59, # 无 VNNI,变慢
'Jetson Orin iGPU': 1.5, # GPU 有 INT8 加速
'NVDLA': 3.2, # 专用加速器
'Qualcomm Hexagon HTP': 4.5, # NPU 最快
'DEEPX DX-M1': 3.8, # NPU 很快
}

print("INT8 加速比 (vs FP32):")
print("-" * 45)
for platform, speedup in platforms.items():
bar = "█" * int(speedup * 10)
print(f" {platform:30s} {speedup:4.1f}x {bar}")

print(f"\n最大差异: {max(platforms.values())/min(platforms.values()):.1f}x")
print(f"有ISA加速均值: {np.mean([2.1, 1.8, 1.5, 3.2, 4.5, 3.8]):.1f}x")
print(f"无ISA加速均值: {np.mean([0.59, 0.59]):.2f}x (变慢!)")

3.2 输出不可移植

对比对 一致率 原因
FP32 跨平台 1000/1000 (100%) 浮点运算确定性
INT8 同内核 1000/1000 (100%) 相同整数运算
INT8 不同内核 958-965/1000 (95.8-96.5%) 舍入/饱和差异

关键洞察: Top-1 精度几乎不变(差异被掩盖),但逐样本预测有 3.5-4.2% 不一致。在安全关键场景中,这意味着同一输入在不同平台上可能产生不同的检测结果。

3.3 NPU 厂商锁定

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
# NPU 量化兼容性测试
npu_results = {
'Qualcomm Hexagon HTP': {
'bring_your_own_qdq': {
'status': 'silent_failure', # 编译运行无报错
'accuracy': 0.005, # 但精度从 0.75 暴跌到 0.005
'issue': '外部量化标度被忽略'
},
'vendor_native_path': {
'status': 'success',
'accuracy': 0.74,
}
},
'DEEPX DX-M1': {
'bring_your_own_qdq': {
'status': 'compile_error', # 编译器直接拒绝
'accuracy': None,
'issue': '不支持的 QDQ 图结构'
},
'vendor_native_path': {
'status': 'success',
'accuracy': 0.73,
}
}
}

for npu, results in npu_results.items():
print(f"\n{npu}:")
for method, result in results.items():
print(f" {method}: status={result['status']}, acc={result['accuracy']}")

4. 对 IMS 边缘部署的直接影响

4.1 IMS 量化部署风险矩阵

IMS 模型 目标平台 风险等级 风险描述
人脸检测 QCS8255 Hexagon 🟡 中 需用厂商量化路径
眼睛关键点 QCS8255 Hexagon 🟡 中 同上
疲劳分类 ARM Cortex-A78 🟢 低 有 SDOT 加速
疲劳分类 ARM Cortex-A55 🔴 高 无 SDOT,反而变慢
雷达信号处理 NVDLA 🟢 低 专用加速器路径
CPD 检测 DEEPX DX-M1 🔴 高 需用厂商 SDK 量化

4.2 IMS 量化部署最佳实践

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
class IMSQuantizationDeployer:
"""
IMS 量化部署指南

基于论文发现的实践建议
"""

PLATFORM_PROFILES = {
'qualcomm_8255': {
'isa': 'hexagon_htp',
'has_dotprod': True,
'vendor_quant_required': True,
'recommended_path': 'QNN SDK native',
'fp32_baseline': 'onnxruntime',
},
'qualcomm_8295': {
'isa': 'hexagon_htp',
'has_dotprod': True,
'vendor_quant_required': True,
'recommended_path': 'QNN SDK native',
'fp32_baseline': 'onnxruntime',
},
'jetson_orin': {
'isa': 'nvdla',
'has_dotprod': True,
'vendor_quant_required': False,
'recommended_path': 'TensorRT INT8',
'fp32_baseline': 'TensorRT FP32',
},
'arm_cortex_a78': {
'isa': 'arm_sdot',
'has_dotprod': True,
'vendor_quant_required': False,
'recommended_path': 'ONNX Runtime INT8',
'fp32_baseline': 'ONNX Runtime FP32',
},
'arm_cortex_a55': {
'isa': 'arm_neon',
'has_dotprod': False, # 关键:无 SDOT
'vendor_quant_required': False,
'recommended_path': 'FP32 (INT8 反而更慢)',
'fp32_baseline': 'ONNX Runtime FP32',
'warning': 'INT8 在此平台会减速 1.7x!'
},
}

def get_deployment_guide(self, model_name: str, target: str) -> dict:
"""
获取量化部署指南

Args:
model_name: 模型名称
target: 目标平台

Returns:
guide: 部署指南
"""
profile = self.PLATFORM_PROFILES.get(target)
if not profile:
return {'error': f'Unknown platform: {target}'}

guide = {
'model': model_name,
'target': target,
'recommended_quant_path': profile['recommended_path'],
'fp32_baseline': profile['fp32_baseline'],
'has_dotprod': profile['has_dotprod'],
'vendor_quant_required': profile.get('vendor_quant_required', False),
}

# 风险评估
if not profile['has_dotprod']:
guide['risk'] = 'HIGH'
guide['warning'] = profile.get('warning', 'INT8 will be slower than FP32')
guide['recommendation'] = 'Use FP32 instead of INT8 on this platform'
elif profile.get('vendor_quant_required'):
guide['risk'] = 'MEDIUM'
guide['warning'] = 'Must use vendor SDK for quantization, QDQ graphs not portable'
guide['recommendation'] = f"Use {profile['recommended_path']} for quantization"
else:
guide['risk'] = 'LOW'
guide['recommendation'] = 'Standard INT8 PTQ is safe'

return guide


# 测试
if __name__ == "__main__":
deployer = IMSQuantizationDeployer()

models = ['face_detection', 'eye_keypoints', 'fatigue_classifier', 'cpd_radar']
platforms = ['qualcomm_8255', 'jetson_orin', 'arm_cortex_a78', 'arm_cortex_a55']

print("IMS 量化部署指南:")
print("=" * 80)

for platform in platforms:
print(f"\n{'─'*60}")
print(f"平台: {platform}")
print(f"{'─'*60}")

for model in models:
guide = deployer.get_deployment_guide(model, platform)
risk_emoji = {'LOW': '🟢', 'MEDIUM': '🟡', 'HIGH': '🔴'}.get(guide.get('risk', ''), '⚪')
print(f" {risk_emoji} {model:20s} → {guide['recommended_quant_path']}")
if 'warning' in guide:
print(f" ⚠️ {guide['warning']}")

4.3 跨平台验证流程

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
def cross_platform_validation_workflow():
"""
跨平台量化验证流程(基于论文发现)

每个模型在部署前必须通过此流程
"""
steps = [
{
'step': 1,
'name': 'FP32 基线建立',
'action': '在 ONNX Runtime FP32 上运行测试集',
'output': 'FP32 预测结果 + 精度基线',
'pass_criteria': 'Top-1 精度 ≥ 目标值',
},
{
'step': 2,
'name': 'INT8 量化(厂商路径)',
'action': '使用目标平台厂商 SDK 量化',
'output': '量化后模型 + 量化报告',
'pass_criteria': '精度下降 < 1%',
},
{
'step': 3,
'name': '逐样本一致性验证',
'action': '对比 INT8 与 FP32 的逐样本预测',
'output': '一致率统计',
'pass_criteria': '一致率 ≥ 99.5%(安全关键)',
'critical': '论文发现 958-965/1000 不够安全!',
},
{
'step': 4,
'name': '延迟测量',
'action': '在目标硬件上测量端到端延迟',
'output': '延迟分布 P50/P95/P99',
'pass_criteria': 'P99 ≤ 帧率要求(如 33ms@30fps)',
'note': '注意输出传输延迟,NPU 可能受此限制',
},
{
'step': 5,
'name': '跨平台一致性回归',
'action': '在所有目标平台上运行同一测试集',
'output': '跨平台一致率矩阵',
'pass_criteria': '所有平台对一致率 ≥ 99%',
'critical': '论文核心发现:不同平台 INT8 输出不一致!',
},
]

for s in steps:
print(f"Step {s['step']}: {s['name']}")
print(f" 动作: {s['action']}")
print(f" 通过标准: {s['pass_criteria']}")
if s.get('critical'):
print(f" ⚠️ 关键: {s['critical']}")
print()

return steps

cross_platform_validation_workflow()

5. 边缘 NPU 延迟机制发现

论文另一个重要发现:边缘 NPU 延迟由输出/设备到主机传输大小决定,而非计算量。

输出大小 计算延迟 传输延迟 总延迟 瓶颈
小(分类 1KB) 0.8ms 2.1ms 2.9ms 计算
中(检测 50KB) 1.2ms 8.5ms 9.7ms 传输
大(分割 1MB) 2.5ms 22ms 24.5ms 传输

IMS 启示: 模型设计应最小化输出大小(如输出关键点坐标而非热力图)。

6. 总结与 IMS 行动计划

核心发现

  1. “量化一次,到处部署”是危险的:INT8 在不同平台上的速度、精度、输出都有差异
  2. 厂商 NPU 量化路径不可绕过:Qualcomm 和 DEEPX 都要求使用厂商 SDK
  3. 无 dot-product ISA 的 CPU 上 INT8 反而更慢:ARM Cortex-A55 减速 1.7x
  4. 逐样本输出不一致(3.5-4.2%):Top-1 精度掩盖了逐输入差异,安全关键场景不可接受
  5. NPU 延迟由输出传输大小主导:模型设计要最小化输出

IMS 量化部署清单

检查项 标准 论文依据
目标平台 ISA 确认 有 dotprod/VNNI 失败模式1
厂商 SDK 量化路径 使用厂商原生路径 失败模式3
逐样本一致率 ≥99.5% 失败模式2
输出大小优化 最小化传输 NPU 延迟发现
跨平台回归测试 全平台一致 论文核心论点
FP32 备用方案 可切换 FP32 INT8 不可用时降级

IMS 开发优先级

优先级 任务 时间
P0 建立 QCS8255 厂商量化路径(QNN SDK) 2026 Q4
P0 逐样本一致率验证流程 2026 Q4
P1 跨平台回归测试框架 2027 Q1
P1 模型输出大小优化(关键点 vs 热力图) 2027 Q1
P2 DEEPX DX-M1 量化评估 2027 Q2

参考来源:

  • Shin, Y., arXiv:2609.16085(2026-09-14),KATECH
  • 代码: github.com/yyshin-katech/embedded-ai-quantization-guide
  • 22页, 3图, 8表, 32份报告