| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
【feature】mla_preprocess算子新增支持RoPE开关 Co-authored-by: HuangKun8682<huangkun61@huawei.com> # message auto-generated for no-merge-commit merge: !9386 merge personal_prepreocess_optional_RoPE into master 【feature】mla_preprocess算子新增支持RoPE开关 Created-by: HuangKun8682 Commit-by: HuangKun8682 Merged-by: cann-robot Description: ## 描述 本 PR 为 MlaPreprocess 和 MlaPreprocessV2 增加 RoPE 关闭能力,不新增 ACLNN 属性,通过公开 ACLNN 接口中 cos、sin 是否为空控制: - cos != nullptr && sin != nullptr:保持原有 Q-RoPE、K-RoPE 计算,兼容现有调用。 - cos == nullptr && sin == nullptr:关闭 RoPE,仅跳过 Q/K 旋转数学运算。 - 仅有一个输入为空:接口返回参数错误,提示 cos、sin 必须同时传入或同时为空。 ### ACLNN 接口与 IR 兼容性 - MlaPreprocess、MlaPreprocessV2 的 IR 定义中,cos、sin 继续保持 REQUIRED。 - 不修改现有输入的名称、顺序、必选类型和数据类型,避免已有 OM 模型因 IR 输入类型变化而加载失败。 - 不新增算子属性,不改变公开 ACLNN 函数的参数顺序和二进制接口形式。 - 将框架生成的两段式接口作为 aclnnInner* 接口: - aclnnInnerMlaPreprocessGetWorkspaceSize - aclnnInnerMlaPreprocess - aclnnInnerMlaPreprocessV2GetWorkspaceSize - aclnnInnerMlaPreprocessV2 - 为 MlaPreprocess 和 MlaPreprocessV2 实现自定义公开 ACLNN 两段式接口。 - 自定义 GetWorkspaceSize 接口负责校验 cos、sin 是否成对为空;二者同时为空时,构造满足 REQUIRED IR 输入要求的一维空 Tensor,调用对应的 aclnnInner*GetWorkspaceSize。 - 自定义二段执行接口直接调用对应的 aclnnInner* 执行接口。 ### Host InferShape 和 Tiling - cos、sin 继续通过 GetRequiredInputShape 获取。 - Host 侧仅将一维 shape [0] 同时出现识别为关闭 RoPE。 - 正常启用 RoPE 时,cos、sin 的 shape 必须为 [tokenNum, 64]。 - 两者关闭状态不一致,或启用时 shape 不符合要求,InferShape/Tiling 返回失败。 - 将 RoPE 开关写入共享 TilingData 的 enableRope 字段。 - Tiling 入口检查并返回 Init() 的错误状态,避免参数校验失败后继续生成并下发 TilingData。 - 其余必选输入继续通过 GetRequiredInputShape/Desc/Stride 获取。 - 保留 Cache dim0 非连续 stride 支持和相关校验。 ### Device Kernel RoPE 开启时完全沿用原有 Q/K RoPE 路径。 RoPE 关闭时: - Q 路径通过 ProcessRawQ 读取原始 Q-rope 分量,并按照原布局写入 qOut/qRopeOut。 - K 路径跳过 cos、sin 搬运和旋转计算,将原始 K-rope 分量写回原输出及 Cache 位置。 - 保留完整的 Q 输出拼接、KV Cache 写入和 Cache DataCopy。 - Kernel 入口使用有效输入地址作为未使用 RoPE GlobalTensor 的占位地址;RoPE 关闭时不会读取该地址。 以下 Kernel 路径均已适配: - FP16 + INT8 W8A8 - BF16 + INT8 W8A8 - BF16 + BF16 NoQuant ### MlaPreprocessV2 MlaPreprocessV2 复用 MlaPreprocess 的 TilingData、Host Tiling 和 FP16/BF16/NoQuant Kernel 实现,因此同步支持相同的 RoPE 开关语义。 MlaPreprocessV2 独立适配: - 自定义公开 ACLNN 两段式接口及 aclnnInnerMlaPreprocessV2* 调用。 - InferShape 对 RoPE 输入的成对和 shape 校验。 - Kernel 入口的未使用 RoPE 地址处理。 qDownOutFlag、doRmsNorm、qDownOut 的计算和输出语义保持不变。 ### 语义保持 RoPE 关闭只跳过 Q/K 旋转数学运算,不修改以下行为: - MatMul、Dequant、RMSNorm、Quant - Q-nope、CTKV - qDownOut - 输出 Tensor shape - Cache 布局和 Cache DataCopy - 非连续 Cache dim0 stride - 原始 Q-rope/K-rope 在输出和 Cache 中的位置 ### 文档和测试 - 更新 aclnnMlaPreprocess.md 和 aclnnMlaPreprocessV2.md。 - 更新 MlaPreprocess、MlaPreprocessV2 README。 - 更新 ACLNN 示例,展示使用 enableRope ? cos : nullptr 和 enableRope ? sin : nullptr 控制 RoPE。 - 更新 Host InferShape、Host Tiling 和 Kernel UT,覆盖: - cos、sin 均为正常 Tensor。 - cos、sin 均为空。 - 仅有一个为空的非法输入。 - 非法空 shape。 - RoPE on/off Kernel 输出。 - MlaPreprocessV2 的 qDownOutFlag 和 doRmsNorm 正交组合。 ## 关联的 Issue Issue [#4052](https://gitcode.com/cann/ops-transformer/issues/4052) ## 测试 MlaPreprocess 和 MlaPreprocessV2 各构造 300 个 ACLNN 泛化精度用例,每套用例分布如下: | 计算路径 | RoPE on | RoPE off | 合计 | |---|---:|---:|---:| | FP16 + INT8 W8A8 | 40 | 80 | 120 | | BF16 + INT8 W8A8 | 40 | 80 | 120 | | BF16 + BF16 NoQuant | 20 | 40 | 60 | | **合计** | **100** | **200** | **300** | MlaPreprocessV2 用例同时覆盖: | 开关 | RoPE on | RoPE off | 合计 | |---|---:|---:|---:| | qDownOutFlag=false | 50 | 100 | 150 | | qDownOutFlag=true | 50 | 100 | 150 | | doRmsNorm=false | 60 | 120 | 180 | | doRmsNorm=true | 40 | 80 | 120 | 当前j测试结果: - MlaPreprocess:精度测试全量单次执行 294/300 通过;6 个失败 profile 各随机复跑100次,CT 双标杆统计复检 6/6 通过。 - MlaPreprocessV2:精度测试全量单次执行 300/300 通过。 - Kernel、Host Tiling 和 InferShape UT 覆盖 RoPE on/off 及非法输入场景。 [用例脚本](https://gitcode.com/HuangKun8682/aclnn_mla_preprocess_rope) ## 文档更新 更新以下文件: - attention/mla_preprocess/README.md - attention/mla_preprocess/docs/aclnnMlaPreprocess.md - attention/mla_preprocess_v2/README.md - attention/mla_preprocess_v2/docs/aclnnMlaPreprocessV2.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!9386 | 1 个月前 | |
MLAPO,MLAPOV2 hostUT、kernelUT新框架修改 Co-authored-by: zhengyuhao3<zhengyuhao3@huawei.com> # message auto-generated for no-merge-commit merge: !857 merge master-ut into master MLAPO,MLAPOV2 hostUT、kernelUT新框架修改 Created-by: zhengyuhao3 Commit-by: zhengyuhao3 Merged-by: cann-robot Description: ## 描述 MLAPO,MLAPOV2 hostUT、kernelUT新框架修改 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试  ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!857 | 8 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 8 个月前 |