| Files | Last commit | Last update |
|---|---|---|
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 month ago | |
feat(random_uniform_v2): 融合pass支持DAV_9201和DAV_9202 Co-authored-by: magicjason0007<wangdongxu20@huawei.com> # message auto-generated for no-merge-commit merge: !7119 merge master into master feat(random_uniform_v2): 融合pass支持DAV_9201和DAV_9202 Created-by: magicjason0007 Commit-by: magicjason0007 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 扩展 RandomUniformV2 融合 Pass 的平台支持范围。 原实现中,IsTargetPlatform() 仅将 DAV_3510 识别为目标平台,导致 DAV_9201 和 DAV_9202 平台跳过该融合 Pass。本次在支持架构集合中新增 NpuArch::DAV_9201 和 NpuArch::DAV_9202,使上述 平台能够继续执行后续融合逻辑。 本次仅修改平台判断,未调整融合算法及数据处理逻辑。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/4544 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 已经完成本地验证和二级冒烟,已通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!7119 | 5 days ago | |
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 | 22 days ago | |
随机数算子重构优化 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 months ago | |
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 | 21 days ago | |
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 | 22 days ago | |
产品名变更 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 month ago | |
docs: add English translations for markdown files Co-authored-by: jenny_xiang<jenny.xiang@huawei.com> # message auto-generated for no-merge-commit merge: !7113 merge docs/add-english-translations into master docs: add English translations for markdown files Created-by: jenny_xiang Commit-by: jenny_xiang Merged-by: cann-robot Description: ## 描述 新增仓库Markdown文档英文译稿(第二批,共409个文件):第一批(已合入)之外的其余全部译稿,覆盖conversion、examples、ge、math、random各类算子README译稿,以及CHANGELOG_en.md、.gitcode PR模板英文版等。 本批内全部仓内链接均指向master已有文件(含第一批已合入的21+2篇译稿),合入后本仓432篇英文文档全部就位,链接完整生效。 本批同时包含4篇基于最新源文档的增量更新(math/ada_cast、math/prod_force_se_a、math/sinkhorn、math/xlogy,对应上游近期文档变更)。 ## 关联的Issue 无 ## 测试 文档类变更,无需算子测试;已通过链接有效性校验(本批全部相对链接仅指向master已有文件,无指向本PR外未提交文件的链接),并完成逐篇翻译规范自查与语义校对(含支持状态表、限定词、术语、数值符号核对)。 ## 文档更新 新增409个英文译稿文件(*_en.md / .en-US.md),不修改任何现有文件。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!7113 | 5 days ago |
RandomUniformV2
English | 简体中文
Product Support Status
| Product | Supported |
|---|---|
| Ascend 950PR&950DT products | √ |
| Atlas A3 products | × |
| Atlas A2 products | × |
| Atlas 200I/500 A2 inference products | × |
| Atlas inference products | × |
| Atlas training products | × |
Function Description
- Operator function: returns a sequence of random numbers that follows the uniform distribution.
Parameter Description
| Parameter Name | Input/Output/Attribute | Description | Data Type | Data Format |
|---|---|---|---|---|
| shape | Input | Shape of the output tensor. | INT64, INT32 | ND |
| offset | Input | Offset value. | INT64 | ND |
| seed | Attribute | Random number seed. | INT | ND |
| seed2 | Attribute | Random number seed. | INT | ND |
| dtype | Attribute | Specifies the data type of the output. | INT | ND |
| y | Output | Generated random number sequence. | FLOAT16, FLOAT, BF16 | ND |
| offset | Output | Offset value. | INT64 | ND |
Constraint Description
None
Invocation Description
| Invocation Method | Sample Code | Description |
|---|---|---|
| Graph-mode invocation | test_geir_random_uniform_v2 | Invokes the RandomUniformV2 operator by building a graph through the operator IR. |