0
0

W8A8C8 与 GPQA:把量化位宽、数值误差和模型能力分开看

整理日期:2026-09-14。来源:当天可见聊天摘要;原理说明为整理时补充,非完整对话逐字稿。未取得的设备参数与未验证的结论明确保留为待核实。

今天两个看似独立的问题

“W8A8C8 的 C 是什么意思?”以及“GPQA 精度验证是什么?”

两者的连接点是:降低精度节省资源之后,需要验证模型能力是否仍然满足要求。

W、A、C 各表示什么

在常见大模型推理量化命名里,W 表示权重,A 表示激活,C 表示 Cache,通常指 KV Cache。W8A8C8 通常表示这三类数据采用 8 位量化。

但这个标签不完整描述执行方式:还需要核对具体框架中的整数或浮点类型、量化粒度、scale、动态或静态量化、未量化算子,以及累加精度。不能由标签推导“整个网络所有运算都是 INT8”。

当天涉及的昇腾具体量化包与配置未提供;C8 的确切实现仍应以配置和加载日志为准。

为什么 C8 对长上下文很重要

权重在模型加载后基本固定;KV 则随请求长度和并发增长。将 BF16 KV 的数据部分降到 8 位,理想上可减半,但元数据、对齐和临时转换缓冲会改变实测节省。

容量降低不保证延迟同比降低:还取决于读取量、反量化代价、内核支持和通信。

GPQA 的“精度”是什么意思

GPQA 是专家编写的物理、化学、生物等领域高难度多选一问答基准;这里的精度一般指答题准确率,而不是 FP16/INT8 位宽或张量逐元素误差。GPQA 原始仓库

Accuracy=正确题数有效评测题数 Accuracy=\frac{正确题数}{有效评测题数}

应明确使用哪个子集、提示模板、答案提取器、采样策略和输出预算。否则两次分数未必可比较。

量化验证应包含三层

  1. 数值层:选取中间张量或 logits 比较误差,帮助定位量化或算子问题。
  2. 任务层:在固定设置下比较原始模型和量化模型的准确率、失败样例。
  3. 业务层:测试真实任务和长上下文位置敏感任务,并记录延迟、吞吐与显存。

GPQA 不能单独证明 1M 上下文 KV 量化没有损伤。长历史下的信息检索、位置变化与多跳任务要单独评估。

一份可复用的实验记录

记录模型版本、量化配置、框架与内核版本、数据集子集、样本数、随机种子、采样参数、原始与量化分数、失败题,以及相同硬件上的性能变化。

若从 80% 变为 78%,应写“下降 2 个百分点”;有限样本下还需考虑随机波动,不能仅凭一次小幅变化断言有无能力退化。

**核心联系:**W/A/C 描述资源与数值表示;GPQA 描述某类任务结果。推理优化要同时检查资源、速度和质量。

合并补充:评测口径与实现来源

权重量化主要降低权重容量与读取流量,激活量化影响中间表示和矩阵计算路径,KV 量化影响长上下文缓存。vLLM Ascend 发布记录可用于追踪 C8 的后端支持。

原始 GPQA 论文介绍 448 道题;GPQA 与 GPQA Diamond 等子集必须分开标注。GPQA 原论文。数值相近不保证任务分数相同,任务分数相近也不证明每个算子正确;保留逐题输出和推理预算有助于复现。文中的分数变化仅为教学例子,未报告实际模型跑分。

2026-09-14 晚间补充:W8A8 不等于 C8

W8A8 只表达权重和激活的位宽,不规定 KV Cache dtype。线性层可以使用 INT8 运算,而注意力仍保存 BF16 KV;还可能在混合模型中为不同状态使用不同 dtype。不能从模型文件名推导全部缓存类型。

8bit 也不自动等于 INT8:FP8、MXFP8 有不同编码与缩放机制,必须结合平台和具体量化格式。当前问题中的 w8a8 与 w8a8-mxfp8 应按各自配套权重和内核理解。

INT8 如何表示浮点幅度

常见仿射量化的教学公式:

q=clip⁡(round⁡(x/s)+z,qmin,qmax),x^=s(q−z) q=\operatorname{clip}(\operatorname{round}(x/s)+z,q_{min},q_{max}),\qquad \hat{x}=s(q-z)

