想象你出远门旅行,原本拖着一个28寸的大行李箱,里面塞满了衣服、相机和各种杂物。可到了机场才发现,这家航空公司只允许随身携带一个登机小包,容量只有大箱子的四分之一。你有两条路可走:第一条,在值机柜台前手忙脚乱地把箱子里的东西硬塞进小包,能装多少算多少(训练后量化PTQ);第二条,下次出发前就知道只能背小包,于是从收拾行李的第一刻起,就按小包的容量去挑选、折叠、压缩每一件物品(量化感知训练QAT)。AI模型落地到手机、摄像头、汽车芯片等边缘设备时,遇到的正是类似的问题:模型参数用32位浮点数(FP32)表示,内存占用大、计算速度慢;而部署场景只允许更紧凑的8位整数(INT8)表示。怎么把“大箱子”变成“小包”还不让东西坏掉?PTQ和QAT是两条最经典的路线。本文会带你从零看懂这两种方法的原理、实战对比、精度优化与部署流程,并用一个贯穿始终的“打包旅行”比喻,把量化这件事彻底讲透。

岗位关联

量化是模型压缩的基石技能。掌握PTQ与QAT的差异与选型,你就能在边缘端部署场景中独当一面,用最少的内存跑最快的推理,成为一名真正懂“落地”的AI工程师。

目录
  1. 可视化演示
  2. 量化基础:小包的度量衡
  3. PTQ流程:机场的紧急换包
  4. QAT原理:出发前的按包打包
  5. 精度对比:谁的包更贴身
  6. 精度优化:娇贵物品另放大包
  7. 部署Pipeline:从打包到登机
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示训练后量化PTQ与量化感知训练QAT的工作流差异、INT8量化精度对比、以及端到端量化部署流水线。切换模式探索不同量化策略。

本节配有交互动效(进入视口后自动加载,约 3KB)。

PTQ与QAT方法论对比 PTQ:训练后直接量化,仅需少量校准集(100-500张),快速部署但可能有精度损失 QAT:训练中模拟量化噪声,模型学会适应量化误差,精度更高但需要完整训练数据和更多时间 PTQ = quantize(trained_model), QAT = train(quantize_aware) PTQ重速度QAT重精度,按场景选择

量化基础:小包的度量衡

想象你终于接受了只能背小包的事实,那么接下来要解决的是:小包里的空间怎么量?衣柜用厘米、地图用公里,不同场景需要不同的“度量衡”。浮点数世界(FP32)像一把毫米精度的尺子,能标出任何细微的差别;而INT8只有256个刻度,像一把只有厘米格的粗尺子。把毫米尺上的读数换算到厘米尺上,就是“量化”。换算时两个参数最关键:Scale 决定一格有多宽,ZeroPoint 决定尺子的零点对齐在哪里。

落到神经网络里,权重 w 原本是连续浮点数,量化后变成整数 q。“反量化”时再用同样的规则换回近似值。整个映射关系听上去复杂,本质就是小学学过的“按比例缩放后再取整”。

有了这套度量衡,28寸箱子里的每一件物品都能在小包里找到对应的“格子”,但精细度终究有限。格子越宽,塞进去的东西就越容易“挤压变形”。所以下一步要思考的,是怎样尽量让重要的东西不被压坏。

q=round⁡(rs)+z,s=rmax⁡−rmin⁡2b−1q = \operatorname{round}\left(\frac{r}{s}\right) + z, \quad s = \frac{r_{\max} - r_{\min}}{2^{b} - 1}
这个公式是量化的总开关:s 是每格的宽度,z 是零点偏移,round 表示就近取整。熟悉它,后面的所有方法都围绕它展开。
  1. 整数码 qq 是量化后的整数,也是模型部署后真正参与计算的数值。
    q=round⁡(rs)+zq = \operatorname{round}\left(\dfrac{r}{s}\right) + z
  2. 原始浮点值 rr 是量化前的权重或激活值,可以看作大箱子里的物品体积。
    r=(q−z)×sr = (q - z) \times s
  3. 缩放尺度 ss 表示每个量化格子的宽度,由数据最小值和最大值共同决定。
    s=rmax⁡−rmin⁡2b−1s = \dfrac{r_{\max} - r_{\min}}{2^{b} - 1}
  4. 零点 zz 把浮点分布中的 0 映射到整数域,保证 0 经过量化后还能精确还原。
    z=round⁡(−rmin⁡s)z = \operatorname{round}\left(-\dfrac{r_{\min}}{s}\right)

