小林是山城小馆的学徒,出门历练前,师傅送他一本厚得能砸核桃的手写菜谱:全彩插图、精准到毫克、每个汤底写满三页纸。可背包就那么大,带不走全部家当。他只好学着把菜谱“量化”——不是把字抄小,而是用有限的墨水、有限的格子,把最重要的味道留住。量化模型干的正是这件事:把原本用32位浮点记录的模型权重,压成8位、4位甚至更小的格式,让模型从“大部头”变成能在手机里跑的口袋本。GGUF,就是这种口袋本的一种标准装帧;而“量化模型精度评估”,就是上路前反复试做菜,确认缩印后的菜谱没有把“盐少许”印成“盐一勺”。

岗位关联

对AI从业者而言,掌握量化精度评估,意味着你不再只会“压模型”,而是能科学地回答“压完还能不能放心用”——这是从调参工走向部署专家的关键一步。

目录
  1. 可视化演示
  2. 量化基础
  3. 精度评估指标
  4. GGUF结构
  5. 校准集选择
  6. 常见量化格式
  7. 性能评测
  8. 常见陷阱
  9. 工程实践
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示量化模型精度评估:量化位数对精度的影响曲线、精度/困惑度/体积多指标对比、精度与体积的权衡分析,通过交互理解量化部署的评估方法。

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

精度曲线:量化位数影响 量化位数越低精度下降 相比FP16精度损失可控 Qn vs Acc 评估精度与体积平衡

量化基础

小林拿到师傅的原版菜谱,分量单位精确到“克”,甚至“毫克”。可口袋本不可能印这么多位数字,于是他把单位简化成“半勺、一勺、两勺”这几个大档。档位越多,越接近原版;档位越少,背包越轻。这就是量化:把连续可变的数值,装进有限个“格子”里。

在GGUF格式中,模型权重原本是32位浮点数,好比用尺子量到小数点后七位。量化后变成8位或4位整数,好比尺子只有255格或15格。我们管“每格多宽”叫步长(step size)。它是决定口袋本还原度的关键参数:步长越大,存储越省,但每一下“跳格”带来的误差也越大。

步长取决于被量化数值的取值范围和档位数。如果一组权重从最小值到最大值,用b个比特可以生成2^b−1个间隔,步长就是总范围除以间隔数。

小林试着把“盐1.25克”改成“约一勺”,发现大部分菜还能吃,个别精致的甜品就差点意思。步长越大,味道的“断层”越明显——这是量化的天然代价,也是一切评估的起点。

Δ=max−min2b−1\Delta = \frac{\text{max} - \text{min}}{2^{b} - 1}
这个公式说明:位宽越高,间隔越多,每个刻度代表的真实数值就越细;数值取值范围越窄,同样位宽下刻度也越细。
  1. 计算取值范围先看一组权重的最小值与最大值,它们圈出了“菜谱里最淡到最咸”的边界。
    range=max−min\text{range} = \text{max} - \text{min}
  2. 计算档位间隔数b个比特能表示2^b个等级,相邻等级之间有2^b−1个间隔。
    N=2b−1N = 2^{b} - 1
  3. 得到步长范围除以间隔数,就是量化尺子上每个刻度代表的真实大小。
    Δ=rangeN\Delta = \frac{\text{range}}{N}

精度评估指标

只靠翻书看字迹是不够的,小林必须真把口袋本上的菜做出来,让师傅盲测。师傅的评价有几个维度:意外程度、误差幅度、成菜质量。在语言模型里,最常用的“意外程度”指标叫困惑度(Perplexity,PPL)。

PPL理解起来不复杂:模型读一串文本时,越能准确预测下一个词,就越不“意外”,PPL越低。量化后PPL通常会上升,但只要上升幅度在可接受范围内,就说明缩印没有伤到筋骨。比如从8.0升到8.2,可能是“稍咸了一点”;如果从8.0飙到15,那基本是“把糖当盐放了”。

设模型对第i个真实词的预测概率为p_i,对整段N个词的负对数似然求平均再取指数,就得到PPL。

除了PPL,工程上还会看均方误差MSE——把量化后还原的权重和原权重逐位相减求平方平均,数字越小代表数值还原越准;以及任务准确率——直接跑问答、分类等真实任务。用菜谱打比方:MSE像电子秤称调料,PPL像师傅的舌头,任务准确率像客人的最终评分。三个指标都过关,口袋本才算合格。

