| Files | Last commit | Last update |
|---|---|---|
update operators Co-authored-by: biabu111<hebaojing1@huawei.com> # message auto-generated for no-merge-commit merge: !916 merge master into master update operators Created-by: biabu111 Commit-by: biabu111 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 增强以下算子功能 tensor_equal tensor_move tril triu stalessrandomuniform stalessrandomnormal assign dsarandomuniform dsarandomnormal ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> #530 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!916 | 9 months ago | |
Fix V2 AICORE/AICPU Co-authored-by: gh_M<meiguohan@huawei.com> # message auto-generated for no-merge-commit merge: !2234 merge test into master Fix V2 AICORE/AICPU Created-by: gh_M Commit-by: gh_M Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> aclnnInplaceRandom,aclnnInplaceUniform接口实现根据IsRegBase()决定走AICPU还是AICORE,double类型不额外做判断 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/1303 测试aclnnInplaceRandom, aclnnInplaceUniform 性能数据 老版本走的是 AICORE分支,新版本走的是AICPU分支,导致性能相较老版本过差 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 已完成泛化测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!2234 | 6 months 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 | |
refactor(random): random 系列算子去除16M workspace 冗余 Co-authored-by: aiteer<lujiale4@huawei.com> # message auto-generated for no-merge-commit merge: !6462 merge random_ws_zero into master refactor(random): random 系列算子去除16M workspace 冗余 Created-by: aiteer Commit-by: aiteer Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 针对 random 系列算子去除 16M workspace 冗余:将各算子 arch35 侧 tiling 中用于 AscendC 工具库的 workspace 常量由 16777216(16M)改为 0,并同步删除 stateless_random_normal_v2、stateless_random_uniform_v2 两个 kernel 入口中对 workspace 的非空校验与 SetSysWorkspace/GetUserWorkspace 调用,使算子不再额外申请和传递该冗余 workspace;相应 UT 的期望 workspace 值也由 16777216 调整为 0。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#3844](https://gitcode.com/cann/ops-math/issues/3844) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 各算子kernel各路径进行ttk测试,功能精度全部pass ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6462 | 13 days ago | |
refactor(random): random 系列算子去除16M workspace 冗余 Co-authored-by: aiteer<lujiale4@huawei.com> # message auto-generated for no-merge-commit merge: !6462 merge random_ws_zero into master refactor(random): random 系列算子去除16M workspace 冗余 Created-by: aiteer Commit-by: aiteer Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 针对 random 系列算子去除 16M workspace 冗余:将各算子 arch35 侧 tiling 中用于 AscendC 工具库的 workspace 常量由 16777216(16M)改为 0,并同步删除 stateless_random_normal_v2、stateless_random_uniform_v2 两个 kernel 入口中对 workspace 的非空校验与 SetSysWorkspace/GetUserWorkspace 调用,使算子不再额外申请和传递该冗余 workspace;相应 UT 的期望 workspace 值也由 16777216 调整为 0。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#3844](https://gitcode.com/cann/ops-math/issues/3844) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 各算子kernel各路径进行ttk测试,功能精度全部pass ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6462 | 13 days ago | |
refactor(random): random 系列算子去除16M workspace 冗余 Co-authored-by: aiteer<lujiale4@huawei.com> # message auto-generated for no-merge-commit merge: !6462 merge random_ws_zero into master refactor(random): random 系列算子去除16M workspace 冗余 Created-by: aiteer Commit-by: aiteer Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 针对 random 系列算子去除 16M workspace 冗余:将各算子 arch35 侧 tiling 中用于 AscendC 工具库的 workspace 常量由 16777216(16M)改为 0,并同步删除 stateless_random_normal_v2、stateless_random_uniform_v2 两个 kernel 入口中对 workspace 的非空校验与 SetSysWorkspace/GetUserWorkspace 调用,使算子不再额外申请和传递该冗余 workspace;相应 UT 的期望 workspace 值也由 16777216 调整为 0。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#3844](https://gitcode.com/cann/ops-math/issues/3844) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 各算子kernel各路径进行ttk测试,功能精度全部pass ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6462 | 13 days ago | |
feat: add truncatedNormalV2/stateless_random_uniform_v2/stateless_random_uniform_v3 support 960 Co-authored-by: zhangdongdong34<zhangdongdong34@huawei.com> # message auto-generated for no-merge-commit merge: !6169 merge adapt_960_1009 into master feat: add truncatedNormalV2/stateless_random_uniform_v2/stateless_random_uniform_v3 support 960 Created-by: zhangdongdong34 Commit-by: zhangdongdong34 Merged-by: cann-robot Description: ## 描述 truncatedNormalV2/stateless_random_uniform_v2/stateless_random_uniform_v3 support 960 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/3676 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6169 | 22 days ago | |
docs: 修复stateless_random_uniform_v2/v3算子README中key/counter类型错误并补充形状要求 Co-authored-by: zhangdongdong34<zhangdongdong34@huawei.com> # message auto-generated for no-merge-commit merge: !6767 merge master into master docs: 修复stateless_random_uniform_v2/v3算子README中key/counter类型错误并补充形状要求 Created-by: zhangdongdong34 Commit-by: zhangdongdong34 Merged-by: cann-robot Description: ### 问题背景 关联 Issue:https://gitcode.com/cann/ops-math/issues/3990 StatelessRandomUniformV3 算子 README 中 key/counter 的数据类型误写为 INT64,与实现不一致: - OpDef 注册类型为 DT_UINT64(random/stateless_random_uniform_v3/op_host/stateless_random_uniform_v3_def.cpp:63-76) - arch35 Tiling 校验类型为 UINT64(random/stateless_random_uniform_v3/op_host/arch35/stateless_random_uniform_v3_tiling_arch35.cpp:45-46) - Kernel 按 uint64_t 从 GM 读取(random/stateless_random_uniform_v3/op_kernel/arch35/stateless_random_uniform_v3.h:75-79) 按文档传入有符号 INT64 输入会与算子注册、tiling 校验不符,不能因"都是 64 位存储"而视为类型契约相同。 ### 修改内容 1. **stateless_random_uniform_v3/README.md**: - key:INT64 → UINT64,描述补充"形状为[1]"(tiling 已限制 key 元素个数为 1,kernel 读取 1 个元素) - counter:INT64 → UINT64,描述补充"一维张量,元素个数不少于2"(kernel 固定读取 2 个元素) 2. **stateless_random_uniform_v2/README.md**(同类问题,同步修复): - key:INT64 → UINT64,形状为[1] - counter:INT64 → UINT64,一维张量,元素个数不少于2 - 依据:OpDef 注册 DT_UINT64,kernel 读取 1 个 key 元素和 2 个 counter 元素(random/stateless_random_uniform_v2/op_kernel/arch35/stateless_random_uniform_v2.h:85-89) ### 影响分析 仅文档修改,不涉及代码变更。 See merge request: cann/ops-math!6767 | 13 days 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 | 6 days ago |
StatelessRandomUniformV2
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 random number tensor, where the random numbers are drawn from independent uniform distributions.
Parameter Description
| Parameter Name | Input/Output/Attribute | Description | Data Type | Data Format |
|---|---|---|---|---|
| shape | Input | Shape of the input tensor. | INT64, INT32 | ND |
| key | Input | Key used by the counter-based random number generation algorithm, with the shape [1]. | UINT64 | ND |
| counter | Input | Initial counter value used by the counter-based random number generation algorithm. It is a 1D tensor with at least 2 elements. | UINT64 | ND |
| alg | Input | Algorithm used to generate random numbers. | INT32 | ND |
| out | Output | Outputs random values with the specified shape. | FLOAT, BF16, FLOAT16 | ND |
Constraint Description
None
Invocation Description
| Invocation Method | Sample Code | Description |
|---|---|---|
| aclnn invocation | test_aclnn_stateless_random_uniform_v2 | Invokes the StatelessRandomUniformV2 operator through the aclnnInplaceUniform API. |