PTQ流程:机场的紧急换包

飞机马上就要起飞了,你只能从大箱子里抓取最要紧的物品塞进小包。此时你心里得有个清单:护照、钱包、手机充电器必须带走,纪念品可以舍弃。PTQ(训练后量化)就是这个“紧急换包”的过程——模型已经训练完毕,权重和激活的分布已经固定,我们能做的只是挑选一个“优先打包清单”,然后硬塞。

这个清单就是校准集。校准集是一小批代表真实业务场景的数据,喂给模型跑一遍前向推理,统计每一层激活值的范围,从而确定合理的 Scale 与 ZeroPoint。校准集选得好,量化误差就小;选得不好,相当于旅行时只按“最好看”的衣物打包,结果发现护照根本没塞进去。除了选校准集,PTQ 还会做误差补偿:计算量化前后输出的偏差,用校正手段尽量把偏差拉回来,就像把折皱的衣服用压缩袋压平。

PTQ 的优势是“快”——不用重新训练,几小时甚至几分钟就能完成。但它有一个致命软肋:打包时你不知道哪些物品其实根本塞不进格子,只能事后补救。如果你手里的模型对精度要求特别高,这种“临时硬塞”的方式就比较容易翻车。

min⁡s,z∑i=1N(xi−x^i)2,x^i=dequant⁡(qi,s,z)\min_{s, z} \sum_{i=1}^{N} \left( x_i - \hat{x}_i \right)^2, \quad \hat{x}_i = \operatorname{dequant}\left( q_i, s, z \right)
这个公式表达了 PTQ 的目标:在给定校准样本下,找到一组 s 和 z,让反量化后的值尽可能接近原始值。
  1. 误差平方和对 N 个校准样本逐个计算量化前后的差距,并求平方和,作为打包质量的“总评分”。
    ∑i=1N(xi−x^i)2\sum_{i=1}^{N} \left( x_i - \hat{x}_i \right)^2
  2. 反量化还原量化后的整数再乘回尺度、加回零点,得到近似值。
    x^i=(qi−z)×s\hat{x}_i = (q_i - z) \times s
  3. 最小化目标不断调整 s 和 z,让总评分最低,也就是尽量少压坏物品。
    min⁡s,z∑i=1N(xi−x^i)2\min_{s, z} \sum_{i=1}^{N} \left( x_i - \hat{x}_i \right)^2

QAT原理:出发前的按包打包

现在假设你早知道只能背小包出门。你会怎么做?你会在收拾时反复试装:这个背包能塞下什么,塞进去后能不能顺利背上。QAT(量化感知训练) 就是让模型在训练阶段就“试背小包”。它在前向传播时模拟量化的效果——把权重先量化成INT8、再反量化回浮点,让模型看到“自己在小包里长什么样”,然后像普通训练一样更新参数。

但这里有个棘手的问题:量化公式里的 round 取整操作不可导,就像你用力把衣服压进包里时,没法用数学精确描述“哪件衣服破了个洞”。怎么办?研究者提出了 STE(直通估计器):反向传播时,把量化层当作恒等映射,让梯度直接穿透过去。也就是说,虽然前向计算时模型看到了被压皱的衣服,反向时却假装它还是平整的,继续按原样更新浮点权重。这样,模型在训练过程中逐步调整自己的“形状”,最终学会在量化误差存在的情况下依然保持良好表现。

由于 QAT 在训练时就“接受”了量化误差,最终模型像是为小包量身定制的行李,每一件物品都恰好放进该放的格子里。代价是训练周期长、需要较多数据,就像出发前反复试背了好几周——但上飞机的那一刻,你知道一切都刚刚好。