PPL=exp⁡(−1N∑i=1Nlog⁡pi)\mathrm{PPL} = \exp\left(-\frac{1}{N}\sum_{i=1}^{N}\log p_i\right)
PPL越低,代表模型对真实文本的预测越自信;量化引入的噪声会让预测变犹豫,PPL因而升高。
  1. 读取每个词的预测概率模型每读一个词,都会给下一个候选词打分,p_i就是真实词得到的概率。
    pi=P(yi∣y<i)p_i = P(y_i \mid y_{<i})
  2. 加负号取对数概率接近1时,\(-\log p_i\) 接近0;模型越没把握,这一项越大。
    −log⁡pi-\log p_i
  3. 平均后取指数把整段文本的“惊讶度”平均,再取指数,让数值回到可读的尺度。
    PPL=exp⁡(1N∑i=1N(−log⁡pi))\mathrm{PPL} = \exp\left(\frac{1}{N}\sum_{i=1}^{N}(-\log p_i)\right)

GGUF结构

口袋本不能只有菜谱正文,还需要目录、页码、眉注,否则读者不知道该看哪页。GGUF是llama.cpp等推理引擎常用的模型格式,文件里除了张量数值,还存着大量元数据:模型架构、张量名称、形状、量化类型,甚至分词器与聊天模板。加载模型时,程序先读目录,再按目录去逐个还原张量。

量化后的张量不是数字逐个平铺,而是按“块”组织。比如Q8_0,每32个权重为一块,每块用一个float32记录缩放因子,再用32个int8记录量化值。读取时,程序先找到块,再按块内的“标尺”翻译回近似原值。块的概念就像一页菜谱底部注明的“本页使用何种计量单位”,没有它,页面上那些数字就是一堆乱码。

存储大小可以由总权重数N、块大小B、位宽b估算。每个块要存一个块标尺和B个量化值,块数约为N/B。

GGUF之所以是可靠的“装帧”,就是因为它把“哪些张量、什么类型、怎么还原”都写进了文件。小林每次出门前不需要记忆菜谱页码,只需翻开目录,就能找到对应的菜。

bytes≈NB×(4+B×b8)\text{bytes} \approx \frac{N}{B} \times \left( 4 + B \times \frac{b}{8} \right)
块数量越少、位宽越低,模型文件就越小;但块太大可能让一组内权重差异被平均化,精度反而不稳。
  1. 计算块数权重总数除以每块权重数,得到需要多少个组。
    blocks=⌈NB⌉\text{blocks} = \left\lceil \frac{N}{B} \right\rceil
  2. 计算每块字节数每块先存1个4字节缩放因子,再存B个b位量化值,每个值约占b/8字节。
    per_block=4+B×b8\text{per\_block} = 4 + B \times \frac{b}{8}
  3. 合并估算体积块数乘以每块字节数,得到模型文件的近似大小。
    bytes=blocks×per_block\text{bytes} = \text{blocks} \times \text{per\_block}

校准集选择

缩印之前,小林要选几道“代表菜”试印。不能只印拍黄瓜,得有红烧肉、清蒸鱼、拔丝地瓜这些覆盖不同火候和调味的菜。如果试印样本选错,缩印出来的菜谱可能在荤菜上彻底失灵——这就像校准集偏差。

校准集(calibration set)是一小段与真实使用场景分布相近的数据,用来统计每一层权重和激活值的数值范围,从而为量化确定缩放因子和零点。校准集不是训练集,也不是越大越好,关键是与部署时的输入分布对齐。用训练集做校准,就像用考试原题当模拟题,真实考场的题一变就露馅。

对称量化常用以下方式确定缩放因子:取校准数据中绝对值的最大值,再除以当前位宽能表示的最大正整数。

试印菜品选得准,墨水浓度才调得准;校准集选得准,GGUF量化后的模型才不会在真实数据上“翻车”。

scale=max⁡∣x∣2b−1−1\text{scale} = \frac{\max |x|}{2^{b-1} - 1}
缩放因子就是“一格代表多少”。校准集选得好,格子才画得准。
  1. 找绝对峰值遍历校准集,统计激活值或权重的最大绝对值,相当于找出菜谱里最重口味的一道菜。
    max_abs=max⁡∣x∣\text{max\_abs} = \max |x|
  2. 算最大档位若用b位有符号整数,正数最多到\(2^{b-1}-1\)。
    max_level=2b−1−1\text{max\_level} = 2^{b-1} - 1
  3. 做除法峰值除以最大档,得到每个档位对应的实际数值大小。
    scale=max_absmax_level\text{scale} = \frac{\text{max\_abs}}{\text{max\_level}}

