INT指 低精度整型数据格式, 以INT8为例,它用8个比特(0和1)来存储一个数,有256种(即2的8次方)可能的取值。
zero point
而量化是将模型原本用高精度浮点数(如FP32)表示的参数和计算,转换为INT8这类低精度整数的过程,这是一个“压缩”手段,能让模型体积更小、运行更快,同时尽量不损失精度。
下面这张对比表直观地理解FP32与INT8的差异:
数据类型 | 存储方式 | 存储空间 | 取值范围 | 硬件支持 | 优点 | 缺点 |
|---|---|---|---|---|---|---|
FP32 | 单精度浮点数 | 4字节 | ±3.4e38 | 通用性强,几乎所有硬件都支持 | 精度高,数值表达范围大 | 占内存多,计算速度相对较慢 |
INT8 | 8位整数 | 1字节 | -128 ~ 127 | 依赖专用硬件加速指令集(如NVIDIA GPU的Tensor Cores) | 内存占用减少75%,计算速度可提升2-4倍 | 精度有损失,可能存在精度溢出或截断误差 |
PART 01
量化的原理
量化将一个FP32的张量(一个多维数组)映射到INT8的整数空间,这个映射过程主要靠以下三个核心概念:
整个量化的过程,简单来说分为三步:
scale
PART 02
主流量化方案
根据模型量化阶段的不同,主要分为以下两种方案,各有侧重。
训练后量化 (Post-Training Quantization, PTQ)
PTQ是在模型训练完成后,直接对已训练好的模型进行量化,这种方法 无需重新训练 ,实现速度快。
量化感知训练 (Quantization-Aware Training, QAT)
QAT是在模型训练或微调的过程中, 提前“模拟”量化带来的误差 ,让模型在低精度环境下学习,从而主动适应并弥补这种精度损失。
PART 03
常见量化格式
常见的量化数据格式及其特点整理如下:
数据格式 | 存储空间 | 优点 | 缺点 | 典型应用 |
|---|---|---|---|---|
FP32 | 4字节 | 精度高,数值范围广 | 内存占用高,计算速度慢 | 模型训练 |
FP16/BF16 | 2字节 | 精度较高,内存占用适中 | 相比INT8加速效果有限 | 模型推理、混合精度训练 |
INT8 | 1字节 | 内存占用减少75%,计算速度可提升2-4倍 | 精度有损失 | 模型推理、边缘端部署 |
INT4 | 0.5字节 | 内存占用极低 | 精度损失更大 | 模型推理、极端压缩场景 |
目前量化方法主要以INT8和INT4为主,随着硬件发展,FP8、FP4等格式也在逐渐兴起。
PART 04
硬件注意事项
不同的硬件对量化的支持程度差异巨大,直接决定了量化后的模型能否真正跑起来。
NVIDIA GPU (主流平台)
Intel CPU
INT8量化主要依赖 VNNI(Vector Neural Network Instructions) 指令集加速。此技术从 第3代至强可扩展处理器 起得到支持。
AMD GPU / 其他硬件
部分推理框架(如vLLM)对AMD GPU的INT8支持尚不明确,需要确认具体框架版本。
特定硬件(如Google TPU、AWS Inferentia、Qualcomm Hexagon DSP)对INT8量化的支持差异很大,部署前务必仔细查阅相关文档。
PART 05
软件注意事项
主流框架及工具链
torch.quantization
torch.ao.quantization
PART 06
实践建议
PART 07
总结
综合来看,INT8量化压缩术,关键在于在 模型精度、运行效率和实现成本 之间找到最佳平衡。
评估维度 | 方案一:训练后量化 (PTQ) | 方案二:量化感知训练 (QAT) |
|---|---|---|
研发投入 | 低 | 中高 |
精度损失 | 较小 | 极小(通常<1%) |
实施复杂度 | 低(无需重新训练) | 中高(需修改训练流程) |
项目周期 | 数小时至数天 | 数天至数周 |
最佳实践 | 快速原型验证、资源受限场景 | 高精度要求的任务(如医疗、自动驾驶) |
对于 VLA清洁机器人项目 ,如果追求 快速落地和资源效率 ,PTQ通常是更合适的起点,如果后续发现精度无法满足清洁要求,再考虑切换到QAT方案。