s 是 scale,z 是 zero point;对称量化常用 z=0。scale 可按张量、通道、组或 token 设置,并非每个 INT8 数都附带一个浮点 scale。

例如 s=0.02、z=0,x=1.23 可量化为 q≈62,再恢复为 1.24;这是教学算例,具体舍入与范围由实现决定。超出表示范围会裁剪,scale 过大则分辨率较粗。

FP8 自身包含指数等编码;MXFP 还使用块级共享缩放,不能简单当作同一套整数映射。

用 INT8 是否浪费浮点算力

支持相应整数矩阵路径的硬件可以高效执行 INT8;不能仅凭浮点峰值判断 INT8 是否划算。端到端收益还涉及带宽、反量化、未量化算子与量化质量。不能宣称所有硬件上 INT8 都比 FP8 快。

CUDA 生态也有这些问题

vLLM 上游同样提供独立的量化 KV 配置与 scale 处理;量化格式、算子支持和权重格式并非昇腾独有。vLLM Quantized KV Cache

用户当前 GLM 精度反馈单独记录于:GLM-5.3-Flash 精度异常复盘:从 GPQA 反馈到分层定位。

2026-09-16 补充:GPQA 的 strict-match 与 flexible-extract

本次 GLM-5.3-Flash 冒烟测试出现了一个典型评测陷阱:32 道 gpqa_diamond_cot_zeroshot_max 中,flexible-extract=0.5312,而 strict-match=0。逐题检查发现模型最终回答常采用 Answer: (D)、(D) -0.7、Correct choice: (C) 等形式,而 strict extractor 依赖类似 The answer is (X) 的固定字面格式,因此全部落为 [invalid]。

这说明应把两个问题分开:

  1. strict-match=0 是答案格式协议不兼容,不能解释为模型 0% 正确率;
  2. flexible-extract=53.1% 仍可能是真正的质量异常,不能因为 parser 问题就忽略。

对 reasoning/chat 模型做选择题评测时,应同时保存原始响应、filter 后响应和 target,先确认 extractor 是否抽到了模型真实选择,再讨论模型能力。

GPQA Main、Diamond 与 Extended

当前常见三个 split 的关系是:main=448、diamond=198、extended=546;Diamond 是 Main 中质量筛选更严格的子集,而不是“198 题的简化版”。公开 benchmark 中常把 GPQA Diamond(GPQA-D)作为 headline 指标,因此复现模型卡成绩时必须确认对方报告的是哪一个 split。GPQA 数据集说明

对于当前排障,32 题适合 smoke test,但不足以作为最终精度结论。推荐流程是:先用固定 32 题验证 parser、生成预算和量化/后端变量;链路稳定后再跑完整 198 题 Diamond。448 题 Main 可以用于更大的统计样本,但不能和 198 题 Diamond 分数直接混报。

小样本应如何解读

32 题中 17 题正确得到 53.125%。样本很小时方差明显,因此不应拿一次 32 题跑分直接做最终模型结论;但如果它与可信基线相差几十个百分点,仍然足以作为“存在异常、值得继续定位”的报警信号。

评测排障顺序建议固定为:split → prompt/chat template → reasoning budget → max tokens/截断 → sampling → extractor → 单题响应 → 完整 split。

2026-09-16 增量:精度的多种含义与 Kimi K3 W4A8 证据边界

来源:今天上午关于“模型精度为什么指答题能力”、Kimi K3 W4A8 掉点、INT 表示及浮点算力是否浪费的追问。以下区分概念解释与未验证经验值。

数值精度是表示与计算误差;任务准确率是某个数据集和评分规则下的正确比例;分类术语 precision 又特指查准率。中文“精度”在部署讨论中常混用,报告应写清具体指标,不能用 INT4 位数直接推算 GPQA 分数。

对称量化教学算例:取 scale=0.1,浮点 0.26 舍入成整数 3,反量化约为 0.3。整数编码必须和 scale 一起理解。矩阵计算中,scale 可在不同粒度应用,累加与输出类型也可能不同;W4A8 仅说明权重/激活位宽,尚未说明粒度、格式、异常值处理和累加精度。

带宽受限时,减少权重读取字节数可以缩短等待;即使部分步骤需要反量化,也可能更快。反过来,打包、转换、scale 处理或不合适的 kernel 也会抵消收益。不能把“没有跑满浮点峰值”直接判为浪费,也不能断言所有 W4A8 都更快。AWQ 的算法与部署实现