∂L∂w≈∂L∂w~,w~=quant⁡(w)\frac{\partial L}{\partial w} \approx \frac{\partial L}{\partial \tilde{w}}, \quad \tilde{w} = \operatorname{quant}\left( w \right)
STE 是 QAT 的灵魂:前向用 quant(w) 模拟量化误差,反向却把梯度直接传给原始浮点权重,解决了取整不可导的问题。
  1. 近似梯度左边是真实想求的梯度,右边是可计算的近似值,两者用约等号连接。
    ∂L∂w≈∂L∂w~\frac{\partial L}{\partial w} \approx \frac{\partial L}{\partial \tilde{w}}
  2. 量化模拟前向计算时,将权重 w 替换为量化再反量化后的值。
    w~=quant⁡(w)=dequant⁡(quant⁡(w))\tilde{w} = \operatorname{quant}\left( w \right) = \operatorname{dequant}\left( \operatorname{quant}\left( w \right) \right)
  3. 梯度直通反向传播时不区分 w 和 w̃,梯度按恒等映射穿透量化层,直接更新原权重。
    ∂w~∂w≈1\frac{\partial \tilde{w}}{\partial w} \approx 1

精度对比:谁的包更贴身

现在我们站在登机口对比两条路线:PTQ 选手花了5分钟草草换包,包里衣服皱皱巴巴,但总算登机了;QAT 选手则从容地背着一个设计精巧的小包,所有物品井井有条。落地后你会选择哪种方式?答案取决于你的行李是什么。

量化误差的来源在两种方法中截然不同。PTQ 的误差主要来自“暴力压缩”:权重分布原本连贯,直接被256个格子打断,像一块完整的绸缎被剪刀剪成碎布。QAT 的误差则来自“磨合后的共识”:训练中模型自己调整了数值分布,让量化误差不再集中在关键路径上。因此,精度差异通常表现为:模型越大、权重分布越均匀,PTQ 越可能接近甚至媲美 QAT;反之,模型越小、结构越紧凑,PTQ 的精度损失就越明显。

成本对比同样直观。PTQ 只需一组校准数据和一次前向推理,几乎零成本;QAT 需要完整的训练流程、学习率调度和验证环节,成本高出数个量级。因此,实际选型有一个实用经验:先在部署环境跑一次 PTQ,看精度是否达标;如果差得不远,可以优先优化校准集和混合精度;如果差距很大,再考虑 QAT。这也是为什么“先 PTQ 后 QAT”成为工业界的黄金路线。

如果这个比值在你的任务指标容忍范围内,PTQ 的“快”就是最大优势;如果超出容忍范围,QAT 的“稳”便是唯一出路。理解了这个权衡,你就掌握了量化选型的密码。

ε=E[∣x−x^∣]E[∣x∣]\varepsilon = \frac{\mathbb{E}\left[ |x - \hat{x}| \right]}{\mathbb{E}\left[ |x| \right]}
这个相对误差公式是衡量“包贴不贴身”的客观标尺:误差越小,说明量化前后的输出越接近。
  1. 分子平均绝对误差:量化前后每个点差值的绝对值取期望,代表平均被压坏了多少。
    E[∣x−x^∣]\mathbb{E}\left[ |x - \hat{x}| \right]
  2. 分母原始信号强度:原值的绝对值期望,作为误差的参照基准。
    E[∣x∣]\mathbb{E}\left[ |x| \right]
  3. 比值误差占原始信号的比例,消除绝对数值大小的影响,让不同模型可对比。
    E[∣x−x^∣]E[∣x∣]\frac{\mathbb{E}\left[ |x - \hat{x}| \right]}{\mathbb{E}\left[ |x| \right]}

精度优化:娇贵物品另放大包

旅行包里放一台单反相机,你会直接把它和毛衣一起塞进夹层吗?当然不会——你会给相机单独配一个防震内胆,或者干脆把它拿在手上。量化精度优化也是同样的思路:不是所有层都同样脆弱,与其把所有层都压成8位,不如给“娇贵”的层开绿灯。

