你想象过这样的场景吗?搬家时,衣柜里几十件厚羽绒服占满了三个巨大的收纳箱,货车跑一趟都装不下。有经验的搬家师傅会拿出真空压缩袋,把羽绒服压成一块块薄饼,原本三个箱子装下的东西,一个箱子就够了——虽然衣服有点皱,但到了新家抖一抖、挂一挂,照样暖和。 大模型推理加速里的 INT8 量化,做的就是这件事。大模型工作时,大脑里存着的“记忆”(权重)默认用 FP32 格式记录——每个数字都用 4 字节的“大箱子”单独装。而 INT8 量化,就是把这些记忆从 4 字节的箱子压缩进 1 字节的压缩袋,让同样的显存装下 4 倍的内容,让 GPU 在同样时间内处理更多请求。代价是“衣服皱了一点”——精度有轻微损失,但换来的却是推理速度的大幅提升和成本的直线下降。 这个过程的关键,在于找到正确的“压缩比例”(scale)和“袋子拉链的位置”(zero point),还要用“旧衣服样本”(校准数据集)试压一次,确保压缩方案稳妥。接下来,我们就跟着搬家师傅,一步步拆解 INT8 量化的全部秘密。
对 AI 从业者而言,INT8 量化是部署大模型时必须掌握的看家本领——它直接决定你的模型能否在有限 GPU 上跑得动、跑得快、跑得便宜,是通往工业级推理优化的第一把钥匙。
可视化演示
展示FP32到INT8的量化映射过程、对称与非对称量化策略对比及精度与加速的权衡分析,支持映射、策略、权衡三种模式切换。
本节配有交互动效(进入视口后自动加载,约 3KB)。
量化映射:FP32→INT8值映射 连续浮点值→256个离散整数bin Scale和Zero Point决定映射精度 q = round(x / scale) + zero_point 离群值会拉大范围降低正常值量化精度。
数据格式之争
搬家公司仓库里,每个货架都摆着同样的收纳箱——四四方方,占四个格子(FP32,32 位浮点数,占 4 字节)。这种箱子做工精细,能装下任何尺寸的衣物,就连 3.14159265 这种拖着小尾巴的长度也能精确记下。但问题是,一个 1750 亿参数的大模型,拥有 1750 亿个这样的箱子,把整个仓库塞得满满当当,光是搬运就要花掉大量油费和时间。
INT8 量化做的第一件事,就是换上“1 字节小袋”。这种压缩袋只有原来四分之一的空间(8 位整数,只能记录 -128 到 127 的整数),但它能把 32 位浮点数里那些多余的小数尾巴全部压平。原本占 4 个格子的箱子,现在只占 1 个格子——这就是 75% 显存节省的根本来源。
有人会问:数字被压成整数后,3.14 变成 3,1.618 变成 2,信息不是丢了吗?没错,会有损失。但大模型的权重并不需要每个数都精确到小数点后八位——就像羽绒服压扁之后,保暖性能几乎不受影响。关键是要在压缩比例和还原度之间找到平衡点。
换上了压缩袋,仓库瞬间空出四分之三的空间。但光换袋子还不够——你还得知道“多大的衣服用多大力气压”,这正是下一节 scale 和 zero point 要解决的问题。
- INT8 字节数INT8 是 8 位整数,在计算机中固定占用 1 个字节。
- FP32 字节数FP32 是 32 位单精度浮点数,固定占用 4 个字节。
- 计算比值两者相除得到压缩率。
尺度与零点
搬家师傅手里有一件关键工具:一把卷尺。衣服大了就多压一点,衣服小了就少压一点——这把卷尺,就是量化里的 scale(缩放因子)。它的作用,是把 FP32 的连续实数区间“翻译”成 INT8 的整数格子。每一个整数格子占据多宽的现实数值范围,由 scale 决定。
但光有 scale 还不够。想象一个场景:FP32 的数值范围是 [-2.0, 6.0],最左边是负的,最右边是正的。用 INT8 的 [-128, 127] 去对应时,如果直接从 0 开始对齐,浮点数的"0"在整数空间里可能落在第 43 格上——这就是 zero point(零点) 的来历:它表示浮点 0 对应到整数轴上的哪个位置,负责让实数空间的零点和整数空间的零点对齐。
有了 scale 和 zero point,就形成了完整的“打包-拆包”闭环。打包(量化)时,用浮点数值除以 scale 再四舍五入,然后加上 zero point;拆包(反量化)时,把这个过程倒过来。在推理时,矩阵乘法可以全部在整数空间进行——就像打包好的行李在传送带上飞快流转,只有最后需要看结果时才拆开看一眼。
卷尺和拉链位置都确定了,搬家师傅就能给所有衣物统一打包。但下一个问题来了:衣柜里的衣服有的偏大有的偏小,分布不对称,这时该怎么办?
r 映射成 INT8 整数 q;第二个公式是逆运算,把整数还原成浮点数。scale 是缩放比例,zp 是零点偏移。- 量化正向映射将实数
r除以 scale,把连续值压缩到“每格”的大小,然后四舍五入取整。 - 零点对齐加上 zero point(zp),修正浮点 0 与整数 0 的偏移。
- 反量化还原把整数
q减去 zp,再乘回 scale,恢复为近似的浮点数。
对称与非对称
观察一下你家的衣柜:冬天的厚外套挂在左边,夏天的短袖挂在右边,中间的分界线正好是“零”的位置——这就是对称量化(Symmetric Quantization)。对称量化假设数据在正负方向上是均匀分布的,因此把浮点数的刻度对称地映射到 [-127, 127] 的整数区间。它的优点是公式简单、计算快,但缺点是:如果数据实际集中在 [0, 6.0](全是正值),对称映射会浪费一半的整数格子,导致精度下降。
再看另一种情况:你的衣柜里全是厚重的羽绒服,没有一件短袖——浮点数值全部落在正半轴。这时如果还用对称量化,相当于把半个衣柜空着不用,显然很浪费。非对称量化(Asymmetric Quantization) 就是专门应对这种“偏科”分布的:它允许最大值和最小值各自独立确定,不要求以 0 为中点,利用 zero point 来精确对齐。
在实际的大模型部署中,工程师通常对权重使用对称量化(因为训练好的权重通常近似关于 0 对称),而对激活值(每一层的输入输出)使用非对称量化(因为激活经过 ReLU 等激活函数后往往全是正值,范围严重偏斜)。这种“区别对待”就像搬家师傅对不同材质的衣物分类处理:羽绒服真空压缩,西装挂起来防皱。
对不同材质的衣物采用不同方案后,精度提升立竿见影。但这里有一个隐藏前提:你怎么知道衣柜里只有羽绒服没有短袖?这就需要在打包前“打开柜门看一眼”——校准数据集登场了。
- 对称量化尺度取浮点数绝对值的最大值,除以 127,得到每个整数格代表的数值宽度。
- 对称量化映射直接除以 scale 取整,zero point 恒为 0。
- 非对称量化尺度用最大值减最小值得到总宽度,除以 255(INT8 全部格子数)。
- 非对称量化映射减去最小值后再缩放,保证最低值映射到 0。
校准数据集
搬家师傅经验再丰富,也必须在动手前打开每一个衣柜,实际看看里面装了什么。如果只看一眼就凭经验决定压缩比例,很可能把丝绸衬衫塞进真空袋压出褶皱。校准数据集(Calibration Dataset) 就是这个“打开衣柜看一眼”的动作——用一小批有代表性的真实输入,让模型“试跑”一遍,记录每一层权重和激活值的真实数值范围。
校准集的选择直接影响量化效果。它不要求像训练集那样庞大——通常几百到几千条样本就足够——但必须有代表性:要覆盖模型在生产中会遇到的各种输入形态。比如一个中文对话模型,校准数据就应该涵盖新闻、问答、闲聊、代码等不同类型的话语。如果只拿代码样本做校准,模型回答日常对话时就会因数值范围估计不准而精度暴跌。
校准的核心流程分三步。第一步,喂入校准数据,让模型正常前向传播,同时记录每层权重的数值分布和激活值的 min/max。第二步,根据记录的分布,用我们前面学的公式计算每层的 scale 和 zero point。第三步,验证——用量化后的模型跑一组测试数据,观察精度损失是否在可接受范围内。如果损失过大,就得调整校准策略,比如换更大的校准集或改用非对称量化。
校准完成,scale 和 zero point 全部确定,所有“衣物”都按规格压好。但这套流程真正神奇的地方在于:它究竟为什么能让推理变快?下一节我们拆开 CPU/GPU 的引擎盖看看。
r_i 是 FP32 时的输出,\hat{r}_i 是量化后的输出,误差越小说明量化方案越成功。- 逐样本误差对每个样本,计算量化前后输出的相对差。
- 取平均对所有校准样本的误差求和并取平均。
- 安全系数分母加上一个极小值
\epsilon,防止除零。
推理加速秘密
假设你是快递分拣中心的调度员。传送带上原本传送的是巨大的、形状不规则的笨重箱子(FP32),传送速度慢,传送带负载也高。现在所有包裹都换成了规整的真空压缩袋(INT8),尺寸统一、重量减轻,传送带每秒能传的包裹数量翻了数倍——这就是 INT8 量化加速推理的直观画面。
加速的第一个来源是矩阵乘法整数化。大模型推理的核心就是无数次矩阵乘法:Y = WX + b。在 FP32 下,每次乘加都需要浮点运算单元处理;换成 INT8 后,乘加运算全部变成整数运算,而 GPU 的整数运算单元通常比浮点单元更快且吞吐更高,计算密度显著上升。
第二个来源更关键:显存带宽的缩减。大模型推理(尤其自回归生成)的瓶颈往往是“吃不饱”——GPU 计算能力充足,但权重从显存搬运到计算单元的速度跟不上。这个现象叫 memory-bound。权重换成 INT8 后,每个参数需要搬运的数据量从 4 字节降到 1 字节,同样的带宽单位时间能搬 4 倍的权重,内存瓶颈被大幅缓解。
第三个来源是批处理吞吐量的提升。假设一块 GPU 的显存是 40GB,FP32 下只能同时塞进 10 个请求,INT8 量化后同样的显存可以同时塞进约 39 个请求(扣掉其他开销)。推理引擎的吞吐量(每秒处理的请求数)几乎线性提升,单次请求的响应延迟也随之下降。
传送带提速了,吞吐量上去了,但细心的工程师会问:那些被压皱的衬衫怎么办?精度到底掉了多少?这就是我们最后一节要谈的权衡艺术。
- 带宽降低因子每个权重从 4 字节降到 1 字节,搬运速度理论上快 4 倍。
- 反量化开销量化推理不是完全不用浮点,部分中间结果需要转回浮点,带来约 30%-50% 的开销。
- 最终加速比两者相除,得到约 2.7-3 倍的实际加速。
精度与速度权衡
任何压缩都有代价。把羽绒服压进真空袋,衣服会皱;把 FP32 压成 INT8,数值会失真。工程师的工作不是追求“零损失”——那在物理上不可能——而是确认损失发生在可接受的范围内。
量化误差的来源主要有三处。第一是舍入误差:3.14 变成 3,0.618 变成 1,每个数的精度都从 8 位小数降到了整数位。第二是截断误差:如果数值超出了 scale 定义的范围(比如某个权重是 200,但 scale 把最大范围定为 127),超出的部分被直接“剪掉”。第三是累积误差:单层的误差看似微小,但大模型有几十上百层,误差逐层放大,最终可能影响输出质量。
控制误差的常见策略包括:选择有代表性的校准集(让 scale 更贴合真实分布)、对关键层(如 attention 的输出层)保持 FP32 精度、混合使用不同量化策略、以及在量化后做短期的任务特定微调(PTQ-QAT 混合方案)。业界经验表明,对于大多数任务,INT8 量化后的精度损失可以控制在 1%-3% 以内——相当于羽绒服压完抖一抖就恢复了 95% 的蓬松度。
所以,INT8 量化的本质不是“要不要损失精度”的问题,而是“用多大损失换多少速度”的工程决策。聪明的工程师知道:羽绒服压皱了可以抖开,只要不把衣服撑破——量化同理,控制在可接受范围内的精度损失,换来的是成倍的推理速度与成本节省,这才是大模型规模化落地的核心智慧。
L 是模型层数,量化误差随层数增加而累积(与 \sqrt{L} 成正比),理解这个关系才能判断量化方案的可靠性。- 单层误差每个格子的宽度除以 127,就是单个数值的最大绝对误差。
- 范围影响实际误差还取决于数值在格子内的位置,最大不超过半格。
- 层间累积误差像随机游走一样随层数累计,用均方根逼近。
AI 应用场景
用 TensorRT-LLM 部署大模型推理服务
阶段:模型部署与推理优化
解决的问题:大模型权重动辄上百 GB,FP32 部署下单张 A100 只能同时服务个位数用户,GPU 显存和带宽成本极高。INT8 量化让同一块 GPU 服务更多请求,推理成本直接砍半。
具体案例:某 AI 公司需要在一台 8×A100 服务器上部署 70B 参数的对话模型。原始 FP32 权重占 280GB,8 张卡几乎满载还只能支撑 40 并发。用 TensorRT-LLM 对权重做 INT8 量化后,权重压缩至 70GB,同一批 GPU 能支撑 150+ 并发,服务成本下降约 60%。
vLLM 中的 KV Cache 量化提升长对话吞吐
阶段:推理时的显存优化
解决的问题:长对话场景中,缓存的 key/value(KV Cache)占用大量显存,导致 batch size 受限、吞吐量上不去。对 KV Cache 做 INT8 量化,可显著增加可缓存的 token 数。
具体案例:某客服机器人平均每轮对话长度 2000 token,FP32 缓存下 24GB 显存只能支撑 32 路并发;对 KV Cache 做 8 位量化后同样显存支撑 80 路并发,用户等待时间从 3 秒降到 1.2 秒。
边缘设备端侧部署大模型
阶段:端侧模型推理
解决的问题:手机、智能音箱等端侧设备显存和算力极其有限,FP32 模型根本无法运行。INT8 量化是端侧推理的事实标准。
具体案例:某手机厂商在旗舰机型上端侧部署 7B 参数助手模型。FP32 模型体积 28GB,远超手机运存;INT8 量化后仅 7GB,配合 NPU 加速,首次实现了离线实时对话。
Python 演示
import numpy as np def symmetric_quantize(tensor): """对称 INT8 量化:以 0 为中心映射到 [-127, 127]""" max_abs = np.max(np.abs(tensor)) scale = max_abs / 127.0 q = np.round(tensor / scale).astype(np.int8) return q, scale def asymmetric_quantize(tensor): """非对称 INT8 量化:用 min/max 划定区间并引入 zero point""" min_val = np.min(tensor) max_val = np.max(tensor) scale = (max_val - min_val) / 255.0 q = np.round((tensor - min_val) / scale).astype(np.int8) return q, scale, min_val def fake_dequantize(q, scale, zero=0): """反量化:把 INT8 整数还原成近似浮点数""" return (q.astype(np.float32) - zero) * scale def mse_error(original, reconstructed): """均方误差:量化前后差异越小越接近原值""" return np.mean((original - reconstructed) ** 2) def simulate_int8_inference(weights, activations): """模拟 INT8 推理:量化 -> 整数矩阵乘法 -> 反量化""" w_q, w_scale, w_zero = asymmetric_quantize(weights) a_q, a_scale, a_zero = asymmetric_quantize(activations) # 整数乘法(符合 INT8 推理加速的本质) out_q = w_q.astype(np.int32) @ a_q.astype(np.int32) # 反量化还原到浮点域 out = (out_q - w_zero * a_q.shape[1]) * (w_scale * a_scale) return out, out_q if __name__ == "__main__": np.random.seed(42) # 模拟一个 3x3 的权重矩阵和 3x5 的输入特征 weights = np.random.randn(3, 3) * 0.5 activations = np.random.randn(3, 5) * 0.8 # FP32 原始输出 fp32_out = weights @ activations # INT8 量化推理 q_weights, w_scale = symmetric_quantize(weights) q_act, a_scale, a_min = asymmetric_quantize(activations) # 整数矩阵乘法(乘加都在 INT8/INT32 域) int_out = q_weights.astype(np.int32) @ q_act.astype(np.int32) # 反量化 deq_out = (int_out * w_scale * a_scale) # 对比精度 mse = mse_error(fp32_out, deq_out) print("FP32 输出:\n", fp32_out) print("INT8 反量化输出:\n", deq_out) print("量化 MSE 误差:", round(mse, 6)) print("INT8 存储占比: {:.1%}".format(1 / 4))
symmetric_quantize(tensor)对称量化:计算max_abs / 127得到 scale,然后整体除以 scale 取整,适合权重这类关于 0 对称的分布。asymmetric_quantize(tensor)非对称量化:用(max - min) / 255计算 scale,同时保留 min 值作为零点偏移依据。int_out = q_weights.astype(np.int32) @ q_act.astype(np.int32)核心加速点:矩阵乘法完全在 INT8 → INT32 的整数域完成,避免浮点运算。deq_out = (int_out * w_scale * a_scale)反量化:将整数结果映射回浮点域,公式来自r = scale × q。mse_error评估量化精度损失,数值越小说明压缩方案越好,是工程中判断量化是否可用的关键指标。
常见误区
误区“量化不就是把 3.14 变成 3、把 2.99 变成 2 吗?那精度肯定崩了。” 很多初学者认为量化就是粗暴截断小数,因此极度怀疑其可用性。
正解真正的量化不是简单截断,而是先通过 scale 和 zero point 把整个数值分布“平移 + 缩放”到整数空间。这类似于搬家前先把衣服装进真空袋再抽气,而不是直接把衣服揉成团塞进小盒子。权重分布整体被映射到 [-127, 127] 或 [-128, 127] 的完整范围内,精度损失远小于直接截断。
为何常见:因为“量化”这个词听起来像“四舍五入”,而人们把四舍五入等同于丢精度。实际上,量化是有全局视野的重新标定。
误区“为了保证 scale 算得准,我把所有训练数据都拿去校准,这样总该没问题了吧?” 初学者直觉上认为数据越多越精确。
正解校准不是训练,不需要看全部数据。校准的核心目标是估计数值范围(min/max),几千张有代表性的样本通常已经足够。数据过多反而可能引入极端离群值,让 scale 被拉大,导致正常数值的量化精度下降。过量校准数据还会拖慢部署周期,毫无必要。
为何常见:因为人类习惯了“数据越多模型越准”的训练直觉,但校准是统计分布,不是优化参数,过度采样反而引入噪声。
误区“我学会了对称量化,就直接把所有权重和激活都对称量化了,一劳永逸。” 不少工程师图省事只用一个策略打天下。
正解实际的量化工程必须分层制定策略。权重通常关于 0 对称(适合对称量化),而激活值经过 ReLU 后非负(适合非对称量化);attention 输出层等敏感层可能需要保持 FP32,或者用更高 bit 的量化。优质方案往往是“混合精度量化”。
为何常见:因为教程往往用一个统一公式示例,让人误以为所有层可以共用一套 scale 和 zero point。
误区“量化精度肯定会差,我只能重新训练模型来修复损失,成本太可怕了。” 因此很多人不敢尝试量化。
正解当前主流的 INT8 量化大多采用 训练后量化(PTQ),不需要重训练。只要校准集选得好、量化策略得当,绝大多数模型的精度损失可控制在 1%-3% 内。只有对精度极度敏感或分布极度偏斜的模型,才需要引入量化感知训练(QAT)。工程上应优先尝试 PTQ,成本最低。
为何常见:因为听到“精度损失”就联想到“需要训练补偿”,忽视了 PTQ 这种轻量级方法的有效性。
误区“我把模型改成 INT8,推理速度一定快 4 倍。” 学生看到“存储省 75%”就以为速度也是 4 倍。
正解实际加速取决于模型的瓶颈类型。如果模型是计算密集型的(算力是瓶颈),INT8 的加速来自整数运算效率提升,通常为 1.5-2 倍;如果是显存带宽密集型(大模型推理的常态),加速来自数据搬运量降低,可达 2-3 倍。但若实现得不好(比如频繁反量化),加速比甚至可能不足 1.5 倍。
为何常见:人们把“存储压缩率”直接等同于“计算加速比”,忽略了推理链路中多个环节的额外开销。
面试题
Q1. INT8 量化相比 FP32 每个权重占用的存储空间减少多少?
- A.25%
- B.50%
- C.75%← 正确答案
- D.87.5%
答案:C。FP32 占 4 字节,INT8 占 1 字节,每个权重的存储从 4 字节降到 1 字节,减少 75%。这与“占用的空间只剩四分之一”等价,C 正确。
Q2. 在 INT8 量化中,scale(缩放因子)的作用是什么?
- A.决定浮点数的符号位
- B.把 FP32 数值范围映射到 INT8 整数范围的比例尺← 正确答案
- C.压缩模型的层数
- D.加快训练时的梯度下降
答案:B。scale 相当于搬家时的“压缩比例”,决定了每个整数格子代表多大的实数范围。它负责将连续的 FP32 区间映射到离散的 INT8 整数空间,是量化的核心参数。
Q3. 对称量化与非对称量化的核心区别是什么?
- A.对称量化速度快一倍
- B.非对称量化需要 zero point,对称量化不需要← 正确答案
- C.对称量化精度一定更高
- D.非对称量化只适用于 GPU
答案:B。对称量化以 0 为中心映射,zero point 固定为 0;非对称量化允许最大值与最小值不对等,需要用 zero point 来对齐浮点 0 和整数 0 之间的偏移。因此核心区别在于是否需要 zero point。
Q4. 为什么激活值通常使用非对称量化而权重常用对称量化?
- A.激活值数量远多于权重
- B.激活值经过 ReLU 后多为正值,分布偏斜,非对称更适配← 正确答案
- C.权重的存储空间更大
- D.激活值必须用浮点运算
答案:B。大模型中大量使用 ReLU 等激活函数,输出多为非负值,数值分布明显偏向正半轴。此时若用对称量化会浪费一半整数格子,非对称量化能更精细地利用 INT8 的全部表达范围。而训练好的权重通常近似关于 0 对称,因此适合对称量化。
Q5. 校准数据集(Calibration Dataset)的主要用途是什么?
- A.重新训练模型参数
- B.统计每层权重和激活值的数值范围以确定 scale 和 zero point← 正确答案
- C.替代测试集评估最终精度
- D.扩充训练数据提升模型能力
答案:B。校准集用于“试跑”模型,记录每层中间数据的 min/max 和分布,进而推导出合适的 scale 和 zero point。它不是用来训练或测试模型的,而是为量化参数的确定提供依据。
Q6. INT8 量化加速大模型推理的最主要原因是什么?
- A.减少了显存带宽压力,相同时间能搬运更多权重← 正确答案
- B.完全消除了浮点运算
- C.模型参数变少
- D.GPU 频率自动提高
答案:A。大模型推理通常是 memory-bound,瓶颈在于权重从显存搬运到计算单元。INT8 将每个权重从 4 字节减到 1 字节,单位时间可搬运的权重数量变为 4 倍,这才是加速的核心来源。B 错误——反量化仍需要浮点运算。
Q7. 对于 1750 亿参数模型,FP32 部署需要约 700GB 显存,INT8 量化后约需多少?
- A.175GB← 正确答案
- B.350GB
- C.87.5GB
- D.700GB
答案:A。1750 亿参数 × 1 字节 = 1750 亿字节 ≈ 175GB(用 1B=10^9 计算时约为 175GB;用 2^30 计算则为约 163GiB)。核心是 INT8 每个参数 1 字节,比 FP32 少 4 倍。
Q8. 关于量化误差的来源,下列说法正确的是?
- A.舍入误差:浮点数取整时丢失小数部分← 正确答案
- B.截断误差:超出 scale 范围的数值被强制裁剪← 正确答案
- C.累积误差:多层量化误差叠加放大← 正确答案
- D.训练误差:模型在训练集上过拟合
答案:ABC。A、B、C 都是量化误差的典型来源。D 是训练阶段的概念,与量化误差无关。量化误差的本质是“压缩过程的信息丢失”,类比真空袋压衣服的皱痕,多层堆叠后褶皱更明显。
Q9. 下列哪些策略可以帮助控制 INT8 量化的精度损失?
- A.使用有代表性的校准数据集← 正确答案
- B.对敏感层(如 attention 输出层)保持 FP32← 正确答案
- C.混合使用对称与非对称量化策略← 正确答案
- D.将校准集扩大到全量训练数据
答案:ABC。A 保证 scale 贴合真实分布;B 对关键层不做量化,避免误差累积;C 根据不同层的分布特性选择最优方案。D 错误:校准数据过多反而可能引入离群值,导致 scale 失真,并不一定提升效果。
Q10. 关于 INT8 量化推理,下列说法正确的是?
- A.矩阵乘法主要在整数域完成,但结果可能需要反量化← 正确答案
- B.实际加速比通常为 2-3 倍而非 4 倍← 正确答案
- C.权重和激活值可以使用不同的 scale← 正确答案
- D.量化后模型无需任何校准即可直接部署
答案:ABC。A 正确:核心运算用 INT8/INT32 整数乘法,最终输出需反量化回浮点。B 正确:因反量化开销和部分层保持 FP32,实际加速达不到理论 4 倍。C 正确:权重和激活的数值分布不同,scale 独立计算。D 错误:量化必须经过校准确定 scale 和 zero point,不能跳过。