纠正量化掉点的表述

可见先前回答曾给出 Kimi K3 W4A8“约掉 0–2 个点/保留 98–100%”的泛化估计。本次未取得能对应你的权重、Ascend 后端、任务集和思考预算的一手对照,因此不采纳为已核实结论,也不当作你的实测。需要取得原始权重 revision、量化 recipe、完整评测配置和逐题结果后才能回答。

P50 与平均值不是同一个指标

P50 是第 50 百分位,常称中位数;P95/P99 描述更慢一端的分布。教学数据 1、2、3、4、100 ms 的中位数是 3 ms,均值是 22 ms。比较推理系统时,分别报告 TTFT、TPOT/ITL 的分位数,并固定请求长度和负载。不同统计库对有限样本的分位数插值可能不同,记录算法;本节数字不是设备实测。

2026-09-22—23 深化:量化kernel究竟做什么

量化算法决定如何把数值编码为低位表示;量化kernel负责在硬件上执行编码、打包/解包、矩阵计算、缩放和输出转换的某些组合。它不一定是单独一个名为Quant的kernel。

典型路径A:INT8权重/激活进入整数矩阵运算,用更宽类型累加后施加scale。路径B:低位权重在片上解包/反量化,然后用浮点矩阵单元。两者都可能因减少HBM流量而更快,B并不自动无价值。路径C:先把完整权重还原写回HBM再计算,可能丢失大部分流量收益。实际需看数据流。

教学推导:对称量化时x≈sx×qx,w≈sw×qw,因此点积约为sx×sw×Σ(qx×qw);当scale按通道/组/token变化时,不能把所有scale当作同一个标量移出任意求和。

Sinh(int32)先转float的例子不能证明910C没有整数矩阵单元;单个向量函数支持类型与矩阵指令支持类型是两回事。官方Matmul说明存在INT8输入路径,但具体SKU、形状和版本仍须核对。Ascend Matmul实践(2026-09-23)

判断自己的W8A8是否走预期路径:保存权重元数据与loader日志,定位实际kernel及输入/累加/输出dtype,统计Cast/反量化、矩阵运算、内存和通信时间,并对照相同shape的浮点基线。只看文件名或设备利用率不够。

数值转换的误差和溢出细节见Ascend C 调试复盘:UB 容量账本、数据类型转换与最小复现。

2026-10-07 增量:没有原生低位矩阵支持,量化还能快吗

来源:9月28日硬件支持、性能收益和Prefill量化追问;本窗口未取得新的GPQA逐题实测。

需要原生支持的是某条特定低位计算指令路径;减少权重存储/传输不一定要求直接做低位矩阵乘。低位数据在片上解包并以浮点计算,仍可能降低HBM流量;若先整块反量化写回主存,或转换/打包/scale处理占主导,收益可能消失。硬件峰值不等于完整kernel吞吐。

Prefill的batch/序列矩阵较大时可更偏计算受限;decode较小batch常受权重读取限制,但都需要按实际shape和数据流验证。量化收益需分别报告checkpoint/设备内存、kernel耗时、TTFT/ITL、总吞吐与任务质量。vLLM量化支持矩阵(2026-10-07)

纠正旧回答:W8A8“通常只损失0—1%或1—2%”不能作为你的通用结论;模型、recipe、粒度、任务、后端、生成预算与评测口径不足时,不给固定掉点范围。HiF8/MXFP格式及950特性也不能从前一次助手描述认定你的910环境支持;已核对的新组件支持范围在昇腾算子开发体系:AOL、Ascend C、CATLASS、Triton-Ascend、TileLang 与 PyPTO。

此前用户反馈“更换正确权重并重新量化,GPQA由62.1%恢复91.1%”是历史排障结果,继续以原复盘的配置和时间为准;这不是本窗口新增跑分,也不是所有W8A8模型的质量保证。没有新证据,不把状态回写为仍在62—65%。

实验建议:原始浮点与量化版本用同一split/prompt/采样/预算/extractor,保存逐题响应;同步检查loader实际选中的kernel及dtype,profile区分矩阵、Cast/解包、scale、通信。新测量完成后再判断质量/速度收益。

Roofline分母如何随量化与复用变化见GEMM、Triton 与 TileLang:从分块代码到 Roofline 性能账本。