敏感度分析负责找出这些娇贵层:逐层量化、观察精度变化,灵敏度高的层对量化误差反应剧烈,灵敏度低的层随便折腾也没事。据此,混合精度量化策略为敏感层保留16位甚至32位,对不敏感层使用8位,在容量与精度之间取得平衡。更进一步,通道级量化不把整层看作一个整体,而是为不同卷积通道分别计算Scale,就像把背包划分出几个独立小隔间,易碎品和压缩衣物互不干扰。这些手段组合起来,往往能把手忙脚乱的PTQ精度拉回合格线,甚至逼近QAT。

当然,混合精度不是银弹。它会让部署链路的算子实现复杂度陡增,有些推理引擎甚至不支持任意混合组合。所以在实际工程中,优化顺序永远是:先压缩校准集,再尝试通道级量化,最后才考虑混合精度。

min⁡b1,…,bn∑i=1nbis.t.εmax⁡≤τ\min_{b_1,\dots,b_n} \sum_{i=1}^{n} b_i \quad \text{s.t.} \quad \varepsilon_{\max} \le \tau
混合精度量化的本质是一个受限优化:在精度不超标的前提下,让总位宽尽可能小。
  1. 目标函数最小化所有层的位宽之和,也就是整体包袱尽量轻。
    min⁡b1,…,bn∑i=1nbi\min_{b_1,\dots,b_n} \sum_{i=1}^{n} b_i
  2. 精度约束所有层叠加出的最坏误差必须小于阈值 τ,即相机不能摔。
    εmax⁡≤τ\varepsilon_{\max} \le \tau
  3. 位宽设计每个 b_i 的取值决定该层用多少位表示,敏感层取大值,钝感层取小值。
    bi∈{4,8,16,32}b_i \in \{4, 8, 16, 32\}

部署Pipeline:从打包到登机

把行李打包好,还只是旅行的一半。你还需要托运、安检、登机,整套流程环环相扣。量化部署的 Pipeline 同样如此,任何一个环节掉链子,模型都无法真正跑在边缘设备上。

一个标准的量化部署流水线包含四步。第一步 模型转换:把训练好的浮点模型转换为支持量化的格式,就像把行李从衣柜搬到打包台上。第二步 算子融合:将 Conv+BN+ReLU 等常见组合合并成一个算子,减少中间结果的存储与计算,类似把多件衣物叠成“一个卷”,压缩空间。第三步 校准与量化:喂入校准集统计分布,计算各层 Scale 与 ZeroPoint,并执行真正的INT8转换,这一步对应“正式称重装箱”。第四步 部署验证:在目标推理引擎(如 TensorRT、ONNX Runtime、TFLite)上加载量化模型,对比量化前后的精度与延迟,确定没有“违禁品”后才放行上线。

走完这四步,你才真正把“大箱子”变成了随身携带的“小包”,而且全程没有丢护照。流程成熟之后,PTQ 与 QAT 的选择、优化策略、验证指标都能沉淀为标准文档,让团队里任何人都能照着 SOP 完成一次高质量量化上线。

FP32 Model→fuseFused→calibrateINT8→verifyDeployed\text{FP32 Model} \xrightarrow{\text{fuse}} \text{Fused} \xrightarrow{\text{calibrate}} \text{INT8} \xrightarrow{\text{verify}} \text{Deployed}
这条流水线是你从“会量化”到“能上线”的路线图:每一步都有对应工具与检查项,缺一不可。
  1. 算子融合把浮点模型中的卷积、批归一化、激活融合为单一算子,减轻包装负担。
    FP32 Model→fuseFused\text{FP32 Model} \xrightarrow{\text{fuse}} \text{Fused}
  2. 校准量化用校准集确定量化参数,完成浮点到整数的映射。
    Fused→calibrateINT8\text{Fused} \xrightarrow{\text{calibrate}} \text{INT8}
  3. 验证部署在目标设备上检验精度与性能后,正式部署推理。
    INT8→verifyDeployed\text{INT8} \xrightarrow{\text{verify}} \text{Deployed}

AI 应用场景

边缘端人脸识别门禁的PTQ快速落地

阶段:模型压缩与部署优化

