| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(indexer_quant_cache): preserve mode2 scale and fix Normal precision Co-authored-by: chendunyang<chendunyang1@huawei.com> # message auto-generated for no-merge-commit merge: !11942 merge fix/indexer-mode2-preserve-scale into master fix(indexer_quant_cache): preserve mode2 scale and fix Normal precision Created-by: qq_37913898 Commit-by: chendunyang Merged-by: cann-robot Description: ## 问题与根因 IndexerQuantCache 的 HiFloat8(quantMode=2)通过属性 xScale 量化 x,仅生成 cache 数据,不生成逐行 scale。 单行和多行路径仍无条件将未赋值的 cacheScaleLocal 写回 cacheScaleRef,导致有效 slot 对应的 scale 被 UB 残留值覆盖。 原始复现中 cache 的 16384 字节全部正确,但 scale 的 31/128 个元素错误,错误索引恰好对应 31 个有效 slot;其余 slot 保持不变。 在 CANN 9.2.0 weekly 20260909.01 上也可复现,异常值可表现为 Inf 或其他残留数据。 ## 最小修改 - 单行、多行路径仅在 quantMode != HIFLOAT_QUANT_MODE 时执行 scale CopyOut;mode 2 保持输入 cacheScaleRef 不变。 - 不修改量化计算、slot 寻址、队列生命周期或其他模式;不新增 SyncAll,也不新增任何同步。 - CPU golden 的 mode 2 返回保留的 scale,而不是 None,防止 TTK 跳过该输出的精度检查。 - 新增 16 条 TTK ACLNN 回归用例,覆盖 mode 0/1/2/3、FP16/BF16、单行/多行、roundScale 两种值、xScale=1/0.5,以及跳过/未更新 slot。 ## 本地实卡验证 环境:Ascend950PR_9579,TTK 3.0.0,CANN 9.2.0 weekly 20260909.01。 | 验证项 | 修改前 | 修改后 | | --- | --- | --- | | 原始 zip 输入和 golden 二进制重放 | FAIL,scale 97/128 正确 | PASS,cache 16384/16384、scale 128/128 完全一致 | | 新增 mode 2 回归 4 条 | 4 FAIL | 4 PASS | | mode 0/1/3 控制用例 12 条 | 12 PASS | 12 PASS | | 多行 mode 2 追加逐 bit 比对 | — | PASS,实际 tilingKey=10011 | 原始 bin/golden 直接通过 TTK --manual-data-dirs 导入,未重新生成、未修改容差、未跳过 scale。 修改后的 CPU golden 单独与原 zip 的两个 golden 比较,也逐字节一致。 ### 确保运行的是修改后的算子 本地执行 bash build.sh --pkg --noaicpu --soc=ascend950 --ops=indexer_quant_cache --vendor_name=indexer_mode2_fix -j8, 生成含 14 个 kernel 二进制的私有安装包,安装到独立目录,未覆盖全局 CANN。 通过 ASCEND_CUSTOM_OPP_PATH 指向 private-install/vendors/indexer_mode2_fix_transformer。 运行日志确认 API、tiling 和实际 kernel .o 都来自该目录:原始用例使用 tilingKey=10001,多行用例使用 10011。 实测 kernel SHA256:c90f6683fb5c0ba701c3268128efe3d2c1a869a5284400fc29ed0d1c90d37b09,不同于自带包的二进制。 首次 JIT-only 试运行发现 ACLNN 回退到自带二进制,已明确排除该结果;以上修改后结果均来自补齐二进制后的私有包。 ### 回归执行方式 在 TTK 目录、已配置私有算子包环境后执行(将 <repo> 替换为源码路径): bash python -m ttk aclnn \ -i <repo>/attention/indexer_quant_cache/tests/st/arch35/ttk_aclnn_scale_preservation.csv \ --plugin <repo>/attention/indexer_quant_cache/tests/assets/golden.py \ --seed 42 --pc 1 --device-whitelist 0 --warmup false -o regression.csv 检查 CSV precision_status,不能仅依据 TTK 进程返回码判断通过。 pre-commit(含 clang-format 18.1.8、ruff、OAT 等)全部通过。 本次未开展全量性能测试,不涉及 RotaryGrad。 ## 最新修复范围(取代此前极小值全通过的结论) 提交:efa68402e3f740d8b03251d8e3b3d0ade30442c2。 - 保留 mode2 不写回 scale 的修复。 - 保留 Normal uint8/HiFloat8 系数及 Cast/Store 分支修复。 - 保留 CPU golden 的 MXFP8 NaN 指数编码、Normal 有限值 amax / 非有限值转换及 HiFloat8 存储类型修复。 - 按需求撤销 Normal 极小 scale 的 2^24 等比例放大,恢复原倒数乘法路径;不新增固定 scale/amax 下限,不新增 SyncAll 或其他同步。 参考本地 ops-nn 的 DynamicBlockQuant arch35 对应实现:默认参数路径未见专门的 subnormal 补偿或固定正数下限。该算子有 minScale 属性,不代表默认启用正数保护;本次没有移植其直接 Div 路径,也没有对该算子做完整运行验证。 See merge request: cann/ops-transformer!11942 | 4 天前 | |
fix(indexer_quant_cache): 修复GEIR内存泄漏并补充数值golden Co-authored-by: chendunyang<chendunyang1@huawei.com> # message auto-generated for no-merge-commit merge: !11302 merge fix/indexer-quant-cache-geir-leak-golden into master fix(indexer_quant_cache): 修复GEIR内存泄漏并补充数值golden Created-by: qq_37913898 Commit-by: chendunyang Merged-by: cann-robot Description: ## 背景 - 修复 #4792 反馈的 GEIR 示例成功路径中 Session 未释放问题。 - 补充 IndexerQuantCache kernel UT 的真实数值 golden 校验,避免仅判断输出非零而漏检数值错误。 ## 修改内容 - 在 RunGraph 成功完成后、GEFinalize 前释放 Session,与失败路径的资源释放行为保持一致。 - 新增 Normal 量化分支的独立 golden 测试,覆盖 roundScale=true/false。 - 校验完整 cache 字节、float32 scale 位模式,以及 slotMapping=-1 时目标行保持不变。 - golden 使用固定字面值,与被测 kernel 的计算逻辑独立。 ## 验证结果 - pre-commit 全部通过(含 clang-format、codespell、OAT)。 - ascend950 opkernel UT:16/16 通过。 - GEIR 示例编译通过。 Closes #4792 See merge request: cann/ops-transformer!11302 | 14 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 4 天前 | ||
| 14 天前 |