| Files | Last commit | Last update |
|---|---|---|
fix(pre-commit): 全仓代码规范整改——公共 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !13532 merge common into master fix(pre-commit): 全仓代码规范整改——公共 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: 关联Issue https://gitcode.com/cann/ops-transformer/issues/5939 ## 描述 全仓代码规范整改系列——公共目录(common/、examples/、tests/、scripts/ 等)。基于仓库 pre-commit 门禁对存量代码做一次性规范收敛: - clang-format 按 .clang-format 统一格式(列宽 120、指针左对齐等),ruff 格式化 Python - 行尾空白、文件末尾换行修复,少量文档笔误修正 - 规模:280 个文件,+4708/-5785 行,纯格式化改动语义等价,无逻辑变更 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/5939(全仓整改总跟踪) ## 测试 - pre-commit 全部钩子本地通过 - CI 流水线(compile/UT)验证 See merge request: cann/ops-transformer!13532 | 1 month ago | |
feat: allto_all_quant_matmul 960 hif4 scene Co-authored-by: tongzy1242<tongzeyun@huawei.com> # message auto-generated for no-merge-commit merge: !13950 merge feat/A6_mc2_merge_baseline into master feat: allto_all_quant_matmul 960 hif4 scene Created-by: tongzy1242 Commit-by: tongzy1242 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> AlltoAllMatmul 960DT 支持hifp4全量化 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#6520](https://gitcode.com/cann/ops-transformer/issues/6520) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 二级冒烟通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!13950 | 23 days ago | |
ci(compile): 编译范围推导支持暂缓编译条目(impact空=自身与闭包均不编),common/3rd 暂不触发下游 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !13631 merge moonep_4 into master ci(compile): 编译范围推导支持暂缓编译条目(impact空=自身与闭包均不编),common/3rd 暂不触发下游 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: 关联Issue https://gitcode.com/cann/ops-transformer/issues/5732(编译范围推导机制,前置 PR https://gitcode.com/cann/ops-transformer/pull/13100) ## 描述 --PR_COMPILE 编译范围推导(cmake/scripts/parse_compile_scope.py)机制扩展,并在 tests/compile_scope_whitelist.yaml 登记 3 条暂缓编译条目。 ### 1. 暂缓编译条目(impact 为空) 白名单条目 impact: [] 语义为"暂缓编译": - 直接改动该算子:不进入编译清单; - 其他算子变更:depends 反向闭包同样不附带该算子(新增 suppressed 集合,从闭包结果中剔除)。 本次登记 3 条(owner 要求暂缓编译,恢复时删除对应条目即可): - attention/fused_infer_attention_score(soc: ascend910b/910_93/mc62/950/960dt) - mc2/mega_moe(soc: ascend950/910_93/910b) - mc2/matmul_all_reduce(soc: ascend950/910b/310p) ### 2. common/3rd 暂不触发下游 域内 common/3rd 共享键变更暂不触发下游编译(当前仅验证算子间互相触发,后续恢复)。 ### 3. 边界 - 暂缓条目仅影响 kernel 编译范围,UT 不受影响; - experimental 变体与主线同 key,同样被暂缓条目覆盖。 ## 测试 - pre-commit 全绿(含 compile-scope-whitelist-check,21 entries); - 推导用例:3 个暂缓算子直接变更 @950/@910b → 空清单(build.sh exit 200 跳过);mc2/common 变更 → 空清单;attention/prompt_flash_attention 变更 @910b → 闭包含 incre_flash_attention、不含 fused_infer_attention_score(暂缓生效);flash_attn 白名单条目不受影响(@950 → flash_attn)。 See merge request: cann/ops-transformer!13631 | 26 days ago | |
添加pybind11依赖声明 Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !9952 merge add_module into master 添加pybind11依赖声明 Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 - requirements.txt中增加pybind11依赖声明 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/4283 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [x] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!9952 | 3 months ago | |
feat(gmm): 新增A4W4场景 GroupedMatmulActivation 新算子 Co-authored-by: jayshu<shuhaojie@huawei.com> # message auto-generated for no-merge-commit merge: !13929 merge jayshu-gmmactivation-independent-def into master feat(gmm): 新增A4W4场景 GroupedMatmulActivation 新算子 Created-by: jayshu Commit-by: jayshu Merged-by: cann-robot Description: ## 描述 新增独立 GroupedMatmulActivation 算子及 GroupedMatmulActivationWeightNz ACLNN、grouped_matmul_activation TorchExtension 接口,支持 MXFP4 E2M1 A4W4、WeightNZ 权重、E8M0 scale,直接输出单个 BF16 y,不进行输出 MX 量化,不创建、不传入、不写回 yScale。 主要改动: - 新增独立 gmm/grouped_matmul_activation 模块,包含 def、proto、infershape、tiling、kernel、ACLNN/Torch 接口、文档及测试,复用现有 TensorAPI/Blaze concat-N 实现。 - 新增 aclnnGroupedMatmulActivationWeightNzGetWorkspaceSize / aclnnGroupedMatmulActivationWeightNz,支持转置和非转置权重视图。actType 为字符串,仅支持 "swiglu";bias 为动态 TensorList,当前要求为空。 - 新接口仅支持 SwiGLU mode 2,执行前后分半分支、clamp、alpha/bias 和最终 BF16 转换。旧 WeightNzV3 的 A4W4 BF16 mode 0/2 路径保留兼容处理,不将 mode 0 宣传为新接口支持范围。 - 补充独立 op_def 类型组合、tiling 路由及 kernel 的直接 BF16 epilogue 接入;A4W4 的 K/N 均要求按 128 对齐。内部 transpose 属性由 ACLNN 从 stride 推导,生成转置/非转置两个模板 key(0/1)。恢复旧 V2 def,保留旧 V2 FP4 mode 0 的量化输出路由。 - 修复转置权重在视图归一化前错误比较 K 的问题,在归一化后检查矩阵维度,并校验权重与 scale 视图一致性。 - 新增仓内 TorchExtension 封装,统一 Meta 与实际接口的维度、TensorList 数量和 K/N 对齐要求,检查设备一致性,保留 CPU group_list 支持;Torch 层检查后将 CPU group_list 复制到 NPU,原始 ACLNN 要求 device group_list。 - 修复 Torch act_type.c_str() 临时值的 JIT 编译问题,空 bias 使用零元素 BF16 descriptor 完成 binary 选择。 本 PR 依赖 ops-tensor PR 448 的直接 BF16 epilogue 支持。新增行为按 A4W4/BF16 类型组合启用,既有 MXFP8 输出路径保持原输出语义;测试结果不等同于旧场景全量回归结论。 ## 关联的Issue 关联需求 Issue:https://gitcode.com/cann/ops-transformer/issues/6217 ## 测试 二级冒烟+泛化验证 ## 文档更新 - 新增 gmm/grouped_matmul_activation/docs/aclnnGroupedMatmulActivationWeightNz.md,描述 ACLNN 参数、计算公式、数据类型、格式及约束。 - 新增 gmm/grouped_matmul_activation/docs/torchapi_grouped_matmul_activation.md,描述 TorchExtension 调用、计算公式、Meta 行为和打包输入约定。 - 新增独立算子 README、op_api 头文件及接口声明。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 重构 - [ ] 测试 - [ ] 构建/CI - [ ] 配置变更 - [ ] 文档更新 - [ ] 依赖升级 - [ ] 安全修复 - [ ] 代码清理 - [ ] 其他,请描述: See merge request: cann/ops-transformer!13929 | 23 days ago | |
AF分离算子性能优化(batch接口多channel) Co-authored-by: jiangxiuhan1<jiangxiuhan@huawei.com> # message auto-generated for no-merge-commit merge: !12452 merge channel_ffn into master AF分离算子性能优化(batch接口多channel) Created-by: jiangxiuhan1 Commit-by: jiangxiuhan1 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: # PR #12452 代码检视报告 ## 检视概览 - **PR**:https://gitcode.com/cann/ops-transformer/pull/12452(AF 分离算子性能优化——URMA staging 区、多 channel、多层 Layer 支持、batch 接口) - **仓库**:ops-transformer(PR head: 950b5390e) - **变更规模**:27 个文件(26 修改 + 1 删除),diff 3680 行 - **检视范围**:mc2/attention_to_ffn(_v2)、mc2/ffn_to_attention(_v2)、mc2/common、tests/(Kernel + Tiling + op_api + torch_extension + UT + 文档 + 配置,全侧别) - **检视方法**:假设检验驱动(H0/H1、证据收集、自信值 ≥70% 判违规);规则库 cpp-secure / ascendc-topk / ascendc-api / ascendc-perf / mc2-specific / cpp-general / cpp-style / python-secure / regbase-review-checks - **检视流程**:文件分组(5 组)→ 全局预扫描(条例级匹配)→ 负载感知波次逐条检视(6 波 × 51 组,约 161 条规则实例)→ 综合研判(跨组模式识别 / 冲突解决 / 置信度过滤)→ 行号校验(红线 diff 范围校验 22/22 通过) - **检视时间**:2026-09-23 ## 检视统计 | 状态 | 条例数 | 占比 | |------|------|------| | PASS | 112 | 69.6% | | FAIL(发现问题) | 23(去重后 17 个独立问题) | 14.3% | | SUSPICIOUS(待确认附录) | 3 | 1.9% | | N/A(侧别/模式不匹配) | 22 | 13.7% | **综合研判**:系统性风险 2 项;冲突解决 2 项(MC2-04 vs MC2-18 范围互补、SEC-5.1 维持 PASS);去重 4 类根因(F2A 校验删除 7 条例、layerId 2 处、TIL-2 跨组 2 处、microBatchNum 2 条例)。 ### 全局摘要与系统性风险 本 PR 将两个 URMA 通信算子从"逐轮 SyncAll + core0 集中 WriteNbi"重构为"staging → counting-sort 建表 → 多 channel 并行 Batch WQE relay"三阶段,并引入多层 Layer(L≥1)与用户自管通信窗口。重构整体方向合理(同步完备性、DataCopy 对齐、批量搬运、资源生命周期等大量条例 PASS),但存在两类系统性回归: - **系统性风险 1(校验删除回归)**:kernel 侧与 host 侧共 4 处"删除既有防御且无替代"——F2A kernel 全部运行时元数据/窗口边界断言(7 条例独立确认)、ffn_to_attention 的 microBatchNum==1 校验、A2F 的 aivNum==0 校验、A2F 的 UB 容量校验缺失。**建议对本 PR 全部"删除 ascendc_assert / OP_TILING_CHECK"的 diff 段做一次专项全局排查**。 - **系统性风险 2(多层支持遗漏)**:allowMultiLayer 启用后,layerId 运行时校验、scales 层偏移、expertRankTable 层偏移三处仅 1 处(expertRankTable)正确实现,另 2 处遗漏。 --- ## 发现问题(HIGH 置信度) ### H1.【系统性·安全】F2A kernel 重构删除全部运行时元数据与窗口边界校验,负值/越界输入可致 GM 越界读 + 本地/远端窗口越界写 **确认条例**:SEC-2.2(105%)、SEC-1.1(120%)、SEC-1.3(95%)、SEC-3.3(85%)、SEC-3.5(105%)、MC2-05(100%)、GEN-1.1(90%)——7 个条例组独立确认同一根因 **问题描述**:本 PR 将 ReadTokenMetaData 重构为 PrefetchTokenMetaData + ReadTokenMetaDataFromLocal 时,删除了旧代码全部值域/边界断言且无任何替代: 1. actualTokenNum(int64 设备张量值)非负与 ≤maxTokenNum 两条断言被删——负值经 static_cast<uint64_t> 回绕为 ~1.8e19,scanStart/scanEnd 巨大 → PrefetchTokenMetaData 对 sessionIds/microBatchIds/tokenIds/expertOffsets 四个 GM 张量越界读;per-rank 计数越过按 maxTokenNum 分配的地址表容量。 2. curAttenWorkIds / curMicroBatchIds / curTokenBatchOffset / curTokenTopkOffset 四字段范围断言(<axisA_ / <microBatchNum_ / <axisBS_ / <expertNumPerToken_)全部被删——任一负值 int32→uint32 回绕 ~4.29e9,tokenSlot 经乘法放大为天量偏移。 3. 窗口写前断言 remoteDataOffset ≤ requiredWindowSize_、remoteFlagOffset ≤ winTokenInfoTableSize_ 与 curRankWinAddr != nullptr 判空被删——SendToLocal(本地 DataCopyPad)与 AppendRemoteDataWrite/AppendRemoteFlagWrite(URMA WriteNbi 远端 DMA 写)目标地址无界,**构成跨卡远端内存踩踏**。 4. axisH_ ≤ axisHS_ 断言被删且 FT2A tiling 无等价关系校验(对照:AT2FFN 侧本 PR 新增了 CheckUrmaWinSlotCapacity)——H>HS 时每 token 写入溢出 HS 槽位。 5. 上游无补偿:aclnn 层仅判空指针,torch 层仅校验 dim/dtype,tiling 只能校验 shape(无法校验设备张量**值**)。 **代码片段**(mc2/ffn_to_attention_v2/op_kernel/ffn_to_attention_urma.h 行 202-237): cpp inputDataAddr_ = x; xGMTensor_.SetGlobalBuffer(reinterpret_cast<__gm__ xType *>(x)); sessionIdsGMTensor_.SetGlobalBuffer(reinterpret_cast<__gm__ int32_t *>(sessionIds)); microBatchIdsGMTensor_.SetGlobalBuffer(reinterpret_cast<__gm__ int32_t *>(microBatchIds)); tokenIdsGMTensor_.SetGlobalBuffer(reinterpret_cast<__gm__ int32_t *>(tokenIds)); expertOffsetsGMTensor_.SetGlobalBuffer(reinterpret_cast<__gm__ int32_t *>(expertOffsets)); actualTokenNumGMTensor_.SetGlobalBuffer(reinterpret_cast<__gm__ int64_t *>(actualTokenNum)); if constexpr (isInputRankTable) { attnRankTableGMTensor_.SetGlobalBuffer(reinterpret_cast<__gm__ int32_t *>(attnRankTable)); } actualTokenNum_ = static_cast<uint64_t>(actualTokenNumGMTensor_.GetValue(0UL)); // 旧: >=0 与 <=maxTokenNum_ 断言已删 hSize_ = static_cast<uint64_t>(axisH_) * sizeof(xType); // 旧: axisH_<=axisHS_ 断言已删 batchSizeSendCnt_ = static_cast<uint64_t>(axisBS_) * expertNumPerToken_; const uint64_t tokenSlotNum = static_cast<uint64_t>(microBatchNum_) * batchSizeSendCnt_; winTokenInfoTableSize_ = Ceil(tokenSlotNum * sizeof(int32_t), URMA_WIN_ADDR_ALIGN) * URMA_WIN_ADDR_ALIGN; const uint64_t tokenWindowEnd = winTokenInfoTableSize_ + tokenSlotNum * axisHS_ * sizeof(xType); const uint64_t flagWindowOffset = Ceil(tokenWindowEnd, static_cast<uint64_t>(URMA_FLAG_SLOT_SIZE)) * URMA_FLAG_SLOT_SIZE; GM_ADDR localScratchAddr = GetWindowAddr(rankId_) + flagWindowOffset; localFlagAddr_ = localScratchAddr + static_cast<uint64_t>(aivId_) * URMA_FLAG_SLOT_SIZE; **代码片段**(同文件 行 314-337,六处断言全部删除): cpp __aicore__ inline void FFNToAttentionUrma<TemplateFFNToAttentionUrmaTypeFunc>::ReadTokenMetaDataFromLocal( ReadTokenMetaDataStruct &metaDataStruct, uint32_t localOffset) { int32_t curAttenWorkId = metadataTensor_.GetValue(localOffset); // 旧: assert(>=0) 已删 metaDataStruct.curAttenWorkIds = static_cast<uint32_t>(curAttenWorkId); metaDataStruct.curAttenWorkRank = metaDataStruct.curAttenWorkIds; if constexpr (isInputRankTable) { int32_t curAttenWorkRank = attnRankTableGMTensor_.GetValue(metaDataStruct.curAttenWorkIds); // OOB 读 metaDataStruct.curAttenWorkRank = static_cast<uint32_t>(curAttenWorkRank); } int32_t curMicroBatchId = metadataTensor_.GetValue(METADATA_CHUNK_TOKEN_NUM + localOffset); metaDataStruct.curMicroBatchIds = static_cast<uint32_t>(curMicroBatchId); // 旧: assert(<microBatchNum_) 已删 int32_t curTokenBatchOffset = metadataTensor_.GetValue(METADATA_TOKEN_BATCH_OFFSET_FIELD_INDEX * METADATA_CHUNK_TOKEN_NUM + localOffset); metaDataStruct.curTokenBatchOffset = static_cast<uint32_t>(curTokenBatchOffset); // 旧: assert(<axisBS_) 已删 int32_t curTokenTopkOffset = metadataTensor_.GetValue(METADATA_TOKEN_TOPK_OFFSET_FIELD_INDEX * METADATA_CHUNK_TOKEN_NUM + localOffset); metaDataStruct.curTokenTopkOffset = static_cast<uint32_t>(curTokenTopkOffset); // 旧: assert(<expertNumPerToken_) 已删 } **代码片段**(同文件 行 499-516 + 364-377,未校验值直接推导远端写地址): cpp for (uint32_t i = 0U; i < groupTokens; ++i) { uint64_t sourceTokenIndex = groupStart + i; ReadTokenMetaDataStruct metaDataStruct; ReadTokenMetaDataFromLocal(metaDataStruct, i); // Rank range was already validated in Pass 1 over the same [scanStart, scanEnd) window. uint64_t tokenSlot = (static_cast<uint64_t>(metaDataStruct.curMicroBatchIds) * axisBS_ + metaDataStruct.curTokenBatchOffset) * expertNumPerToken_ + metaDataStruct.curTokenTopkOffset; // 三分量均未校验 uint64_t remoteDataOffset = winTokenInfoTableSize_ + tokenSlot * static_cast<uint64_t>(axisHS_) * sizeof(xType); uint64_t remoteFlagOffset = tokenSlot * sizeof(int32_t); uint32_t dstRank = metaDataStruct.curAttenWorkRank; if (dstRank == rankId_) { SendToLocal(localWindowAddr + remoteDataOffset, localWindowAddr + remoteFlagOffset, sourceTokenIndex, xCopyParams); // 本地窗口越界写 continue; } ... // AppendRemoteDataWrite(行 364-377): uint64_t remoteDataOffset = winTokenInfoTableSize_ + addressEntry.tokenSlot * static_cast<uint64_t>(axisHS_) * sizeof(xType); GM_ADDR sourceDataAddr = inputDataAddr_ + addressEntry.sourceTokenIndex * hSize_; (void)hcomm_.WriteNbi<REMOTE_WQE_CONFIG>(batchHandle, remoteWindowAddr + remoteDataOffset, sourceDataAddr, static_cast<uint32_t>(hSize_)); // URMA 远端 DMA 写,目标无界 **假设检验证据**:正向——规范违反 +40%(外部数据作索引/偏移未校验、有符号→无符号裸转换、窗口写入无边界);上下文防御缺失 +30%(唯一剩余断言 curAttenWorkRank < worldSize_(:429)只覆盖 rank 字段,注释自证仅校验 rank);PR 归属 +20%(断言删除全部在 diff 删除行内);数据流/调用链风险 +15%~+15%(输入为设备张量运行时值,偏移直接进入 WriteNbi/DataCopyPad)。负向——上游校验均经验证不覆盖张量**值**(0 分)。自信值 85%~120%(各条例)≥ 70% → 判定违规。 **修复建议**: 1. Init 恢复:int64_t v = actualTokenNumGMTensor_.GetValue(0UL); ascendc_assert(v >= 0 && (uint64_t)v <= maxTokenNum_, ...);恢复 axisH_ <= axisHS_ 断言。 2. ReadTokenMetaDataFromLocal(或 Pass 1 消费点)恢复四字段范围校验;对直接决定写地址的 tokenSlot 增加硬校验 ascendc_assert(tokenSlot < tokenSlotNum)(ascendc_assert 可能被编译掉,建议至少此项使用不可编译剔除的检查)。 3. SendToLocal/AppendRemoteDataWrite/AppendRemoteFlagWrite 写前恢复以 cclBufferSize/winTokenInfoTableSize_ 为界的偏移断言。 4. FT2A tiling 增加 Host 侧 H > HS 拒绝(对齐 AT2FFN 的 CheckUrmaWinSlotCapacity)。 --- ### H2.【安全】A2F 多层支持:运行时 layerId 无 < L 校验 + layerId_ * expertRankTableCnt uint32 乘法回绕 **确认条例**:SEC-1.1(105%)、SEC-2.2 违规点3(90%) **问题描述**:本 PR 将 expert_rank_table Dim0 校验由 ==1 放宽为 ≥1 并启用 allowMultiLayer=true,文档声明"运行时 LayerId 取值需小于 L",但**该约束无任何代码 enforcement**:kernel 侧 layerId_ 取自 GM 张量后未与 axisL_(tilingData 已下发、Init 行 287 已加载但从未用于校验)比较;且 layIdsExpRankTableOffset_ = layerId_ * expertRankTableCnt 为 uint32×uint32 在 32 位空间回绕后才赋给 uint64。layerId_ ≥ L 或负值时:越界读 expertRankTable → 垃圾 rankCnt/toRankId → GetWindowAddr(toRankId_) → epHcclBuffer_[toRankId] 二次越界(该读发生在 Process 行 1131 的 toRankId 断言**之前**)。此前 L 恒为 1(layerId_ 恒 0)使该风险不可达,本 PR 首次激活。 **代码片段**(mc2/attention_to_ffn_v2/op_kernel/attention_to_ffn_urma.h 行 318-327、607-618): ```cpp DataCacheCleanAndInvalid<int32_t, CacheLine::SINGLE_CACHE_LINE, DcciDst::CACHELINE_OUT>(sessionIdGMTensor_); sessionId_ = sessionIdGMTensor_.GetValue(0); DataCacheCleanAndInvalid See merge request: cann/ops-transformer!12452 | 1 month ago |
| Files | Last commit | Last update |
|---|---|---|
| 1 month ago | ||
| 23 days ago | ||
| 26 days ago | ||
| 3 months ago | ||
| 23 days ago | ||
| 1 month ago |