解决的问题:人脸识别模型动辄几十MB,门禁设备内存仅几百MB,直接部署浮点模型不仅内存吃紧,推理延迟也高达数百毫秒。传统方式要么裁剪模型牺牲精度,要么购买昂贵算力。采用PTQ后,只要准备一批覆盖昼夜、角度、光线变化的“校准集”,就能在几小时内把模型压到INT8,内存减少约75%,推理耗时降到几十毫秒,且精度损失控制在可接受范围。

具体案例:某社区门禁升级项目,原 ResNet18 人脸模型15MB,用1000张真实抓拍图作为校准集执行PTQ,模型压缩到4MB,在 RK3588 边缘盒子上跑通,识别准确率仅下降0.3%,顺利通过验收。

自动驾驶感知模型的QAT精度兜底

阶段:模型训练与量化感知微调

解决的问题:自动驾驶对感知精度要求极高,目标检测漏检一个行人都是事故。直接PTQ可能导致 mAP 下降超过5%,无法满足安全指标。改用QAT对已有预训练模型做量化感知微调,让模型在训练中适应INT8表示,精度损失可压回1%以内。

具体案例:某L2级辅助驾驶项目,YOLOv7检测模型PTQ后 mAP 下跌5.8%,随后用5000张自动驾驶场景数据做QAT微调,mAP 恢复至仅下降0.9%,最终部署在车载 Orin 平台上,端到端延迟满足实时性要求。

大模型端侧部署的混合精度实践

阶段:模型压缩与推理加速

解决的问题:大语言模型端侧部署时,部分关键层(如注意力输出层)对量化极其敏感,统一8位量化会明显影响生成质量。通过敏感度分析找到这些“娇贵层”,对它们保留16位精度,其余层使用8位,在内存与生成质量之间取得最佳平衡。

具体案例:某手机端 AI 助手接入7B大模型,采用混合精度量化后,内存占用从14GB降到4.2GB,端侧生成流畅度大幅提升,同时困惑度(perplexity)仅上升0.8,用户体验接近云端。

Python 演示

python61 行
import numpy as np  def generate_data():    rng = np.random.default_rng(42)    x = rng.uniform(-2.0, 2.0, 400)    true_w, true_b = 2.0, 1.0    y = true_w * x + true_b + rng.normal(0, 0.3, x.shape)    return x, y  def predict(w, b, x):    return w * x + b  def mse(pred, y):    return np.mean((pred - y) ** 2)  def fake_quantize(w, b, bits=4):    vals = np.array([w, b])    vmin, vmax = vals.min(), vals.max()    levels = 2 ** bits - 1    scale = (vmax - vmin) / levels    zero = np.round(-vmin / scale)    w_q = np.round(w / scale + zero)    b_q = np.round(b / scale + zero)    w_dq = (w_q - zero) * scale    b_dq = (b_q - zero) * scale    return w_dq, b_dq  def train(x, y, qat_on, epochs=80, lr=0.05):    w, b = 0.0, 0.0    for _ in range(epochs):        if qat_on:            w_dq, b_dq = fake_quantize(w, b)            pred = predict(w_dq, b_dq, x)        else:            pred = predict(w, b, x)        grad_w = np.mean(2 * (pred - y) * x)        grad_b = np.mean(2 * (pred - y))        w -= lr * grad_w        b -= lr * grad_b    if qat_on:        return fake_quantize(w, b)    return w, b  def main():    x, y = generate_data()    w_fp, b_fp = train(x, y, qat_on=False)    w_ptq, b_ptq = fake_quantize(w_fp, b_fp)    w_qat, b_qat = train(x, y, qat_on=True)    print("FP32 mse: %.6f" % mse(predict(w_fp, b_fp, x), y))    print("PTQ mse: %.6f" % mse(predict(w_ptq, b_ptq, x), y))    print("QAT mse: %.6f" % mse(predict(w_qat, b_qat, x), y))  if __name__ == "__main__":    main()
目的:用 NumPy 从零模拟 PTQ 与 QAT 的核心差异,展示在4位量化下 QAT 如何通过“前向模拟量化 + 梯度直接更新”获得更低的误差。
  1. fake_quantize(w, b, bits=4)把浮点权重和偏置先量化成整数、再反量化回浮点,模拟“小包挤压”的效果
  2. w_dq, b_dq = fake_quantize(w, b)QAT 前向计算前把权重“试装进小包”
  3. pred = predict(w_dq, b_dq, x)用模拟量化后的权重做预测,让损失函数感知量化误差
  4. grad_w = np.mean(2 * (pred - y) * x)对量化后的预测结果求梯度,相当于 STE 思想的简易实现
  5. w -= lr * grad_w梯度直接更新原始浮点权重,让权重逐渐适应量化后的分布
  6. w_ptq, b_ptq = fake_quantize(w_fp, b_fp)PTQ 不经过训练,训练完直接量化,误差无法被优化

