| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix: 修复多个算子样例运行问题 Co-authored-by: xujiachen8<xujiachen8@h-partners.com> # message auto-generated for no-merge-commit merge: !5878 merge fix-issue-3159-runtime-master-20260920T083218Z into master fix: 修复多个算子样例运行问题 Created-by: xujiachen8 Commit-by: xujiachen8 Merged-by: cann-robot Description: ## 描述 修复 #3159 中多个算子样例无法编译或运行的问题: - 修正 batch_to_space 和 random_uniform_v2 样例中 DT_INT64 输入使用 int32_t 缓冲的问题; - 修正 split 样例的 split_dim 类型、shape、值及动态输出声明; - 修正 accumulate_nv2 普通与 arch35 样例的公共 aclnn 头文件引用路径; - 限制 batch_to_space 的终端输出量,完整结果仍写入输出文件。 本次只修改 examples,不修改算子定义、host tiling 或 kernel 实现。 ## 关联的Issue Closes #3159 ## 测试 - CANN 9.2.0 + Ascend 950PR:Issue 涉及的 7 个 graph/eager 样例全部运行成功; - accumulate_nv2 普通与 arch35 两份样例均运行成功,输出数值符合预期; - exact-files pre-commit、clang-format、OAT 通过; - git -c core.whitespace=cr-at-eol diff --check 通过。 尚未执行四项 msSanitizer,待 PR CI 继续验证。 ## 文档更新 无。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5878 | 1 个月前 | |
drop_out_v3、random_standard_normal_v2、random_uniform_v2、truncated_normal_v2算子fusion pass适配350平台 Co-authored-by: huairuchen<chenhuairu@huawei.com> # message auto-generated for no-merge-commit merge: !6327 merge bugfix/random-fusion-pass-npuarch-gate into master drop_out_v3、random_standard_normal_v2、random_uniform_v2、truncated_normal_v2算子fusion pass适配350平台 Created-by: huairuchen Commit-by: huairuchen Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 四个fusion pass的平台门控原先基于 short_soc_version 字符串判断(仅 "Ascend950"),导致 NpuArch 同为 DAV_3510 的 Ascend350 上融合被跳过。 - pass 侧改用 rtGetSocSpec("version", "NpuArch") 获取芯片架构(与 argmin_onnx_plugin.cpp 中 IsRegBasePlatform 同范式),白名单 {DAV_3510};StatelessBernoulli 为 {DAV_3510, DAV_2201},与原 soc 白名单(950+910_93)行为等价 - UT 侧增加 rtGetSocSpec 弱符号 stub(ASCEND_NPU_ARCH 环境变量),原有平台 mock 保留、仅追加 SetNpuArch ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。 --> https://gitcode.com/cann/ops-math/issues/3684 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 冒烟,A5 350平台的泛化测试,证明不会影响到其他机器上的运作,以及能成功在350平台上被正确调用。 涉及到修改UT,也确保了A5平台上UT前后无变化。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6327 | 24 天前 | |
TensorEqual & RandomUniformV2 supprot Ascend960dt/Ascend960pr Co-authored-by: magicjason0007<wangdongxu20@huawei.com> # message auto-generated for no-merge-commit merge: !6401 merge master into master TensorEqual & RandomUniformV2 supprot Ascend960dt/Ascend960pr Created-by: magicjason0007 Commit-by: magicjason0007 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 将 tensor_equal、random_uniform_v2 两个算子扩展适配 ascend960dt / ascend960pr芯片 具体改动: 1. SoC 支持扩展(tensor_equal、random_uniform_v2): - 算子 CMakeLists.txt:SUPPORT_COMPUTE_UNIT 追加 ascend960dt、ascend960pr(置于末尾),SUPPORT_TILING_DIR 对应追加,两个新平台仍复用 arch35 tiling 目录; - op_host/*_def.cpp:AddConfig 追加 ascend960dt/ascend960pr; - op_host/config/:新增 ascend960dt/、ascend960pr/ 配置目录(binary.json、simplified_key.ini与 ascend950 一致); - scripts/kernel/binary_config/ascendc_config.json:TensorEqual 条目 compute_units 追加ascend960dt/960pr 及对应 compile_options。 - 2. tensor_equal tiling 分核适配(op_host/arch35/tensor_equal_tiling_arch35.h/.cpp):新增 IsDv121() 架构判断接口,121 平台(DAV9201/DAV9202,即 ascend960dt/960pr)单核最小处理粒度由 2048调整为 256,通过 NpuArch 架构判断隔离,不影响 ascend950/ascend350 原有分核逻辑。 3. aclnn 校验:无需改动,仓内 aclnn_check.h 的 IsRegBase 已覆盖 DAV_9201/9202,CheckSocVersionGe910B 基于 NpuArch 判断(未使用 SocVersion 范围判断),天然支持 960 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/3607 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 本地验证和二级冒烟均已通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:算子新芯片平台(ascend960dt/ascend960pr)适配扩展 See merge request: cann/ops-math!6401 | 25 天前 | |
随机数算子重构优化 Co-authored-by: fenglin28<fenglin28@huawei.com> # message auto-generated for no-merge-commit merge: !949 merge hh into master 随机数算子重构优化 Created-by: guankarl Commit-by: fenglin28 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 随机数算子重构优化,使用统一模板实现。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> https://gitcode.com/cann/ops-math/issues/552 <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x ] 其他,请描述: 随机数算子重构,总共分为 5 个部分: 算子infershape/inferdtype 实现了公共逻辑提取CommonInferShape,不同算子根据算子原型配置对应mode,新算子开发10行代码搞定 示例: static graphStatus InferShapeRandomUniformV2(gert::InferShapeContext* context) { const std::unordered_map<std::string, size_t>& input_map = { {"shape", RANDOM_UNIFORM_V2_X}, {"offset", RANDOM_UNIFORM_V2_OFFSET}}; const std::unordered_map<std::string, size_t>& output_map = { {"y", RANDOM_UNIFORM_V2_Y}, {"offset", RANDOM_UNIFORM_V2_OFFSET}}; int32_t mode = RANDOM_UNIFORM_V2_MODE_TYPE; return ops::common::CommonInferShape(context, input_map, output_map, mode); } IMPL_OP_INFERSHAPE(RandomUniformV2).InferShape(InferShapeRandomUniformV2); 算子信息库注册def 算子的不同输入如果有多组dtype时候,在算子信息库的枚举中,可能会有几十种组合,手写容易漏掉或者重复,且不好检查,通过提供RandomDtypeFmtGen类,调用对应接口即可获取全部组合类型。 示例: gen.GetSequence("inOutType") this->Input("x") .ParamType(REQUIRED) .DataType({gen.GetSequence("inOutType")}) .Format({baseFormatSeq}) .UnknownShapeFormat({baseFormatSeq}); 融合规则 有状态算子转无状态算子,存在范式的融合规则,通过提取公共类,定义公共接口,后续类似融合规则无需重新开发,直接调用对应接口即可。 class FusionRandomUtils { public: FusionRandomUtils() = default; ~FusionRandomUtils() = default; // FusionRandomUtils(const FusionRandomUtils&) = delete; // FusionRandomUtils& operator=(const FusionRandomUtils&) = delete; /** * @param graph 计算图对象 * @param opDesc 算子描述指针 * @param offsetNode 输出:创建的offset Variable节点 * @param shapeDesc Shape输入的Tensor描述 * @param outputDesc 主输出Y的Tensor描述 * @param opNode 基准算子节点(用于拼接新节点名) * @param fusionPassName 日志标识(用于日志溯源) * @param fusedOpType 融合算子类型(用于日志/错误信息溯源) * @return Status SUCCESS/FAILED/PARAM_INVALID */ static bool CheckSocVersion(const std::string& fusedOpType); static Status AddVariableNode( ge::ComputeGraph& graph, ge::NodePtr opNode, const ge::GeTensorDesc& offsetDesc, ge::NodePtr& newNode, const uint8_t* dataPtr, size_t size, const std::string& fusionPassName); static Status CreateInputOpDesc( ge::OpDescPtr& opDesc, ge::GeTensorDesc shapeDesc, ge::GeTensorDesc offsetDesc, const std::string& fusedOpType); static Status CreateOutputOpDesc( ge::OpDescPtr& opDesc, ge::GeTensorDesc outputDesc, ge::GeTensorDesc offsetDesc, const std::string& fusedOpType); static Status AddOpNodeAndDesc(ge::ComputeGraph& graph, ge::OpDescPtr& opDesc, ge::NodePtr& offsetNode, ge::GeTensorDesc shapeDesc, ge::GeTensorDesc outputDesc, ge::NodePtr opNode, const std::string& fusionPassName, const std::string& fusedOpType); static Status UpdateAttr(ge::NodePtr opNode, int64_t seed, int64_t seed2, ge::DataType dtype, const std::string& fusionPassName, const std::string& fusedOpType); static Status CreateNode(ge::ComputeGraph& graph, ge::NodePtr opNode, std::vector<ge::NodePtr>& fusionNodes, ge::NodePtr& opV2Node, const std::string& fusionPassName, const std::string& fusedOpType, const std::set<ge::DataType> aicoreDtypeSupportList); static Status RemoveNode(ge::NodePtr node, ge::ComputeGraph& graph, const std::string& fusedOpType); static Status ReplaceNode(ge::NodePtr oldNode, ge::NodePtr newNode, ge::ComputeGraph& graph, const std::string& fusedOpType, const std::string& fusionPassName); }; 算子tiling 抽象并统一流程,更加适合随机数算子,统一tilingData,按照配置做检查。 统一流程: ge::graphStatus RandomTilingArch35::DoTiling() { opName_ = context_->GetNodeName(); OP_LOGD(opName_, "Start tiling for op: %s", opName_.c_str()); // 步骤1:校验输入输出和属性 auto ret = CheckInputsOutputsAndAttrs(); if (ret != ge::GRAPH_SUCCESS) { OP_LOGE(opName_, "Check inputs/outputs/attrs failed"); return ret; } // 步骤2: 获取硬件信息 ret = GetPlatformInfo(); if (ret != ge::GRAPH_SUCCESS) { OP_LOGE(opName_, "Get platform info failed"); return ret; } // 步骤3: 填充TilingData ret = FillUnifiedTilingData(); if (ret != ge::GRAPH_SUCCESS) { OP_LOGE(opName_, "Fill tiling data failed"); return ret; } // 步骤4:计算tilingKey和workspace ret = CalcTilingKeyAndWorkspace(); if (ret != ge::GRAPH_SUCCESS) { OP_LOGE(opName_, "Calc tiling key/workspace failed"); return ret; } // 步骤5:后置处理(可选) ret = UniqueProcess(); if (ret != ge::GRAPH_SUCCESS) { OP_LOGE(opName_, "Unique process failed"); return ret; } // 步骤6:写入context ret = WriteBackToContext(); if (ret != ge::GRAPH_SUCCESS) { OP_LOGE(opName_, "Write tiling data to context failed"); return ret; } // 步骤7:调用dump函数 auto info = tilingData_.DumpTilingInfo(); OP_LOGI("RandomTiling", "%s", info.str().c_str()); OP_LOGD(opName_, "Tiling success for op: %s", opName_); return ge::GRAPH_SUCCESS; } 统一tilingData int64_t usedCoreNum = 0; int64_t normalCoreProNum = 0; int64_t tailCoreProNum = 0; int64_t singleBufferSize = 0; uint32_t key[2] = {0}; uint32_t counter[4] = {0}; int64_t outputSize = 0; int64_t probTensorSize = 0; int64_t sharedTmpBufSize = 0; 当前tilingData较少,后续如有需要,按需添加 按照配置做检查: OpTilingConfig config; config.inputCheckRules = { // 输入索引: dtype列表,shapeSize,dim_num {0, {{ge::DT_INT32, ge::DT_INT64}, -1, {1}, nullptr}}, // shape {1, {{ge::DT_INT64}, 1, {}, nullptr}}, // offset }; config.outputCheckRules = { // 输出索引: dtype列表,shapeSize,dim_num {0, {{ge::DT_FLOAT, ge::DT_FLOAT16, ge::DT_BF16}, -1, {1,2,3,4,5,6,7,8}, nullptr}} }; // y 算子kernel kernel抽取了RandomKernelBaseOp类,专门管理tilingData,内置了Skip函数和生成随机数函数,其他算子只需调用VarsInit接口即可 See merge request: cann/ops-math!949 | 9 个月前 | |
drop_out_v3、random_standard_normal_v2、random_uniform_v2、truncated_normal_v2算子fusion pass适配350平台 Co-authored-by: huairuchen<chenhuairu@huawei.com> # message auto-generated for no-merge-commit merge: !6327 merge bugfix/random-fusion-pass-npuarch-gate into master drop_out_v3、random_standard_normal_v2、random_uniform_v2、truncated_normal_v2算子fusion pass适配350平台 Created-by: huairuchen Commit-by: huairuchen Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 四个fusion pass的平台门控原先基于 short_soc_version 字符串判断(仅 "Ascend950"),导致 NpuArch 同为 DAV_3510 的 Ascend350 上融合被跳过。 - pass 侧改用 rtGetSocSpec("version", "NpuArch") 获取芯片架构(与 argmin_onnx_plugin.cpp 中 IsRegBasePlatform 同范式),白名单 {DAV_3510};StatelessBernoulli 为 {DAV_3510, DAV_2201},与原 soc 白名单(950+910_93)行为等价 - UT 侧增加 rtGetSocSpec 弱符号 stub(ASCEND_NPU_ARCH 环境变量),原有平台 mock 保留、仅追加 SetNpuArch ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。 --> https://gitcode.com/cann/ops-math/issues/3684 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 冒烟,A5 350平台的泛化测试,证明不会影响到其他机器上的运作,以及能成功在350平台上被正确调用。 涉及到修改UT,也确保了A5平台上UT前后无变化。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6327 | 24 天前 | |
TensorEqual & RandomUniformV2 supprot Ascend960dt/Ascend960pr Co-authored-by: magicjason0007<wangdongxu20@huawei.com> # message auto-generated for no-merge-commit merge: !6401 merge master into master TensorEqual & RandomUniformV2 supprot Ascend960dt/Ascend960pr Created-by: magicjason0007 Commit-by: magicjason0007 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 将 tensor_equal、random_uniform_v2 两个算子扩展适配 ascend960dt / ascend960pr芯片 具体改动: 1. SoC 支持扩展(tensor_equal、random_uniform_v2): - 算子 CMakeLists.txt:SUPPORT_COMPUTE_UNIT 追加 ascend960dt、ascend960pr(置于末尾),SUPPORT_TILING_DIR 对应追加,两个新平台仍复用 arch35 tiling 目录; - op_host/*_def.cpp:AddConfig 追加 ascend960dt/ascend960pr; - op_host/config/:新增 ascend960dt/、ascend960pr/ 配置目录(binary.json、simplified_key.ini与 ascend950 一致); - scripts/kernel/binary_config/ascendc_config.json:TensorEqual 条目 compute_units 追加ascend960dt/960pr 及对应 compile_options。 - 2. tensor_equal tiling 分核适配(op_host/arch35/tensor_equal_tiling_arch35.h/.cpp):新增 IsDv121() 架构判断接口,121 平台(DAV9201/DAV9202,即 ascend960dt/960pr)单核最小处理粒度由 2048调整为 256,通过 NpuArch 架构判断隔离,不影响 ascend950/ascend350 原有分核逻辑。 3. aclnn 校验:无需改动,仓内 aclnn_check.h 的 IsRegBase 已覆盖 DAV_9201/9202,CheckSocVersionGe910B 基于 NpuArch 判断(未使用 SocVersion 范围判断),天然支持 960 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/3607 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 本地验证和二级冒烟均已通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:算子新芯片平台(ascend960dt/ascend960pr)适配扩展 See merge request: cann/ops-math!6401 | 25 天前 | |
产品名变更 Co-authored-by: gitcode-chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !5912 merge master into master 产品名变更 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> AI处理器对应的产品型号名称更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#3258](https://gitcode.com/cann/ops-math/issues/3258) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ok ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> *.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5912 | 1 个月前 |
RandomUniformV2
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | × |
| Atlas A2系列产品 | × |
| Atlas 200I/500 A2推理产品 | × |
| Atlas推理系列产品 | × |
| Atlas训练系列产品 | × |
功能说明
- 算子功能:返回均匀分布的随机数列。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| shape | 输入 | 输出张量的形状。 | INT64、INT32 | ND |
| offset | 输入 | 偏移值。 | INT64 | ND |
| seed | 属性 | 随机数种子。 | INT | ND |
| seed2 | 属性 | 随机数种子。 | INT | ND |
| dtype | 属性 | 指定输出的数据类型。 | INT | ND |
| y | 输出 | 生成的随机数序列。 | FLOAT16、FLOAT、BF16 | ND |
| offset | 输出 | 偏移值。 | INT64 | ND |
约束说明
无
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| 图模式调用 | test_geir_random_uniform_v2 | 通过算子IR构图方式调用RandomUniformV2算子。 |