常见量化格式

口袋本也有不同装帧:草稿纸复印、精装便携本、豪华图文版。小林选择时,既要看出品质量,也要看背包容量。GGUF生态里最常见的格式各有脾气:Q4_0把权重压成4位整数,体积最小、速度最快,但精度损失稍大;Q8_0把权重用8位整数保存,几乎无损,但文件明显更重。

Q4_K_M、Q5_K_M这类K-quants格式是“精装便携本”:它们混合使用不同位宽,对敏感层或敏感块多加几个比特,对无关紧要的细节则大胆压缩。结果是在体积只增加一点的情况下,生成质量明显更稳,尤其适合中文、代码这种对细节敏感的场景。

这些格式的本质差异,可以统一折算成“平均每个权重用多少bit”。平均位宽帮助工程师快速预估模型体积,也方便横向对比不同量化方案。

小林最后选了Q5_K_M当旅行本,因为它只多了几十页纸,却把最容易翻车的红烧肉和拔丝地瓜都保住了。

avg bits=量化后总存储位数参数总数\text{avg bits} = \frac{\text{量化后总存储位数}}{\text{参数总数}}
平均位宽越低,文件越小;但平均位宽不能反映“细节分配是否聪明”,K-quant的价值恰恰在于不均匀分配。
  1. 统计总存储位数量化后的权重、缩放因子以及必要的对齐填充都算存储开销。
    bits_total=∑每组(缩放位数+块内值位数)\text{bits\_total} = \sum_{\text{每组}} (\text{缩放位数} + \text{块内值位数})
  2. 确定参数总数模型的全部权重数量N,是固定分母。
    params=N\text{params} = N
  3. 相除得到均值所有存储位除以权重总数,Q4_0约等于4.0~4.5,Q8_0约等于8.0~8.5。
    avg bits=bits_totalN\text{avg bits} = \frac{\text{bits\_total}}{N}

性能评测

口袋本装进背包,到底轻了多少、翻起来快不快,不能靠感觉,要称重、计时。量化模型也一样,需要评测显存占用、推理速度、上下文窗口和端侧功耗。更小的权重意味着更少的内存带宽和访存量,因此量化后模型通常跑得更快,也能在相同显存下塞进更长的上下文。

在llama.cpp这类推理引擎中,INT4量化常能把显存占用降到原来的四分之一到三分之一。显存省下来之后,原来放不下的长文档、长对话,现在可以整段加载。对端侧设备来说,这是从“演示能跑”到“真正可用”的质变。

工程上常用加速比来量化收益:原版float32模型的延迟除以量化后模型的延迟。

小林用计时器对比厚书和口袋本,发现缩印本不仅轻了半公斤,还让他在有限时间内能尝试的菜多了三倍。性能评测的意义,就是把这“三倍”真实地测量出来。

S=Tfp32TquantS = \frac{T_{\text{fp32}}}{T_{\text{quant}}}
加速比大于1说明量化后更快;数值越大,说明口袋本“翻页”越流畅。
  1. 测量原版延迟用同一段输入,在同一设备上跑float32模型,记录耗时。
    Tfp32T_{\text{fp32}}
  2. 测量量化延迟保持输入不变,再跑量化后模型,记录新耗时。
    TquantT_{\text{quant}}
  3. 计算加速比两者相除,得到加速倍率。
    S=Tfp32TquantS = \frac{T_{\text{fp32}}}{T_{\text{quant}}}

常见陷阱

小林曾收到一本号称“和原版一样清晰”的缩印本,打开后字迹确实清楚,但做出来的宫保鸡丁却变了味。为什么?字迹清楚只能说明“单个字还原度不错”,没有说明“连词成句后是否顺畅”。量化评估也是同理:只看单点指标,很容易掉进坑里。

第一个陷阱是只看PPL不看下游任务。PPL小幅上升可以接受,但某些任务上准确率可能已经明显下跌,必须用真实benchmark验证。第二个陷阱是校准集偏离真实场景,比如用纯英文书校准,却要部署到中文对话场景。第三个陷阱是对所有层一视同仁地均匀量化,忽略了注意力层的敏感性。第四个陷阱是忘记迁移GGUF元数据里的分词器和聊天模板,输入被切成乱码,再好的量化也白搭。

为了识别劣质量化,工程上常用PPL相对上升率作为红灯信号:

师傅告诉小林,判断口袋本不能只看某一页印刷质量,要整本做完一整桌菜才算数。多指标交叉验证,才是避开陷阱的唯一方法。

ΔPPL%=PPLq−PPLfPPLf×100%\Delta PPL\% = \frac{\mathrm{PPL}_q - \mathrm{PPL}_f}{\mathrm{PPL}_f} \times 100\%
如果量化模型比原版PPL高出太多,说明缩印工艺可能已经破坏了关键信息。
  1. 记录原版PPL以float32模型为基线,得到\(\mathrm{PPL}_f\)。
    PPLf\mathrm{PPL}_f
  2. 记录量化PPL测量待评估量化模型的\(\mathrm{PPL}_q\)。
    PPLq\mathrm{PPL}_q
  3. 计算相对上升率差值除以基线再乘100,得到可比较的百分比。
    ΔPPL%=PPLq−PPLfPPLf×100%\Delta PPL\% = \frac{\mathrm{PPL}_q - \mathrm{PPL}_f}{\mathrm{PPL}_f} \times 100\%

工程实践

经历多次翻车后,小林总结出一套“缩印验收流程”:先定代表菜,再选装帧,然后计时称重,最后让师傅盲测。这套流程落到模型部署上,就是量化评估的工程实践。

具体做法分四步。第一步,用贴近真实场景的数据做校准;第二步,用llama.cpp的perplexity工具和lm-evaluation-harness分别测PPL与任务准确率;第三步,在同一设备上测延迟、显存和上下文窗口;第四步,设定验收阈值,比如PPL相对上升不超过1%、任务准确率相对下降不超过2%。若超限,则换更高位宽或K-quant。

一个简单的验收判定可以写作“准确率损失不超过阈值”。用公式表示:

有了这套验收流程,小林终于敢把口袋本带出门。它不再是“一本缩小了的菜谱”,而是一份经过验证、正式可用的旅伴。

Accloss=Accf−AccqAccf×100%≤2%\text{Acc}_{\text{loss}} = \frac{\text{Acc}_f - \text{Acc}_q}{\text{Acc}_f} \times 100\% \le 2\%
准确率损失越小越好,2%只是一个常见示例阈值,实际业务要根据风险容忍度调整。
  1. 记录原版准确率用标准benchmark测试float32模型,得到\(\text{Acc}_f\)。
    Accf\text{Acc}_f
  2. 记录量化后准确率同一benchmark测试量化模型,得到\(\text{Acc}_q\)。
    Accq\text{Acc}_q
  3. 计算相对下降并判定原版减量化后除以原版,得到损失比例,再判断是否小于等于阈值。
    Accf−AccqAccf≤2%\frac{\text{Acc}_f - \text{Acc}_q}{\text{Acc}_f} \le 2\%

AI 应用场景

端侧模型的量化选型

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

解决的问题:手机或笔记本内存有限,float32模型跑不动或太慢;传统做法凭感觉选Q4_0,容易导致对话质量明显下降。量化评估通过“代表菜试做”式的流程,科学选择校准集与量化格式。

具体案例:某语音助手团队在ARM笔记本上部署7B模型。他们采集300条真实用户对话作为校准集,分别量化成Q4_0、Q5_K_M和Q8_0,再测量PPL上升率、首token延迟与内存峰值。最终选择Q5_K_M:答案准确率只下降1.2%,内存占用从6.8GB降到3.1GB,交互体验基本不变。

大模型服务发布前的量化质检

阶段:模型评估与发布

解决的问题:仅靠PPL无法发现某些任务失效;量化模型上线前必须用任务benchmark做回归测试,防止“字迹清楚但菜做坏了”。

具体案例:某在线客服平台使用GGUF格式的13B模型。升级到新量化版本后,PPL仅上升0.3%,但“退款流程”问答准确率下降6%。团队立即回滚并改用Q6_K,避免了一次线上事故。

量化误差监控与自动调参

阶段:模型监控与持续优化

解决的问题:业务数据分布会随时间变化,固定量化参数可能逐渐失效;通过自动化校准与误差评估,可以在候选格式中持续选择体积最小且达标的版本。

具体案例:一个智能笔记应用每周更新模型,自动化pipeline会在一批GGUF候选格式上同时运行PPL和任务集,自动选出满足准确率阈值的体积最小版本。遇到指标异常时,pipeline会告警并回退到上一版本。

Python 演示