常见误区

误区量化不就是把小数点后面的数字砍掉吗?0.7变成0,1.3变成1,这样模型不就变小了吗?

正解直接截断(truncation)会严重破坏数据分布。真正的量化需要先计算 Scale(每格宽度)和 ZeroPoint(零点偏移),再按比例映射到整数域,最后还能反量化回近似浮点值。就像把箱子里的物品按“厘米格”换算出格数,而不是直接把物品砍掉一块。没有 Scale 和 ZeroPoint,量化后的模型精度会断崖式下跌。

为何常见:小学数学里“取整”的概念太深入人心,很多人下意识把量化和四舍五入划等号,忽略了量化前后存在完整的映射与还原机制。

误区校准数据当然越多越准,我干脆把整整100万张训练图片都塞进去做校准,统计出来的分布一定最真实。

正解校准集的核心要求不是“大”,而是“有代表性”。如果校准集和真实部署场景的数据分布不一致,哪怕有一百万张也白搭;如果校准集足够覆盖真实分布,几百张甚至几十张就能算出可靠的 Scale。更关键的是,校准集需要经过前向推理来统计激活分布,样本越多耗时越长,而且大量冗余样本可能让统计被次要模式主导。

为何常见:人们习惯相信“数据越多越好”,但校准的目标是估计分布特征而非训练模型,样本的代表性比数量更重要。

误区既然叫“量化感知训练”,那肯定要像训练新模型一样从头开始,把整个训练流程再跑一遍。

正解QAT 完全可以复用预训练好的浮点模型权重,只需要在现有权重基础上做“量化感知微调”。通常做法是:加载预训练模型,插入伪量化节点,用较小的学习率再训练几个 epoch,让权重适应量化误差即可。这样既享受 QAT 的精度优势,又大幅降低训练成本。从零训练不仅没必要,还可能因随机初始化引入额外的不稳定。

为何常见:名字里的“训练”让人联想到从零开始,但实际工程中“微调”才是最常见的使用方式,类比于你已经会开车,QAT只是让你熟悉一辆新车。

误区既然有些层敏感,那我干脆把所有层都设为16位,个别特别敏感的设32位,这样精度肯定接近无损,还完成了量化任务。

正解混合精度量化的核心目标是在“总位宽最小”的前提下满足精度约束。如果所有层都设成16位,内存和算力节省非常有限,等于换汤不换药。真正的混合精度要基于敏感度分析,只把极少数“娇贵层”设为高精度,其余层保持8位甚至更低。此外,混合精度会显著增加推理引擎的实现复杂度,并非所有硬件都支持任意位宽组合。

为何常见:人们总想“既要又要”,忽略了混合精度的本质是在资源约束下做取舍,而不是在精度约束下放弃压缩。

面试题

Q1. 以下哪个选项正确描述INT8量化?

单选题 · easy

  • A.权重用8比特整数表示
  • B.浮点映射到8位整数域← 正确答案
  • C.用8个浮点数组合编码
  • D.只保留权重的符号位

答案:B。INT8量化的本质是把32位浮点权重映射到8位整数域,映射过程需要Scale和ZeroPoint两个参数。A选项描述的是量化后的结果形式,不是量化过程的定义;C选项是混淆编码方式;D选项只保留符号位会丢失全部数值信息,显然错误。

Q2. Scale参数在量化中的作用是?

单选题 · mid

  • A.决定量化映射的步长← 正确答案
  • B.决定零点偏移大小
  • C.表示数据的最小值
  • D.调整网络的学习率

