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月
测试平台 7类硬件
代码 github.com/yyshin-katech/embedded-ai-quantization-guide

核心发现

“Quantize once, deploy anywhere” 是不安全的——对嵌入式和汽车部署而言,每输入确定性和冗余性很重要。

INT8量化被广泛认为是边缘部署的标准方案,但本文跨7类硬件的实测揭示了三个层面的可移植性失败:

三个失败维度

维度 问题 严重性
速度 INT8可能比FP32更慢 中
输出 INT8预测跨平台不一致 高
NPU 自带量化图被静默忽略 致命

7类硬件测试矩阵

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
class CrossPlatformINT8Study:
"""
跨7类硬件INT8量化实测

论文:arXiv:2609.16085
代码:github.com/yyshin-katech/embedded-ai-quantization-guide

测试方法:
- 固定ONNX模型 + 固定量化参数
- 唯一变量:各平台的INT8整数核/ISA
- 对比FP32基线和INT8输出
"""

PLATFORMS = {
# CPU类
'arm_cpu_dotprod': {
'name': 'ARM CPU (有dotprod)',
'isa': 'ARMv8.6 dotprod/SDOT',
'int8_speedup': '2.1x faster',
'fp32_vs_int8': 'INT8快2.1倍',
},
'arm_cpu_no_dotprod': {
'name': 'ARM CPU (无dotprod)',
'isa': 'ARMv8.0 无dotprod',
'int8_speedup': '1.7x slower',
'fp32_vs_int8': 'INT8慢1.7倍!',
},
'x86_cpu_vnni': {
'name': 'x86 CPU (有VNNI)',
'isa': 'x86 AVX-VNNI',
'int8_speedup': '1.8x faster',
},
'x86_cpu_no_vnni': {
'name': 'x86 CPU (无VNNI)',
'isa': 'x86 AVX2',
'int8_speedup': '1.4x slower',
},

# GPU类
'discrete_gpu': {
'name': '离散GPU',
'isa': 'CUDA INT8',
'int8_speedup': '3.2x faster',
},
'jetson_orin_nvdla': {
'name': 'Jetson AGX Orin (NVDLA)',
'isa': 'NVDLA INT8',
'int8_speedup': '2.5x faster',
},

# NPU类
'qualcomm_hexagon': {
'name': 'Qualcomm Hexagon HTP',
'isa': 'Hexagon INT8',
'int8_speedup': '4.0x faster',
'critical_issue': '外部QDQ图被静默忽略',
},
'deepx_dx_m1': {
'name': 'DEEPX DX-M1',
'isa': 'DEEPX INT8',
'int8_speedup': '3.8x faster',
'critical_issue': '编译器拒绝外部QDQ图',
},
}

关键发现详解

发现1:INT8速度取决于CPU的dot-product ISA

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
class INT8SpeedAnalysis:
"""
INT8加速效果取决于CPU是否有dot-product指令集

同一模型、同一量化参数:
- 有dotprod的ARM CPU: INT8比FP32快2.1x
- 无dotprod的ARM CPU: INT8比FP32慢1.7x

这意味着INT8量化在低端ARM CPU上可能适得其反
"""

# 实测数据
RESULTS = {
# 平台, 模型, FP32延迟(ms), INT8延迟(ms), 加速比
('ARM_dotprod', 'resnet50'): (12.3, 5.9, 2.08),
('ARM_no_dotprod', 'resnet50'): (15.1, 25.7, 0.59), # 更慢!
('x86_vnni', 'resnet50'): (8.2, 4.6, 1.78),
('x86_no_vnni', 'resnet50'): (9.5, 13.3, 0.71), # 更慢!
('gpu', 'resnet50'): (3.1, 0.97, 3.20),
('nvdla', 'resnet50'): (2.8, 1.12, 2.50),
('hexagon', 'resnet50'): (2.1, 0.53, 3.96),
}

@classmethod
def get_recommendation(cls, platform: str) -> str:
"""根据平台给出INT8建议"""
results = {k: v for k, v in cls.RESULTS if k[0] == platform}
if not results:
return "未知平台"

all_faster = all(s > 1.0 for _, _, s in results.values())
any_slower = any(s < 1.0 for _, _, s in results.values())

if all_faster:
return "✅ INT8推荐:该平台INT8全面加速"
elif any_slower:
return "❌ INT8不推荐:该平台INT8可能更慢"
else:
return "⚠️ 需实测:INT8效果因模型而异"

发现2:INT8输出不可移植

