Download docs/INT4_BOARD_ACCURACY_20260922.md from Sariel00/Ling-3.0-tiny-RKNN: direct link, hf CLI and curl.
- Browser
- Download file 9.54 kB
-
https://huggingface.co/Sariel00/Ling-3.0-tiny-RKNN/resolve/main/docs/INT4_BOARD_ACCURACY_20260922.md
- Command line
-
hf download hf://Sariel00/Ling-3.0-tiny-RKNN/docs/INT4_BOARD_ACCURACY_20260922.md
-
curl -L -o INT4_BOARD_ACCURACY_20260922.md https://huggingface.co/Sariel00/Ling-3.0-tiny-RKNN/resolve/main/docs/INT4_BOARD_ACCURACY_20260922.md
官方 INT4 与板端 v6 数值误差对照
日期:2026-09-22。桌面 RTX 5090 与 RK3588 / NanoPi M6。本轮不测试 FP8,不重新量化模型,不修改线上模型或默认 attention 路径。
结论:官方 INT4 在本组固定前缀上更接近 BF16;板端当前版与基线的总误差接近,但 NPU 路径有可测得的新增偏移,不能称为无损。 本组结果支持继续定位 NPU 数值差异,同时说明板端与官方 INT4 的主要差距在本轮优化前就已存在。
结果
以下统一以原始 BF16 为参考,按 4,322 个预测位置加权,不按题目平均。短输入当前版强制启用 NPU,8K 当前版按默认门槛启用;详见下方测量口径。
| 路径 | logits MAE ↓ | logits RMSE ↓ | 最大绝对差 ↓ | 平均 TV ↓ | 平均 KL ↓ | Top1 一致率 ↑ |
|---|---|---|---|---|---|---|
| 官方 INT4,桌面重建计算 | 0.281598 | 0.371417 | 8.390625 | 5.7605% | 0.026054 | 92.6886% |
| 板端基线 | 0.420840 | 0.548970 | 11.764828 | 8.9246% | 0.060074 | 89.2642% |
| 板端当前 NPU 版 | 0.421164 | 0.549502 | 12.022694 | 8.9992% | 0.061127 | 89.5187% |
相对 BF16,当前版 TV 比基线增加约 0.0746 个百分点,KL 增加约 0.001053;Top1 一致率反而增加约 0.2545 个百分点。指标有升有降,不能把所有改变简单归类为改善或退化,也不应把数值接近解释为自由生成结果相同。
直接两两比较如下;每行 KL 的参考方向按第一列指定。
| 参考 → 候选 | logits MAE | logits RMSE | 最大绝对差 | 平均 TV | 平均 KL | Top1 一致率 |
|---|---|---|---|---|---|---|
| 板端基线 → 当前 | 0.121644 | 0.165286 | 7.663408 | 2.4451% | 0.004768 | 96.9921% |
| 官方 INT4 → 板端基线 | 0.462391 | 0.600889 | 11.749203 | 9.7555% | 0.073287 | 88.6627% |
| 官方 INT4 → 板端当前 | 0.462421 | 0.600880 | 11.190662 | 9.7997% | 0.074147 | 88.6395% |
当前与基线有 130 / 4322 个位置的 Top1 不同。以基线第一名比第二名至少高 1 nat 筛选,2,998 个位置中仅 1 个不同,一致率 99.9666%;说明本批选词变化大多发生在接近的候选之间。这不是事实正确性保证。
新增偏移的 TV P95 为 7.5762%,单位置最大 TV 为 44.1294%,最大 KL 为 0.408940。极端位置不能被均值掩盖。较早 32 个合成位置的最大 logits 差仅 2.135,本轮扩大到真实语言续写后观察到 7.663;样本不同,不能把两者当成同一条件下的退化趋势。仍不满足此前严格数值门槛,新路径保留实验开关。
Think / No-think
常规输入的完整续写,共 4,217 个位置:
| 路径(BF16 为参考) | No-think TV / KL / Top1 | Think TV / KL / Top1 |
|---|---|---|
| 官方 INT4 | 5.2640% / 0.023242 / 93.874% | 6.0769% / 0.027367 / 91.890% |
| 板端基线 | 8.1693% / 0.054577 / 89.673% | 9.4016% / 0.062229 / 89.093% |
| 板端当前 | 8.2878% / 0.056439 / 90.082% | 9.4601% / 0.062958 / 89.253% |
直接比较新旧板端,No-think / Think 的 TV 为 2.1454% / 2.6740%,Top1 一致率 97.725% / 96.524%。中文办公 Think 的一致率最低,为 93.563%。各题 256-token 窗口的 TV 有升有降,未见所有题目都随生成长度单调增大的模式。
8K 输入
以下单独列出两组长输入的 105 个预测位置,不能由总体中占多数的短输入代替:
| 路径(BF16 为参考) | logits RMSE | 平均 TV | 平均 KL | Top1 一致率 |
|---|---|---|---|---|
| 官方 INT4 | 0.44417 | 6.3228% | 0.040650 | 92.381% |
| 板端基线 | 0.69348 | 9.8851% | 0.098455 | 86.667% |
| 板端当前 | 0.69724 | 9.6228% | 0.094009 | 86.667% |
新旧板端直接对比:TV 1.8828%、KL 0.003537、RMSE 0.18262、Top1 一致率 96.190%(4 个位置改变),最大 logits 差 2.8247。本组没有表现为 NPU 启用后的整体分布明显恶化;但只包含 33 / 72 个续写位置,不能证明数千 token 自由回复的稳定性。
后续应冻结真实 Q/K/V,比较 QK、概率、PV、输出投影、激活量化编码和首次路由分歧。不要仅凭某项总误差略有改善,就跳过新路径的数值定位或宣布可以替换默认实现。
测量口径
所有路径使用同一 token 序列、官方聊天模板和固定参考续写,比较整个 157,184 词表。逐步强制输入相同 token,避免采样分叉干扰比较。这是固定前缀数值保真测试,不是任务正确率,也不是自由生成质量测试。
| 路径 | 权重与计算 |
|---|---|
| BF16 参考 | 原始 BF16 模型,官方 Transformers 实现、CUDA eager attention;保留模型指定的 FP32 参数 |
| 官方 INT4 | 官方 group32 INT4 专家 codes × scales 重建至 BF16,在同一 CUDA 实现中计算;未做二次权重量化,没有 A8 激活量化 |
| 板端基线 | v6 混合 W4A8/W8A8;BF16 KV;单 token MLA 使用 CPU |
| 板端当前 | 与基线相同的 v6 权重和同一个 C++ 探针;开启 NPU 单 token MLA、双行残差、原生 KV 副本及 MoE 成本调度 |
官方 INT4 一行不是原生 INT4 GPU 内核实测,因此不用于说明桌面 INT4 的速度或内存。它与板端采用不同量化方案,差距不能全部归因于 RKNN 或 NPU。当前与基线的直接对照才隔离本轮路径变更;先前单独验证过 MoE 成本调度的逐值一致性。
桌面 PyTorch 2.12.1+cu130、Transformers 4.57.1;禁用 TF32。为避免投影未评分的长输入位置,使用官方 model.model 后,仅对目标位置执行原有 lm_head。中文办公 No-think 的 BF16 全词表结果与历史参考逐值一致。
官方 INT4 revision:65a6d1d71e01f73ba01e572992bbd69ea92c865f。读取 8,832 个量化矩阵、6,945,767,424 个专家权重元素;非量化张量没有发现值差异。解包与 compressed-tensors 官方 helper 交叉核对。
输入与覆盖
| 组别 | 输入 token | 评分位置 | 说明 |
|---|---|---|---|
| 中文办公 No-think / Think | 189 / 188 | 447 / 668 | 历史回归题,完整固定续写 |
| 数学 No-think / Think | 98 / 97 | 581 / 873 | 同上 |
| Python No-think / Think | 124 / 123 | 686 / 962 | 同上 |
| 8K 资料 No-think / Think | 8,226 / 8,225 | 33 / 72 | 新增资料与干扰条目,固定目标事实 |
合计 8 组、4,322 个预测位置,其中短输入 4,217 个、8K 输入 105 个。Think 覆盖推理文本和最终答案。短输入对当前版强制设置 LING3_MLA_DECODE_MIN_HISTORY=1,以覆盖新路径;这不是实际服务的默认短输入行为。8K 组使用默认门槛 8192,历史跨越两个以上 4096-token 块。8K 续写较短,不能外推到长时间自由生成。
板端容量 8,297 token,BF16 KV,预填充块最大 128;当前版 tile=4096、native cache 预算 1536MiB。两条路径均固定 A76 大核、NPU、DMC 最高频率,暂时停止既有应用服务,测试后恢复。所有位置有限、C++ 与 Python tokenizer 一致、无 attention fallback。当前版每个续写步骤均使用六层 NPU MLA,合计 25,884 次;基线解码 NPU 调用为零。首个评分位置来自预填充,故调用数为 6 × (4322 − 8)。
指标解释
MAE、RMSE、最大绝对差针对未归一化 logits,不是百分比。TV 为两下一词概率分布的总变差距离,表中以百分比显示;KL 为 KL(参考 || 候选),单位 nat。Top1 是在相同输入前缀下第一候选 token 的一致率,不是问答正确率。
RMSE 由全部位置、全部词表元素的均方误差开方,未逐位置开方后平均。JSON 另保留去除整体平移的 logits RMSE、TV/KL 的 P50/P95/最大值、每题及每 256 个位置的统计。不同参照下的误差不能直接相加。
复现与原始数据
本地已不保留 .f32,仅运行 score 无法重新计算误差。复测应沿用保留的 suite.json,重新执行 PC 和板端推理以生成 logits,再评分;当前摘要用于查阅已有测量结果。
入口:engine/source/tests/cross_platform_accuracy.py,阶段依次为 prepare、pc、board、score。PC 阶段需要可运行官方模型的 Torch/Transformers/FLA 环境,INT4 解包校验需要 compressed-tensors helper;评分阶段只需要 NumPy。板端编译 ling3-quant-loss-probe,用 run_board_experiment.py 管理并恢复服务与频率。
python engine/source/tests/cross_platform_accuracy.py prepare \
--source ./work/Ling-3.0-tiny --output ./work/results
python engine/source/tests/cross_platform_accuracy.py pc --output ./work/results \
--source ./work/BF16 --official ./work/official-int4
# 将 suite.json 复制到板端结果目录,执行以下板端阶段:
python engine/source/tests/cross_platform_accuracy.py board --output ./work/board-results \
--probe ./work/ling3-quant-loss-probe --model ./models/local-final/v6-board-test/ling3-tiny-w4.l3r
# 将 board_baseline、board_current 两个目录复制回 PC 后:
python engine/source/tests/cross_platform_accuracy.py score --output ./work/results
完整统计:comparison.json。目录中保留固定输入 suite.json、权重审计、板端结果摘要、环境校验和 SHA256 记录;逐词表 logits 与大型运行日志已清理,不作为仓库数据分发。原始 v6 权重 SHA256 为 80f0086247328fe77b2f939df460b4955287b6f75f6aaada85512c56e652f435,与发布包校验记录一致。