答案:A。Scale决定每个量化格子代表多大的浮点范围,是映射的步长。ZeroPoint才负责零点偏移,数据最小值是计算Scale的输入而非Scale本身,学习率是训练参数与量化无关。

Q3. PTQ校准集最核心的要求是?

单选题 · mid

  • A.样本数量越多越好
  • B.覆盖真实部署时的数据分布← 正确答案
  • C.必须使用训练集数据
  • D.打乱标签的排列顺序

答案:B。校准集用于统计激活值分布,核心是代表性,即覆盖真实部署场景。数量多少并非关键,几百张高质量的校准图往往胜过百万张不相关数据。训练集数据如果与部署分布不一致,同样不适用。

Q4. QAT与PTQ的本质区别是?

单选题 · mid

  • A.需要修改网络结构
  • B.训练时模拟量化调整权重← 正确答案
  • C.不需要真实数据参与
  • D.只量化激活值的范围

答案:B。QAT在训练过程中前向模拟量化误差,反向通过STE更新权重,让模型主动适应量化。它不依赖修改网络结构,需要真实数据,同时会量化权重和激活,因此B正确。

Q5. 下列哪些属于QAT前向量化模拟的核心环节?

多选题 · mid

  • A.权重量化后再反量化← 正确答案
  • B.激活值量化模拟← 正确答案
  • C.删除所有残差连接
  • D.将梯度直接置零

答案:AB。QAT前向传播会对权重和激活都做“量化—反量化”的模拟,让模型感知量化误差。删除残差连接是网络结构改动,梯度置零会阻断训练,均不属于量化模拟范畴。

Q6. 以下哪些方法有助于提升PTQ的量化精度?

多选题 · hard

  • A.设计代表性强的校准集← 正确答案
  • B.按通道分别计算量化参数← 正确答案
  • C.用噪声打乱权重分布
  • D.敏感层用更高位宽量化← 正确答案

答案:ABD。代表性校准集让Scale更合理,通道级量化让每个通道有自己的度量衡,敏感层高位宽保护关键信息,都能减少PTQ误差。用噪声打乱权重只会破坏模型原有能力,无法提升精度。

Q7. 敏感度分析在混合精度量化中的作用是?

单选题 · mid

  • A.找出量化敏感度高的层← 正确答案
  • B.计算网络参数的总量
  • C.估计模型的推理延迟
  • D.判断数据是否需要归一化

答案:A。敏感度分析通过逐层量化并观察精度变化,找出对量化误差反应剧烈的层,这些层优先分配高位宽。参数总量、推理延迟、数据归一化都与敏感度分析无关。

Q8. STE(直通估计器)的核心作用是?

单选题 · mid

  • A.反向传播绕过不可导取整← 正确答案
  • B.正向传播跳过量化操作
  • C.用误差修正卷积核
  • D.将梯度放大到浮点范围

答案:A。量化取整函数不可导,STE在反向传播时把量化层当作恒等映射,让梯度直接穿透到原始浮点权重,从而完成参数更新。它不是跳过量化,也不是修正卷积核或放大梯度。

Q9. 以下哪种情况PTQ精度可能接近QAT?

单选题 · hard

  • A.模型较大且校准集代表性强← 正确答案
  • B.训练数据被完全丢弃
  • C.模型须用INT4量化
  • D.平台不支持整数运算

答案:A。模型较大时冗余参数较多,量化误差分散稀释,配合代表性校准集,PTQ精度往往能接近QAT。没有训练数据意味着无法做校准,INT4量化范围太窄误差大,平台不支持整数运算则根本无法部署。

Q10. 量化部署Pipeline的验证环节应当包含哪些内容?

多选题 · extreme

  • A.量化前后的精度对比← 正确答案
  • B.端到端延迟和吞吐测试← 正确答案
  • C.将浮点模型删除
  • D.设备内存占用检查← 正确答案

答案:ABD。验证环节必须确认量化后精度损失在可接受范围,并实测推理延迟、吞吐和内存占用是否满足部署要求。删除浮点模型属于发布清理操作,不是验证步骤,且应保留浮点模型以便回归对比。