python48 行
# GGUF 块量化精度模拟# 模拟 Q4_0 / Q8_0 这类分组量化,评估量化后的 MSE 与信噪比import randomimport math BLOCK = 32  # 类似 Q8_0 的 block size def quantize_block(data, bits):    max_level = (1 << (bits - 1)) - 1    quantized = []    scales = []    for start in range(0, len(data), BLOCK):        block = data[start:start + BLOCK]        max_abs = max(abs(v) for v in block)        scale = max_abs / max_level if max_abs > 0 else 1.0        scales.append(scale)        quantized.extend([int(round(v / scale)) for v in block])    return quantized, scales def dequantize(quantized, scales):    restored = []    for i, v in enumerate(quantized):        s = scales[i // BLOCK]        restored.append(v * s)    return restored def mean_squared_error(original, restored):    n = len(original)    return sum((a - b) ** 2 for a, b in zip(original, restored)) / n def evaluate(weights, bits):    q, scales = quantize_block(weights, bits)    restored = dequantize(q, scales)    mse = mean_squared_error(weights, restored)    mean_val = sum(weights) / len(weights)    variance = sum((w - mean_val) ** 2 for w in weights) / len(weights)    snr = 10 * math.log10(variance / mse) if mse > 1e-12 else 99.0    storage_kb = len(weights) * bits / 8 / 1024    return mse, snr, storage_kb if __name__ == '__main__':    random.seed(42)    weights = [random.gauss(0, 1) for _ in range(4096)]    print("GGUF 分组量化精度模拟")    print("参数量: 4096, block_size:", BLOCK)    for bits in (4, 8):        mse, snr, storage_kb = evaluate(weights, bits)        print(f"bits={bits}  MSE={mse:.6f}  SNR={snr:.2f}dB  storage约={storage_kb:.1f}KB")
目的:用纯Python模拟GGUF典型的分组量化过程,对比4bit与8bit下的数值还原误差和存储估算。
  1. max_abs = max(abs(v) for v in block)统计一个块内的最大绝对值,相当于找出“最重口味”的权重。
  2. scale = max_abs / max_level确定块内的缩放因子,就像给这组权重画一把刻度尺。
  3. quantized.extend([int(round(v / scale)) for v in block])把连续权重四舍五入到有限档位。
  4. s = scales[i // BLOCK]反量化时,根据索引取回对应块的标尺。
  5. snr = 10 * math.log10(variance / mse)信噪比越高,说明量化噪声相对信号越小,精度越好。

常见误区

误区我用Q8_0量化后,PPL从7.5变成7.8,立刻把模型打入冷宫。认为只要PPL有波动,量化就是失败的。

正解PPL小幅上升是量化压缩的正常代价,关键看相对上升幅度和下游任务表现。Q8_0通常只上升零点几,Q4_0可能上升1~2,但如果任务准确率几乎不掉,就可以接受。就像师傅说“菜稍咸了一点”,不等于“这道菜不能端上桌”。

为何常见:初学者容易把精度评估唯一化成PPL,忽略了业务指标和部署收益之间的平衡。

误区我把训练集全量数据喂给校准器,觉得样本越多,缩放因子肯定越准。

正解校准集要“代表真实输入分布”,而不是“样本数量多”。如果用训练集但部署场景是短对话,训练集中的罕见长文会拉大最大值,导致多数数值只落在少数几个档位,精度反而更差。几百条有代表性的真实请求,往往胜过几万条无关数据。

为何常见:人类直觉认为“更多数据总是更好”,但量化校准的目标是统计分布,而不是学习知识。

误区我给模型所有层都统一用4bit,省事又均匀,总不会出问题。

正解不同层对量化误差的敏感度差异很大,注意力层的细小误差可能被反复放大,导致生成质量骤降。K-quant这类混合格式正是对敏感部分保留更高精度,让模型更“懂事”。就像菜谱里“火候”两个字不能省,但“装饰花边”可以略去。

为何常见:均匀量化实现简单,容易给人一种“公平处理”的错觉,但模型内部结构并不公平。

误区我在网上下载一个量化好的GGUF文件,直接用自己的tokenizer推理,结果输出全是乱码,便认为是量化把模型弄坏了。

正解GGUF元数据里包含分词器类型、聊天模板和特殊token,推理端必须按这些信息解析输入。如果换用不匹配的推理后端或分词器,再好的量化也无从发挥。就像口袋本装订虽好,但注音系统和原书方言不一致,读者依然看不懂。

为何常见:文件能打开,不代表内容能被正确解读;问题出在“格式上下文”,而不是“量化精度”。

面试题

Q1. 量化GGUF模型的直接目的通常是什么?

单选题 · easy

  • A.增加模型的层数
  • B.减少模型占用的内存和存储← 正确答案
  • C.提高模型的数学精度
  • D.更换模型的训练框架

答案:B。量化用更少的bit表达权重,好比口袋本比厚菜谱更省背包空间,同时可能加快推理。它不是增加层数,也不负责提高数学精度或更换训练框架。

Q2. GGUF中Q8_0的"8"表示?

单选题 · easy

  • A.模型有8层
  • B.每个权重用8bit存储← 正确答案
  • C.模型支持8种语言
  • D.压缩率为8倍

答案:B。Q8_0表示权重量化为8位有符号整数,块内共享缩放因子。它不描述层数、语言种类或压缩倍数。

Q3. 若量化步长Δ变小,通常意味着?

单选题 · mid

  • A.位宽变大或数值范围变窄← 正确答案
  • B.模型性能一定提升
  • C.校准集样本更多
  • D.文件体积必然变大

答案:A。步长等于范围除以间隔数。位宽变大或范围变窄都会让Δ变小。步长小说明量化更精细,但不代表业务指标一定变好,文件大小也不一定变大。

Q4. 校准集最主要的作用是?

单选题 · mid

  • A.用于训练一个新模型
  • B.统计权重和激活值范围← 正确答案
  • C.计算损失函数的梯度
  • D.对GGUF文件进行加密

答案:B。校准集用于统计真实分布下的最大最小值,从而确定缩放因子和零点。它不是训练集,不更新权重,也不负责加密,就像试印菜品是为了调墨水浓度。

Q5. GGUF元数据里通常不包含?

单选题 · mid

  • A.张量名称与形状
  • B.量化类型
  • C.分词器信息
  • D.训练后的完整日志← 正确答案

答案:D。GGUF元数据记录模型架构、张量布局、量化类型和分词器信息,以便加载时正确还原;它不会保存训练日志。这就像口袋本的目录和页码,而不是师傅的练菜日记。

Q6. 某模型PPL从8.0变为8.8,最合理的解释是?

单选题 · hard

  • A.推理速度提升10%
  • B.量化造成轻微精度损失← 正确答案
  • C.模型权重全部损坏
  • D.模型上下文变长一倍

答案:B。PPL小幅升高通常代表模型对真实数据“更意外”,是量化引入噪声的表现。上升0.8属于轻微损失,并非全部损坏,也和速度、上下文长度没有直接因果。

Q7. 选择Q4_K_M而非Q4_0,主要动机是?

单选题 · hard

  • A.让模型体积更小
  • B.对敏感层更精细以保持质量← 正确答案
  • C.彻底消除量化误差
  • D.加速CPU指令集

答案:B。K-quant属于混合精度策略,对敏感部分使用更高精度,体积只小幅增加但质量更好。它不是让体积更小,也不能彻底消除误差,加速与否取决于硬件。

Q8. 下列哪些属于量化精度评估指标?

多选题 · mid

  • A.困惑度PPL← 正确答案
  • B.均方误差MSE← 正确答案
  • C.显卡风扇转速
  • D.任务准确率← 正确答案

答案:ABD。PPL衡量文本预测的“惊讶程度”,MSE衡量权重还原的数值误差,任务准确率衡量最终效果。风扇转速属于物理状态,不是精度指标。

Q9. 量化模型部署前需要检查哪些方面?

多选题 · hard

  • A.校准集分布是否贴近真实← 正确答案
  • B.GGUF元数据与分词器是否匹配← 正确答案
  • C.显存占用与端到端延迟← 正确答案
  • D.训练数据集的版权声明

答案:ABC。校准分布影响缩放因子是否合理,元数据与分词器影响输入能否被正确解读,显存和延迟决定能否上线。版权声明通常不是量化部署时的直接检查项。

Q10. 关于K-quant与分组量化,下列说法正确的是?

多选题 · hard

  • A.一个块内共享缩放因子← 正确答案
  • B.所有层必须统一位宽
  • C.小权重可能被舍入为零← 正确答案
  • D.块越小通常越精确但更耗存储← 正确答案

答案:ACD。分组量化以块为单位存缩放因子;小权重在低bit下四舍五入后可能变成0;块更小能更贴合局部分布,但会增加标尺数量,从而占用更多存储。K-quant正是用混合位宽来避免“所有层统一”的粗糙。