对比对 FP32一致性 INT8一致性 说明
ARM↔ARM(同核) 1000/1000 1000/1000 同核完全一致
ARM↔ARM(异核) 1000/1000 958-965/1000 INT8输出不一致
CPU↔NPU 1000/1000 958-965/1000 跨设备不一致
NPU↔NPU(不同厂商) 1000/1000 940-960/1000 厂商间不一致

关键影响:top-1准确率不变(约95%),但逐样本预测不同。在安全关键的汽车场景中,这意味着同一输入在不同平台可能产生不同判断。

发现3:NPU拥有量化(Vendor Lock-in)

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
class NPUQuantizationLockIn:
"""
NPU量化锁定问题

关键发现:
Qualcomm Hexagon和DEEPX NPU都不接受外部QDQ图
只接受厂商自己的量化管道

后果:
- "bring-your-own quantization"在NPU上失败
- 开发者必须使用厂商SDK量化
- 跨NPU部署需要分别量化
"""

QUALCOMM_HEXAGON = {
'external_qdq': '静默失败',
'symptom': '编译运行无报错,但精度从0.75降到0.005',
'root_cause': '外部scales被忽略,NPU使用自己的量化参数',
'resolution': '必须使用QNN SDK的量化管道',
}

DEEPX_DX_M1 = {
'external_qdq': '编译器拒绝',
'symptom': '编译器报错,拒绝外部QDQ图',
'root_cause': '只接受DEEPX SDK输出的量化模型',
'resolution': '必须使用DEEPX SDK量化',
}

@classmethod
def impact_on_ims(cls):
"""对IMS的影响"""
return {
'qualcomm_path': 'IMS在QCS8255上必须用QNN SDK量化',
'ti_path': 'IMS在TI TDA4上必须用TIDL量化',
'nvidia_path': 'IMS在Orin上必须用TensorRT量化',
'consequence': '一个模型需要3条量化路径,不能"量化一次到处部署"',
}

对IMS部署的影响

当前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
class IMSQuantizationGuide:
"""
IMS多芯片量化部署指南

基于arXiv:2609.16085的发现
"""

RULES = {
'rule_1': {
'name': '每芯片独立量化',
'description': '不为不同芯片使用同一量化模型',
'reason': 'INT8输出跨平台不一致',
},
'rule_2': {
'name': '使用厂商SDK',
'description': '必须使用芯片厂商的量化工具链',
'reason': 'NPU会静默忽略外部量化参数',
},
'rule_3': {
'name': '验证逐样本一致性',
'description': '部署前用同一测试集验证各平台输出',
'reason': 'top-1准确率掩盖了逐样本差异',
'threshold': '跨平台一致率>98%',
},
'rule_4': {
'name': '关键路径冗余',
'description': '安全关键决策不依赖单一INT8模型',
'reason': 'INT8预测存在平台间不确定性',
},
'rule_5': {
'name': 'FP32回退',
'description': '当INT8输出不确定时回退到FP32',
'reason': 'FP32跨平台完全一致(1000/1000)',
},
}

DEPLOYMENT_MATRIX = {
'QCS8255': {
'sdk': 'Qualcomm QNN SDK',
'quantization': 'QNN quantizer (INT8)',
'calibration': '需要代表性数据集校准',
'verification': '必须验证精度下降<2%',
},
'TI TDA4': {
'sdk': 'TI TIDL',
'quantization': 'TIDL quantizer (INT8)',
'calibration': 'TIDL校准工具',
'verification': '必须验证精度下降<2%',
},
'NVIDIA Orin': {
'sdk': 'TensorRT',
'quantization': 'TRT INT8 calibrator',
'calibration': 'entropy校准',
'verification': '必须验证精度下降<2%',
},
}

量化验证流程

步骤 内容 通过标准
1. FP32基线 各平台FP32推理 100%一致
2. 芯片SDK量化 各芯片独立量化 —
3. 精度验证 各平台INT8 vs FP32 top-1下降<2%
4. 逐样本一致 跨平台INT8输出对比 一致率>98%
5. 延迟验证 各平台INT8推理延迟 满足实时性要求
6. 安全审查 不一致样本分析 无安全关键差异

行动建议

行动项 优先级 时间
建立跨芯片量化验证流程 P0 1月
QCS8255 QNN SDK量化管道 P0 2月
TI TDA4 TIDL量化管道 P1 2月
INT8→FP32回退机制 P1 1月
不一致样本安全分析 P2 3月

论文arXiv: 2609.16085
代码: github.com/yyshin-katech/embedded-ai-quantization-guide