已合并
修改nn仓9.0.0doc tools 内容修改 #3743
caiwenwen创建于 4月13日
修改nn仓9.0.0doc tools 内容修改 #3743
已合并
caiwenwen创建于 4月13日
63 个文件变更+211-166
@@ -55,7 +55,6 @@ ops-nn 算子首个 Beta 版本 v8.5.0-beta.1 现已发布。
55| cann-hcomm 8.5.0-beta.1 | [v8.5.0-beta.1](https://gitcode.com/cann/hcomm/tags/v8.5.0-beta.1) | CANN 8.5.0-beta.1 |55| cann-hcomm 8.5.0-beta.1 | [v8.5.0-beta.1](https://gitcode.com/cann/hcomm/tags/v8.5.0-beta.1) | CANN 8.5.0-beta.1 |
56| cann-npu-runtime 8.5.0-beta.1 | [v8.5.0-beta.1](https://gitcode.com/cann/runtime/tags/v8.5.0-beta.1) | CANN 8.5.0-beta.1 |56| cann-npu-runtime 8.5.0-beta.1 | [v8.5.0-beta.1](https://gitcode.com/cann/runtime/tags/v8.5.0-beta.1) | CANN 8.5.0-beta.1 |
57 57 
58- 
59### 🚀 关键特性58### 🚀 关键特性
60 59 
61- 【工程能力】nn类onnx算子插件支持。([#452](https://gitcode.com/cann/ops-nn/pull/452))60- 【工程能力】nn类onnx算子插件支持。([#452](https://gitcode.com/cann/ops-nn/pull/452))
@@ -46,6 +46,7 @@ ${op_class} # 算子分类
46│ ├── CMakeLists.txt # 算子编译配置文件46│ ├── CMakeLists.txt # 算子编译配置文件
47│ ├── README.md # 算子README文档47│ ├── README.md # 算子README文档
48```48```
49+ 
49PR上库要求:50PR上库要求:
50 51 
51- 代码交付件:需提供算子Kernel实现、算子测试文件,开发过程参考[fast_kernel_launch_example](examples/fast_kernel_launch_example/README.md)。52- 代码交付件:需提供算子Kernel实现、算子测试文件,开发过程参考[fast_kernel_launch_example](examples/fast_kernel_launch_example/README.md)。
@@ -133,4 +134,4 @@ PR上库要求:
133 - 代码是否编译通过134 - 代码是否编译通过
134 - Markdown文档语法是否符合规范135 - Markdown文档语法是否符合规范
135- 贡献目录:按sig成员意见提交至指定目录下`experimental/${op_class}`,可参考已有算子文件放置规则。136- 贡献目录:按sig成员意见提交至指定目录下`experimental/${op_class}`,可参考已有算子文件放置规则。
136-- PR提交:通过`git`命令提交目标分支PR,检查PR标题是否清晰、PR描述是否规范(指明更改内容和原因、是否关联对应Issue)、是否签署CLA。137+- PR提交:通过`git`命令提交目标分支PR,检查PR标题是否清晰、PR描述是否规范(指明更改内容和原因、是否关联对应Issue)、是否签署CLA。
@@ -33,7 +33,7 @@
33 33 
34 <img src="docs/zh/figures/cloudIDE.png" alt="云平台" width="750px" height="90px">34 <img src="docs/zh/figures/cloudIDE.png" alt="云平台" width="750px" height="90px">
35 35 
36-2. 根据页面提示创建并启动云开发环境,单击“`连接 > WebIDE `”进入算子一站式开发平台,开源项目的资源默认在`/mnt/workspace`目录下。36+2. 根据页面提示创建并启动云开发环境,单击“`连接 > WebIDE`”进入算子一站式开发平台,开源项目的资源默认在`/mnt/workspace`目录下。
37 37 
38 <img src="docs/zh/figures/webIDE.png" alt="云平台" width="1000px" height="150px">38 <img src="docs/zh/figures/webIDE.png" alt="云平台" width="1000px" height="150px">
39 39
@@ -26,7 +26,7 @@ ops-nn是[CANN](https://hiascend.com/software/cann) (Compute Architecture for
261. [算子列表](docs/zh/op_list.md):项目全量算子信息,方便快速查询。261. [算子列表](docs/zh/op_list.md):项目全量算子信息,方便快速查询。
272. [QuickStart](QUICKSTART.md):**基于WebIDE或Docker环境**提供极简快速上手指南,包括搭建环境、编译部署、算子调用/开发/调试、贡献等。272. [QuickStart](QUICKSTART.md):**基于WebIDE或Docker环境**提供极简快速上手指南,包括搭建环境、编译部署、算子调用/开发/调试、贡献等。
28 28 
29- > **说明**:无论是WebIDE或Docker环境,默认提供最新商发版本CANN软件包,目前是CANN 8.5.0。若您想手动安装CANN包或体验master分支最新能力等,请参考[学习教程](#📖学习教程)中的步骤,完成环境搭建、编译执行、算子开发等操作。29+ > **说明**:无论是WebIDE或Docker环境,默认提供最新商发版本CANN软件包,目前是CANN 8.5.0。若您想手动安装CANN包或体验master分支最新能力等,请参考[学习教程](#学习教程)中的步骤,完成环境搭建、编译执行、算子开发等操作。
30 30 
31## 📖学习教程31## 📖学习教程
32 32 
@@ -7,9 +7,9 @@
7## 文件权限控制7## 文件权限控制
8 8 
9- 建议用户在主机(包括宿主机)及容器中设置运行系统umask值为0027及以上,保障新增文件夹默认最高权限为750,新增文件默认最高权限为640。9- 建议用户在主机(包括宿主机)及容器中设置运行系统umask值为0027及以上,保障新增文件夹默认最高权限为750,新增文件默认最高权限为640。
10-- 建议用户对个人隐私数据、商业资产、源文件和算子开发过程中保存的各类文件等敏感内容做好权限控制等安全措施。例如涉及本项目安装目录权限管控、输入公共数据文件权限管控,设定的权限建议参考[A-文件(夹)各场景权限管控推荐最大值](#A-文件各场景权限管控推荐最大值)。10+- 建议用户对个人隐私数据、商业资产、源文件和算子开发过程中保存的各类文件等敏感内容做好权限控制等安全措施。例如涉及本项目安装目录权限管控、输入公共数据文件权限管控,设定的权限建议参考[A-文件(夹)各场景权限管控推荐最大值](#a-文件夹各场景权限管控推荐最大值)。
11- 算子运行时可能会缓存算子编译文件,存储在运行目录下的`kernel_meta_*`文件夹内,加快后续算子的调用速度,用户可根据需要自行对生成后的相关文件进行权限控制。11- 算子运行时可能会缓存算子编译文件,存储在运行目录下的`kernel_meta_*`文件夹内,加快后续算子的调用速度,用户可根据需要自行对生成后的相关文件进行权限控制。
12-- 用户安装和使用过程需要做好权限控制,建议参考[A-文件(夹)各场景权限管控推荐最大值](#A-文件各场景权限管控推荐最大值)文件权限参考进行设置。12+- 用户安装和使用过程需要做好权限控制,建议参考[A-文件(夹)各场景权限管控推荐最大值](#a-文件夹各场景权限管控推荐最大值)文件权限参考进行设置。
13 13 
14## 构建安全声明14## 构建安全声明
15 15 
@@ -32,8 +32,8 @@
32 32 
33| <div style="width:120px">参数名</div> | <div style="width:120px">输入/输出/属性</div> | <div style="width:350px">描述</div> | <div style="width:350px">数据类型</div> | <div style="width:220px">数据格式</div> |33| <div style="width:120px">参数名</div> | <div style="width:120px">输入/输出/属性</div> | <div style="width:350px">描述</div> | <div style="width:350px">数据类型</div> | <div style="width:220px">数据格式</div> |
34| ------------------| ------------------ | ------------------------------------------------------------------------------------------- | ----------------- | --------------------- |34| ------------------| ------------------ | ------------------------------------------------------------------------------------------- | ----------------- | --------------------- |
35-| input | 输入 | <ul><li>公式中的 input,表示卷积输入。</li><li>数据类型需要与 weight 满足数据类型推导规则(参见<a href="../../../docs/zh/context/互推导关系.md">互推导关系</a>和<a href="#约束说明">约束说明</a>)。</li><li>N≥0,C≥1,其他维度≥0。</li></ul> | FLOAT、FLOAT16、BFLOAT16、HIFLOAT8、FLOAT8_E4M3FN| NCL、NCHW、NCDHW |35+| input | 输入 | <ul><li>公式中的 input,表示卷积输入。</li><li>数据类型需要与 weight 满足数据类型推导规则(参见<a href="../../docs/zh/context/互推导关系.md">互推导关系</a>和<a href="#约束说明">约束说明</a>)。</li><li>N≥0,C≥1,其他维度≥0。</li></ul> | FLOAT、FLOAT16、BFLOAT16、HIFLOAT8、FLOAT8_E4M3FN| NCL、NCHW、NCDHW |
36-| weight | 输入 | <ul><li>公式中的 weight,表示卷积权重。</li><li>数据类型需要与 input 满足数据类型推导规则(参见<a href="../../../docs/zh/context/互推导关系.md">互推导关系</a>和<a href="#约束说明">约束说明</a>)。</li><li>所有维度≥1。</li></ul> | FLOAT、FLOAT16、BFLOAT16、HIFLOAT8、FLOAT8_E4M3FN | NCL、NCHW、NCDHW |36+| weight | 输入 | <ul><li>公式中的 weight,表示卷积权重。</li><li>数据类型需要与 input 满足数据类型推导规则(参见<a href="../../docs/zh/context/互推导关系.md">互推导关系</a>和<a href="#约束说明">约束说明</a>)。</li><li>所有维度≥1。</li></ul> | FLOAT、FLOAT16、BFLOAT16、HIFLOAT8、FLOAT8_E4M3FN | NCL、NCHW、NCDHW |
37| bias | 输入 | <ul><li>公式中的 bias,表示卷积偏置。</li><li>当 transposed=false 时为一维且数值与 weight 第一维相等;当 transposed=true 时为一维且数值与 weight.shape[1] * groups 相等。</li></ul> | FLOAT、FLOAT16、BFLOAT16 | ND |37| bias | 输入 | <ul><li>公式中的 bias,表示卷积偏置。</li><li>当 transposed=false 时为一维且数值与 weight 第一维相等;当 transposed=true 时为一维且数值与 weight.shape[1] * groups 相等。</li></ul> | FLOAT、FLOAT16、BFLOAT16 | ND |
38| stride | 输入 | <ul><li>卷积扫描步长。</li><li>数组长度需等于 input 的维度减 2,值应该大于 0。</li></ul> | INT32 | - |38| stride | 输入 | <ul><li>卷积扫描步长。</li><li>数组长度需等于 input 的维度减 2,值应该大于 0。</li></ul> | INT32 | - |
39| padding | 输入 | <ul><li>对 input 的填充。</li><li>数组长度:conv1d 非转置为 1 或 2;conv2d 为 2 或 4;conv3d 为 3。值应该大于等于 0。</li></ul> | INT32 | - |39| padding | 输入 | <ul><li>对 input 的填充。</li><li>数组长度:conv1d 非转置为 1 或 2;conv2d 为 2 或 4;conv3d 为 3。值应该大于等于 0。</li></ul> | INT32 | - |
@@ -91,6 +91,7 @@
91 <td>表示输入的原始数据。对应公式中的`input`。shape为[N, inH, inW, inC],其中inH * inW不能超过2147483647。</td>91 <td>表示输入的原始数据。对应公式中的`input`。shape为[N, inH, inW, inC],其中inH * inW不能超过2147483647。</td>
92 <td>FLOAT32、FLOAT16、BFLOAT16</td>92 <td>FLOAT32、FLOAT16、BFLOAT16</td>
93 <td>ND</td>93 <td>ND</td>
94+ </tr>
94 <tr>95 <tr>
95 <td>weight</td>96 <td>weight</td>
96 <td>输入</td>97 <td>输入</td>
@@ -1,4 +1,4 @@
1- # aclnn返回码1+# aclnn返回码
2 2 
3调用aclnn API时,常见的接口返回码如[表1](#zh-cn_topic_0000001563019104_table8155243135018)所示。3调用aclnn API时,常见的接口返回码如[表1](#zh-cn_topic_0000001563019104_table8155243135018)所示。
4对于异常状态码值,可以通过aclGetRecentErrMsg接口(参见[《acl API(C)》](https://hiascend.com/document/redirect/CannCommunityCppApi))获取异常信息,您可以根据报错提示排查问题或者联系技术支持。4对于异常状态码值,可以通过aclGetRecentErrMsg接口(参见[《acl API(C)》](https://hiascend.com/document/redirect/CannCommunityCppApi))获取异常信息,您可以根据报错提示排查问题或者联系技术支持。
@@ -52,7 +52,7 @@
52 52 
53 <img src="../figures/cloudIDE.png" alt="云平台" width="750px" height="90px">53 <img src="../figures/cloudIDE.png" alt="云平台" width="750px" height="90px">
54 54 
55-2. 根据页面提示创建并启动云开发环境,单击“`连接 > WebIDE `”进入算子一站式开发平台,开源项目的资源默认在`/mnt/workspace`目录下。55+2. 根据页面提示创建并启动云开发环境,单击“`连接 > WebIDE`”进入算子一站式开发平台,开源项目的资源默认在`/mnt/workspace`目录下。
56 56 
57 <img src="../figures/webIDE.png" alt="云平台" width="1000px" height="150px">57 <img src="../figures/webIDE.png" alt="云平台" width="1000px" height="150px">
58 58 
@@ -83,6 +83,7 @@
83 2. 配置环境变量。83 2. 配置环境变量。
84 84 
85 安装CANN软件后,使用CANN运行用户登录环境,执行如下命令生效环境变量。85 安装CANN软件后,使用CANN运行用户登录环境,执行如下命令生效环境变量。
86+
86 ```87 ```
87 source ${INSTALL_DIR}/set_env.sh88 source ${INSTALL_DIR}/set_env.sh
88 ```89 ```
@@ -139,4 +140,5 @@
139 ```140 ```
140 aclnnAddmmGetWorkspaceSize failed. ERROR: 161001141 aclnnAddmmGetWorkspaceSize failed. ERROR: 161001
141 [ERROR msg][PID:xxxx] xxx(timesamp) AclNN_Parameter_Error(EZ1001): Expected a proper Tensor but got null for argument addmmTennsor.self.142 [ERROR msg][PID:xxxx] xxx(timesamp) AclNN_Parameter_Error(EZ1001): Expected a proper Tensor but got null for argument addmmTennsor.self.
142- ```143+ ```
144+
@@ -137,7 +137,7 @@ cannsim record [options] user_app --user_options
137|参数|可选/必选|说明|137|参数|可选/必选|说明|
138| --- | --- | --- |138| --- | --- | --- |
139|-s <value> 或--soc_version </value> [options]参数 | 必选 | 指定模拟目标芯片版本(如:Ascend950)。|139|-s <value> 或--soc_version </value> [options]参数 | 必选 | 指定模拟目标芯片版本(如:Ascend950)。|
140-|-o <value> 或 --output <value> [options]参数 | 可选| 生成文件所在路径,可配置为绝对路径或者相对路径,并且执行工具的用户需要具有读写权限。如果未指定路径,则默认在当前目录下保存数据。|140+|-o <value> 或 --output </value> [options]参数 | 可选| 生成文件所在路径,可配置为绝对路径或者相对路径,并且执行工具的用户需要具有读写权限。如果未指定路径,则默认在当前目录下保存数据。|
141|-g 或 --gen-report[options]参数 | 可选 | 启用仿真完成后是否进行自动解析,并生成分析报告。默认不自动解析。|141|-g 或 --gen-report[options]参数 | 可选 | 启用仿真完成后是否进行自动解析,并生成分析报告。默认不自动解析。|
142|user_app|必选|算子可执行文件。|142|user_app|必选|算子可执行文件。|
143--user_options|可选|算子可执行文件的运行参数。|143--user_options|可选|算子可执行文件的运行参数。|
@@ -213,7 +213,7 @@ cannsim report [options]
213 213 
214|参数 | 可选/必选 | 说明|214|参数 | 可选/必选 | 说明|
215| --- | --- | --- |215| --- | --- | --- |
216-|-e <value> 或 --export <value> [options]参数 | 必选 | 原始结果文件目录,需指定为仿真执行后生成的结果目录,指定到cannsim_{timestamp}_${user_app}层,可配置为绝对路径或者相对路径,并且工具执行用户具有可读写权限。|216+|-e <value> 或 --export </value> [options]参数 | 必选 | 原始结果文件目录,需指定为仿真执行后生成的结果目录,指定到cannsim_{timestamp}_${user_app}层,可配置为绝对路径或者相对路径,并且工具执行用户具有可读写权限。|
217|-o 或 --output [options]参数 | 可选 | 解析结果输出目录,可配置为绝对路径或者相对路径,且执行用户需具有读写权限。若未指定路径,默认在当前目录下保存数据。如果生成的结果文件与现有文件同名,则会覆盖原有文件。|217|-o 或 --output [options]参数 | 可选 | 解析结果输出目录,可配置为绝对路径或者相对路径,且执行用户需具有读写权限。若未指定路径,默认在当前目录下保存数据。如果生成的结果文件与现有文件同名,则会覆盖原有文件。|
218|-n 或 --core-id [options]参数 | 可选 | 指定生成指令流水的核ID,不指定默认生成0核的指令流水。配置的格式如下:生成所有核的流水,配置为‘all’。指定核ID的范围,如:‘0-1’。指定单核ID,如‘5’。|218|-n 或 --core-id [options]参数 | 可选 | 指定生成指令流水的核ID,不指定默认生成0核的指令流水。配置的格式如下:生成所有核的流水,配置为‘all’。指定核ID的范围,如:‘0-1’。指定单核ID,如‘5’。|
219 219 
@@ -1,5 +1,3 @@
1- 
2- 
3# 算子调试调优1# 算子调试调优
4 2 
5## 调试定位(AI Core算子)3## 调试定位(AI Core算子)
@@ -53,6 +51,7 @@
53 // 打印当前核计算Block长度51 // 打印当前核计算Block长度
54 AscendC::PRINTF("Tiling blockLength is %llu\n", blockLength_);52 AscendC::PRINTF("Tiling blockLength is %llu\n", blockLength_);
55 ```53 ```
54+ 
56* **DumpTensor**55* **DumpTensor**
57 56 
58 该接口支持Dump指定Tensor的内容,同时支持打印自定义附加信息,比如当前行号等,详细介绍请参见[《Ascend C API》](https://hiascend.com/document/redirect/CannCommunityAscendCApi)中“算子调测API > DumpTensor”。57 该接口支持Dump指定Tensor的内容,同时支持打印自定义附加信息,比如当前行号等,详细介绍请参见[《Ascend C API》](https://hiascend.com/document/redirect/CannCommunityAscendCApi)中“算子调测API > DumpTensor”。
@@ -128,6 +127,7 @@
128 ```bash127 ```bash
129 msprof op ./test_aclnn_add_example128 msprof op ./test_aclnn_add_example
130 ```129 ```
130+ 
131 采集结果在本项目`examples/add_example/examples/build/bin/OPPROF_*`目录,采集完成后打印如下信息:131 采集结果在本项目`examples/add_example/examples/build/bin/OPPROF_*`目录,采集完成后打印如下信息:
132 132
133 ``` text133 ``` text
@@ -141,6 +141,7 @@
141 Current Freq: 1800141 Current Freq: 1800
142 Rated Freq: 1800142 Rated Freq: 1800
143 ```143 ```
144+ 
144 其中Task Duration是当前算子Kernel耗时,Block Dim是当前算子执行核数。145 其中Task Duration是当前算子Kernel耗时,Block Dim是当前算子执行核数。
145 146 
146 算子各项流水详细指标可关注`OPPROF_*``ArithmeticUtilization`文件,包含了当前各项流水的占比,具体介绍参见[msProf](https://www.hiascend.com/document/redirect/CannCommunityToolMsprof)中“性能数据文件 > msprof op > ArithmeticUtilization(cube及vector类型指令耗时和占比)”章节。147 算子各项流水详细指标可关注`OPPROF_*``ArithmeticUtilization`文件,包含了当前各项流水的占比,具体介绍参见[msProf](https://www.hiascend.com/document/redirect/CannCommunityToolMsprof)中“性能数据文件 > msprof op > ArithmeticUtilization(cube及vector类型指令耗时和占比)”章节。
@@ -148,15 +149,19 @@
1483. 采集仿真流水图。1493. 采集仿真流水图。
149 150
150 msProf工具进行算子仿真调优之前,需执行如下命令配置环境变量。151 msProf工具进行算子仿真调优之前,需执行如下命令配置环境变量。
152+ 
151 ```bash153 ```bash
152 export LD_LIBRARY_PATH=${INSTALL_DIR}/tools/simulator/Ascendxxxyy/lib:$LD_LIBRARY_PATH 154 export LD_LIBRARY_PATH=${INSTALL_DIR}/tools/simulator/Ascendxxxyy/lib:$LD_LIBRARY_PATH
153 ```155 ```
156+ 
154 请根据CANN软件包实际安装路径和AI处理器型号对以上环境变量进行修改。157 请根据CANN软件包实际安装路径和AI处理器型号对以上环境变量进行修改。
155 158
156 之后进入算子可执行文件所在目录,执行如下命令:159 之后进入算子可执行文件所在目录,执行如下命令:
160+ 
157 ```bash161 ```bash
158 msprof op simulator --output=$PWD/pipeline_auto --kernel-name"AddExample" ./test_aclnn_add_example162 msprof op simulator --output=$PWD/pipeline_auto --kernel-name"AddExample" ./test_aclnn_add_example
159 ```163 ```
164+ 
160 采集结果在本项目`$PWD/pipeline_auto/OPPROF_**`目录中。165 采集结果在本项目`$PWD/pipeline_auto/OPPROF_**`目录中。
161 其中流水相关文件路径为`OPPROF**/simulator/visualize_data.bin`,可以借助[MindStudio Insight](https://www.hiascend.com/document/redirect/MindStudioInsight)工具查看。166 其中流水相关文件路径为`OPPROF**/simulator/visualize_data.bin`,可以借助[MindStudio Insight](https://www.hiascend.com/document/redirect/MindStudioInsight)工具查看。
162 167
@@ -183,4 +188,3 @@
183 ``` 188 ```
184 189 
1853. 在Chrome浏览器中输入“chrome://tracing”地址,并将生成的指令流水图文件(trace_core0.json)拖到空白处打开,具体参数介绍参考CANN Simulator中[“仿真结果解析”](./cann_simulator.md/#仿真结果解析)章节。1903. 在Chrome浏览器中输入“chrome://tracing”地址,并将生成的指令流水图文件(trace_core0.json)拖到空白处打开,具体参数介绍参考CANN Simulator中[“仿真结果解析”](./cann_simulator.md/#仿真结果解析)章节。
186- 
@@ -101,6 +101,7 @@ ${op_name} # 替换为实际算子名的小写下
101Tiling一共需要三个交付件:```${op_name}_tiling.cpp``` ```${op_name}_tiling_key.h``` ```${op_name}_tiling_data.h```101Tiling一共需要三个交付件:```${op_name}_tiling.cpp``` ```${op_name}_tiling_key.h``` ```${op_name}_tiling_data.h```
102 102 
103> 说明:103> 说明:
104+>
104> 1. `${op_name}_tiling.cpp`放在`${op_name}/op_host`目录下;105> 1. `${op_name}_tiling.cpp`放在`${op_name}/op_host`目录下;
105> 2. `${op_name}_tiling_key.h`和`${op_name}_tiling_data.h`放在`${op_name}/op_kernel`目录下;106> 2. `${op_name}_tiling_key.h`和`${op_name}_tiling_data.h`放在`${op_name}/op_kernel`目录下;
106> 3. 如果`${op_name}_tiling.cpp`中需要引用`${op_name}_tiling_data.h`,请使用相对路径的方式,例如:`#incldue "../op_kernel/${op_name}_tiling_data.h"`。107> 3. 如果`${op_name}_tiling.cpp`中需要引用`${op_name}_tiling_data.h`,请使用相对路径的方式,例如:`#incldue "../op_kernel/${op_name}_tiling_data.h"`。
@@ -112,6 +113,7 @@ Tiling主要切分逻辑。
112如需查看详细实现,请参考[add_example_tiling.cpp](../../../examples/add_example/op_host/add_example_tiling.cpp)。113如需查看详细实现,请参考[add_example_tiling.cpp](../../../examples/add_example/op_host/add_example_tiling.cpp)。
113 114 
114> **样例中函数空实现说明:**115> **样例中函数空实现说明:**
116+>
115> 1. **TilingParse**:图模式标准交付件,保留函数定义以满足框架调用规范,无实际逻辑时可置空。117> 1. **TilingParse**:图模式标准交付件,保留函数定义以满足框架调用规范,无实际逻辑时可置空。
116> 2. **CompileInfo**:图模式标准交付件,保留函数定义以满足框架调用规范,无实际逻辑时可置空。118> 2. **CompileInfo**:图模式标准交付件,保留函数定义以满足框架调用规范,无实际逻辑时可置空。
117 119 
@@ -240,6 +242,7 @@ graph LR
240Kernel一共需要两个交付件:```${op_name}.cpp``` ```${op_name}.h```242Kernel一共需要两个交付件:```${op_name}.cpp``` ```${op_name}.h```
241 243 
242> 说明:244> 说明:
245+>
243> 1. `${op_name}.cpp`为kernel的入口函数只能放在`${op_name}/op_kernel`目录下;246> 1. `${op_name}.cpp`为kernel的入口函数只能放在`${op_name}/op_kernel`目录下;
244> 2. `${op_name}.h`文件可以按照不同SoC或模板放在对应目录下,例如:`${op_name}/op_kernel/arch32`、`${op_name}/op_kernel/arch35`或`${op_name}/op_kernel/impl`等目录下;247> 2. `${op_name}.h`文件可以按照不同SoC或模板放在对应目录下,例如:`${op_name}/op_kernel/arch32`、`${op_name}/op_kernel/arch35`或`${op_name}/op_kernel/impl`等目录下;
245 248 
@@ -384,8 +387,8 @@ __aicore__ inline void AddExample<T>::Process()
384 ```bash387 ```bash
385 # 编译指定算子,如bash build.sh --pkg --ops=add_example388 # 编译指定算子,如bash build.sh --pkg --ops=add_example
386 bash build.sh --pkg --soc=${soc_version} --vendor_name=${vendor_name} --ops=${op_list} [--experimental]389 bash build.sh --pkg --soc=${soc_version} --vendor_name=${vendor_name} --ops=${op_list} [--experimental]
387- 
388 ```390 ```
391+
389 - --soc:\$\{soc\_version\}表示NPU型号。Atlas A2系列产品使用"ascend910b"(默认),Atlas A3系列产品使用"ascend910_93",Ascend 950PR/Ascend 950DT产品使用"ascend950"。392 - --soc:\$\{soc\_version\}表示NPU型号。Atlas A2系列产品使用"ascend910b"(默认),Atlas A3系列产品使用"ascend910_93",Ascend 950PR/Ascend 950DT产品使用"ascend950"。
390 - --vendor_name(可选):\$\{vendor\_name\}表示构建的自定义算子包名,默认名为custom。393 - --vendor_name(可选):\$\{vendor\_name\}表示构建的自定义算子包名,默认名为custom。
391 - --ops(可选):\$\{op\_list\}表示待编译算子,不指定时默认编译所有算子。格式形如"--ops=add_example"。394 - --ops(可选):\$\{op\_list\}表示待编译算子,不指定时默认编译所有算子。格式形如"--ops=add_example"。
@@ -1,4 +1,5 @@
1# 算子调用1# 算子调用
2+ 
2## 前提条件3## 前提条件
3 4 
4- 环境部署:调用算子之前,请先参考[环境部署](../context/quick_install.md)完成基础环境搭建。5- 环境部署:调用算子之前,请先参考[环境部署](../context/quick_install.md)完成基础环境搭建。
@@ -53,8 +54,8 @@
53 # bash build.sh --pkg --soc=ascend910b --vendor_name=transpose_batch_mat_mul --ops=transpose_batch_mat_mul54 # bash build.sh --pkg --soc=ascend910b --vendor_name=transpose_batch_mat_mul --ops=transpose_batch_mat_mul
54 # 编译experimental贡献目录下的用户算子55 # 编译experimental贡献目录下的用户算子
55 # bash build.sh --pkg --experimental --soc=ascend910b --ops=${experimental_op}56 # bash build.sh --pkg --experimental --soc=ascend910b --ops=${experimental_op}
56- 
57 ```57 ```
58+ 
58 - --soc:\$\{soc\_version\}表示NPU型号。Atlas A2系列产品使用"ascend910b"(默认),Atlas A3系列产品使用"ascend910_93",Ascend 950PR/Ascend 950DT产品使用"ascend950"。59 - --soc:\$\{soc\_version\}表示NPU型号。Atlas A2系列产品使用"ascend910b"(默认),Atlas A3系列产品使用"ascend910_93",Ascend 950PR/Ascend 950DT产品使用"ascend950"。
59 - --vendor_name(可选):\$\{vendor\_name\}表示构建的自定义算子包名,默认名为custom。60 - --vendor_name(可选):\$\{vendor\_name\}表示构建的自定义算子包名,默认名为custom。
60 - --ops(可选):\$\{op\_list\}表示待编译算子,不指定时默认编译所有算子。格式形如"transpose_batch_mat_mul,gemm,...",多算子之间用英文逗号","分隔。61 - --ops(可选):\$\{op\_list\}表示待编译算子,不指定时默认编译所有算子。格式形如"transpose_batch_mat_mul,gemm,...",多算子之间用英文逗号","分隔。
@@ -287,7 +287,7 @@
287 </tr>287 </tr>
288 <tr>288 <tr>
289 <td>activation</td>289 <td>activation</td>
290- <td><a href="../../activation/logsigmoid/README.md">logsigmoid</a></td>290+ <td><a href="../../activation/log_sigmoid/README.md">logsigmoid</a></td>
291 <td>✗</td>291 <td>✗</td>
292 <td>✓</td>292 <td>✓</td>
293 <td>✓</td>293 <td>✓</td>
@@ -3097,7 +3097,7 @@
3097 </tr>3097 </tr>
3098 <tr>3098 <tr>
3099 <td>rnn</td>3099 <td>rnn</td>
3100- <td><a href="../../../../rnn/bidirection_lstm/README.md">bidirection_lstm</a></td>3100+ <td><a href="../../rnn/bidirection_lstm/README.md">bidirection_lstm</a></td>
3101 <td>✓</td>3101 <td>✓</td>
3102 <td>✓</td>3102 <td>✓</td>
3103 <td>✓</td>3103 <td>✓</td>
@@ -30,8 +30,8 @@
30 30 
31## 算子开发样例31## 算子开发样例
32 32 
33-|样例目录| 样例介绍 |算子开发|算子调用 |33+|样例目录|样例介绍|算子开发|算子调用 |
34|---|------------------|---|---|34|---|------------------|---|---|
35-| add_example | 实现两个张量相加功能的算子。 | 算子端到端开发过程参见[AI Core算子开发指南](../docs/zh/develop/aicore_develop_guide.md) |调用参见[README](add_example/README.md)|35+|add_example|实现两个张量相加功能的算子。| 算子端到端开发过程参见[AI Core算子开发指南](../docs/zh/develop/aicore_develop_guide.md) |调用参见[README](add_example/README.md)|
36-|add_example_aicpu| 实现两个张量相加功能的算子。 |算子端到端开发过程参见[AI CPU算子开发指南](../docs/zh/develop/aicpu_develop_guide.md)| 调用参见[README](add_example_aicpu/README.md) |36+|add_example_aicpu|实现两个张量相加功能的算子。|算子端到端开发过程参见[AI CPU算子开发指南](../docs/zh/develop/aicpu_develop_guide.md)| 调用参见[README](add_example_aicpu/README.md) |
37-|fast_kernel_launch_example| 实现一种PyTorch场景下快速端到端开发算子的样例。 |算子端到端开发过程参见[PyTorch算子快速开发指南](./fast_kernel_launch_example/README.md)| 调用参见[README](fast_kernel_launch_example/README.md) |37+|fast_kernel_launch_example|实现一种PyTorch场景下快速端到端开发算子的样例。|算子端到端开发过程参见[PyTorch算子快速开发指南](./fast_kernel_launch_example/README.md)| 调用参见[README](fast_kernel_launch_example/README.md) |
@@ -63,7 +63,7 @@ aclnnStatus aclnnMishBackward(
63 <td>gradOutput</td>63 <td>gradOutput</td>
64 <td>输入</td>64 <td>输入</td>
65 <td>反向传播过程中上一步输出的梯度,作为本反向算子的输入。公式中的gradOutput。</td>65 <td>反向传播过程中上一步输出的梯度,作为本反向算子的输入。公式中的gradOutput。</td>
66- <td><ul><li>不支持空Tensor。</li><li>数据类型与self的数据类型需满足数据类型推导规则(参见<a href="../../../docs/zh/context/互推导关系.md" target="_blank">互推导关系</a>)。</li><li>shape需要与self满足<a href="../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast关系</a>。</li></ul></td>66+ <td><ul><li>不支持空Tensor。</li><li>数据类型与self的数据类型需满足数据类型推导规则(参见<a href="../../../../docs/zh/context/互推导关系.md" target="_blank">互推导关系</a>)。</li><li>shape需要与self满足<a href="../../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast关系</a>。</li></ul></td>
67 <td>BFLOAT16、FLOAT16、FLOAT32</td>67 <td>BFLOAT16、FLOAT16、FLOAT32</td>
68 <td>ND</td>68 <td>ND</td>
69 <td>0-8</td>69 <td>0-8</td>
@@ -73,7 +73,7 @@ aclnnStatus aclnnMishBackward(
73 <td>self</td>73 <td>self</td>
74 <td>输入</td>74 <td>输入</td>
75 <td>正向的输入数据。公式中的self。</td>75 <td>正向的输入数据。公式中的self。</td>
76- <td><ul><li>不支持空Tensor。</li><li>数据类型与gradOutput的数据类型需满足数据类型推导规则(参见<a href="../../../docs/zh/context/互推导关系.md" target="_blank">互推导关系</a>)。</li><li>shape需要与gradOutput满足<a href="../../../docs/context/broadcast关系.md" target="_blank">broadcast关系</a>。</li></ul></td>76+ <td><ul><li>不支持空Tensor。</li><li>数据类型与gradOutput的数据类型需满足数据类型推导规则(参见<a href="../../../../docs/zh/context/互推导关系.md" target="_blank">互推导关系</a>)。</li><li>shape需要与gradOutput满足<a href="../../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast关系</a>。</li></ul></td>
77 <td>BFLOAT16、FLOAT16、FLOAT32</td>77 <td>BFLOAT16、FLOAT16、FLOAT32</td>
78 <td>ND</td>78 <td>ND</td>
79 <td>0-8</td>79 <td>0-8</td>
@@ -83,7 +83,7 @@ aclnnStatus aclnnMishBackward(
83 <td>gradInput</td>83 <td>gradInput</td>
84 <td>输出</td>84 <td>输出</td>
85 <td>计算得到梯度,作为反向传播下一步反向算子的计算输入。</td>85 <td>计算得到梯度,作为反向传播下一步反向算子的计算输入。</td>
86- <td><ul><li>不支持空Tensor。</li><li>数据类型与gradOutput的数据类型需满足推导规则(参见<a href="../../../docs/zh/context/互推导关系.md" target="_blank">互推导关系</a>)。</li><li>shape需要与gradOutput满足<a href="../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast关系</a>。</li></ul></td>86+ <td><ul><li>不支持空Tensor。</li><li>数据类型与gradOutput的数据类型需满足推导规则(参见<a href="../../../../docs/zh/context/互推导关系.md" target="_blank">互推导关系</a>)。</li><li>shape需要与gradOutput满足<a href="../../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast关系</a>。</li></ul></td>
87 <td>BFLOAT16、FLOAT16、FLOAT32</td>87 <td>BFLOAT16、FLOAT16、FLOAT32</td>
88 <td>ND</td>88 <td>ND</td>
89 <td>0-8</td>89 <td>0-8</td>
@@ -107,7 +107,7 @@ aclnnStatus aclnnSwishBackward(
107 <td>betaOptional</td>107 <td>betaOptional</td>
108 <td>输入</td>108 <td>输入</td>
109 <td>表示可调节参数,用于控制Swish函数的形状和斜率的标量,公式中的β。</td>109 <td>表示可调节参数,用于控制Swish函数的形状和斜率的标量,公式中的β。</td>
110- <td><ul><li>数据类型需要是可转换为FLOAT的数据类型(参见<a href="../../../docs/context/互推导关系.md" target="_blank">互推导关系</a>)。</li><li>当betaOptional为空指针时,接口以1.0进行计算。</li></ul></td>110+ <td><ul><li>数据类型需要是可转换为FLOAT的数据类型(参见<a href="../../../../docs/zh/context/互推导关系.md" target="_blank">互推导关系</a>)。</li><li>当betaOptional为空指针时,接口以1.0进行计算。</li></ul></td>
111 <td>-</td>111 <td>-</td>
112 <td>-</td>112 <td>-</td>
113 <td>-</td>113 <td>-</td>
@@ -28,75 +28,71 @@
28 28 
291. 计算$A_{max}$:291. 计算$A_{max}$:
30 30 
31-$$A_{max} = rowMax(|A_{group}|)$$31+ $$ A_{max} = rowMax(|A_{group}|)$$
32 32 
332. 计算$tmp_{1}$:332. 计算$tmp_{1}$:
34 34 
35-$$A_{max} = rowMax(|A_{group}|)$$35+ $$A_{max} = rowMax(|A_{group}|)$$
36 36 
37-2. 计算$tmp_{1}$:37+3. 计算$tmp_{1}$:
38 38 
39-$$tmp_{1} = \frac{7.49 * A_{group}}{A_{max}}$$39+ $$tmp_{1} = \frac{7.49 * A_{group}}{A_{max}}$$
40 40 
41-3. 计算$A_1$:41+4. 计算$A_1$:
42 42 
43-$$A_1 = round(tmp_{1})$$43+ $$A_1 = round(tmp_{1})$$
44 44 
45-4. 计算$tmp_{2}$:45+5. 计算$tmp_{2}$:
46 46 
47-$$tmp_{2}=(tmp_{1}-A_{1})*14.98$$47+ $$tmp_{2}=(tmp_{1}-A_{1})*14.98$$
48 48 
49-5. 计算$A_{2}$:49+6. 计算$A_{2}$:
50 50 
51-$$A_{2}=round(tmp_{2})$$51+ $$A_{2}=round(tmp_{2})$$
52 52 
53-6. 计算$tmp_{3}$:53+7. 计算$tmp_{3}$:
54 54 
55-$$tmp_{3}=(tmp_{2}-A_{2})*14.98$$55+ $$tmp_{3}=(tmp_{2}-A_{2})*14.98$$
56 56 
57-7. 计算$A_{3}$:57+8. 计算$A_{3}$:
58 58 
59-$$A_{3}=round(tmp_{3})$$59+ $$A_{3}=round(tmp_{3})$$
60 60 
61-8. 构造矩阵$A_{int}$:61+9. 构造矩阵$A_{int}$:
62 62 
63-$$63+ $$
64-A_{int} =64+ A_{int} =
65- \begin{bmatrix}65+ \begin{bmatrix}
66- A_{1} \\66+ A_{1} \\
67- A_{2} \\67+ A_{2} \\
68- A_{3} \\68+ A_{3} \\
69- \end{bmatrix}69+ \end{bmatrix}
70-$$70+ $$
71 71 
72-9. 计算$C_{int}$:72+10. 计算$C_{int}$:
73 73 
74-$$Y_{int} = \begin{bmatrix}74+ $$Y_{int} = \begin{bmatrix}
75- Y_{1} \\75+ Y_{1} \\
76- Y_{2} \\76+ Y_{2} \\
77- Y_{3} \\77+ Y_{3} \\
78- \end{bmatrix} = A_{int} Weight_{group}$$78+ \end{bmatrix} = A_{int} Weight_{group}$$
79 79 
80-10. 计算$C_{group}$:80+11. 计算$C_{group}$:
81 81 
82-$$Y_{group} = [(\frac{Y_{1}}{7.49}+\frac{Y_{2}}{7.49*14.98}+\frac{Y_{3}}{7.49*14.98*14.98})*A_{max}] * scale_{group}$$82+ $$Y_{group} = [(\frac{Y_{1}}{7.49}+\frac{Y_{2}}{7.49*14.98}+\frac{Y_{3}}{7.49*14.98*14.98})*A_{max}] * scale_{group}$$
83 83 
84-11. 计算$Y^i$:84+12. 计算$Y^i$:
85 85 
86$$Y^{i} = Y_{group} + Y^{i-1}$$86$$Y^{i} = Y_{group} + Y^{i-1}$$
87 87 
88- 算子规格:88- 算子规格:
89 <table>89 <table>
90 <tr><td rowspan="1" align="center">算子类型(OpType)</td><td colspan="4" align="center">WeightQuantBatchMatmul</td></tr>90 <tr><td rowspan="1" align="center">算子类型(OpType)</td><td colspan="4" align="center">WeightQuantBatchMatmul</td></tr>
91- </tr>
92 <tr><td rowspan="4" align="center">算子输入</td><td align="center">name</td><td align="center">shape</td><td align="center">data type</td><td align="center">format</td></tr>91 <tr><td rowspan="4" align="center">算子输入</td><td align="center">name</td><td align="center">shape</td><td align="center">data type</td><td align="center">format</td></tr>
93 <tr><td align="center">x1</td><td align="center">M * K</td><td align="center">float16</td><td align="center">ND</td></tr>92 <tr><td align="center">x1</td><td align="center">M * K</td><td align="center">float16</td><td align="center">ND</td></tr>
94 <tr><td align="center">x2</td><td align="center">K * N</td><td align="center">int4</td><td align="center">ND</td></tr>93 <tr><td align="center">x2</td><td align="center">K * N</td><td align="center">int4</td><td align="center">ND</td></tr>
95 <tr><td align="center">antiquant_scale</td><td align="center"> GroupNum * N </td><td align="center">float16</td><td align="center">ND</td></tr>94 <tr><td align="center">antiquant_scale</td><td align="center"> GroupNum * N </td><td align="center">float16</td><td align="center">ND</td></tr>
96- </tr>
97- </tr>
98 <tr><td rowspan="1" align="center">算子输出</td><td align="center">y</td><td align="center">M * N</td><td align="center">float16</td><td align="center">ND</td></tr>95 <tr><td rowspan="1" align="center">算子输出</td><td align="center">y</td><td align="center">M * N</td><td align="center">float16</td><td align="center">ND</td></tr>
99- </tr>
100 <tr><td rowspan="1" align="center">核函数名</td><td colspan="4" align="center">WeightQuantBatchMatmulExperiment</td></tr>96 <tr><td rowspan="1" align="center">核函数名</td><td colspan="4" align="center">WeightQuantBatchMatmulExperiment</td></tr>
101 </table>97 </table>
102 98 
@@ -37,6 +37,7 @@
37 ```37 ```
38 38 
39 - 当mode为max模式:39 - 当mode为max模式:
40+
40 ```41 ```
41 output的shape为includeLastOffset ? (bagOffsets - 1, embeddingDim) : (bagOffsets, embeddingDim)42 output的shape为includeLastOffset ? (bagOffsets - 1, embeddingDim) : (bagOffsets, embeddingDim)
42 offset2bag的shape为(bagIndices,)43 offset2bag的shape为(bagIndices,)
@@ -46,6 +47,7 @@
46 47 
47 - <term>Ascend 950PR/Ascend 950DT</term>48 - <term>Ascend 950PR/Ascend 950DT</term>
48 - 当mode为sum模式:49 - 当mode为sum模式:
50+ 
49 ```51 ```
50 output的shape为includeLastOffset ? (bagOffsets - 1, embeddingDim) : (bagOffsets, embeddingDim)52 output的shape为includeLastOffset ? (bagOffsets - 1, embeddingDim) : (bagOffsets, embeddingDim)
51 offset2bag的shape为(bagIndices,)53 offset2bag的shape为(bagIndices,)
@@ -54,6 +56,7 @@
54 ```56 ```
55 57 
56 - 当mode为mean模式:58 - 当mode为mean模式:
59+ 
57 ```60 ```
58 output的shape为includeLastOffset? (bagOffsets - 1, embeddingDim) : (bagOffsets, embeddingDim)61 output的shape为includeLastOffset? (bagOffsets - 1, embeddingDim) : (bagOffsets, embeddingDim)
59 offset2bag的shape为(bagIndices,)62 offset2bag的shape为(bagIndices,)
@@ -62,6 +65,7 @@
62 ```65 ```
63 66 
64 - 当mode为max模式:67 - 当mode为max模式:
68+ 
65 ```69 ```
66 output的shape为includeLastOffset ? (bagOffsets - 1, embeddingDim) : (bagOffsets, embeddingDim)70 output的shape为includeLastOffset ? (bagOffsets - 1, embeddingDim) : (bagOffsets, embeddingDim)
67 offset2bag的shape为(bagIndices,)71 offset2bag的shape为(bagIndices,)
@@ -17,4 +17,4 @@
17 17 
18## 约束说明18## 约束说明
19 19 
20-20+
@@ -307,7 +307,9 @@ aclnnStatus aclnnMaxUnpool3dBackward(
307 - aclnnMaxUnpool3dBackward默认确定性实现。307 - aclnnMaxUnpool3dBackward默认确定性实现。
308 308 
309## 调用示例309## 调用示例
310+ 
310示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。311示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。
312+ 
311```Cpp313```Cpp
312#include <iostream>314#include <iostream>
313#include <vector>315#include <vector>
@@ -19,6 +19,7 @@
19 19 
20 - 示例:20 - 示例:
21 - 示例1:21 - 示例1:
22+ 
22 ```23 ```
23 当keepDim为True时,则将对应维度的size置为1,若为False,则删除对应维度。24 当keepDim为True时,则将对应维度的size置为1,若为False,则删除对应维度。
24 假设self的shape为[2, 3, 4],dim = 1,keepDim为true,则输出shape为[2, 1, 4]。25 假设self的shape为[2, 3, 4],dim = 1,keepDim为true,则输出shape为[2, 1, 4]。
@@ -38,6 +39,7 @@
38 ```39 ```
39 40 
40 - 示例3:41 - 示例3:
42+ 
41 ```43 ```
42 若输入44 若输入
43 self = tensor([[1, float('nan'), 3, 2],[-1, float('nan'), 3, 2]]) shape为[2, 4]45 self = tensor([[1, float('nan'), 3, 2],[-1, float('nan'), 3, 2]]) shape为[2, 4]
@@ -49,6 +51,7 @@
49 ```51 ```
50 52
51 - 示例4:53 - 示例4:
54+
52 ```55 ```
53 若输入56 若输入
54 self = tensor([[1, float('nan'), 3, 2],[-1, float('nan'), 3, 2]]) shape为[2, 4]57 self = tensor([[1, float('nan'), 3, 2],[-1, float('nan'), 3, 2]]) shape为[2, 4]
@@ -360,4 +360,4 @@ int main() {
360 aclFinalize();360 aclFinalize();
361 return 0;361 return 0;
362}362}
363-```363+```
@@ -1,7 +1,6 @@
1# aclnnIndexFill&aclnnInplaceIndexFill1# aclnnIndexFill&aclnnInplaceIndexFill
2 2 
3- 3+## 产品支持情况
4-## 产品支持情况
5 4 
6| 产品 | 是否支持 |5| 产品 | 是否支持 |
7| :----------------------------------------------------------- | :------: |6| :----------------------------------------------------------- | :------: |
@@ -581,6 +580,7 @@ int main() {
581 return 0;580 return 0;
582}581}
583```582```
583+ 
584**aclnnInplaceIndexFillTensor调用示例:**584**aclnnInplaceIndexFillTensor调用示例:**
585 585 
586```Cpp586```Cpp
@@ -716,4 +716,4 @@ int main() {
716 aclFinalize();716 aclFinalize();
717 return 0;717 return 0;
718}718}
719-```719+```
@@ -113,7 +113,6 @@ aclnnStatus aclnnInplaceMaskedScatter(
113 </tr>113 </tr>
114 </tbody></table>114 </tbody></table>
115 115 
116- 
117- **返回值**116- **返回值**
118 117 
119 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。118 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
@@ -11,7 +11,6 @@
11| <term>Atlas 推理系列产品</term> | × |11| <term>Atlas 推理系列产品</term> | × |
12| <term>Atlas 训练系列产品</term> | × |12| <term>Atlas 训练系列产品</term> | × |
13 13 
14- 
15## 功能说明14## 功能说明
16 15 
17- 算子功能:将src tensor中的值按指定的轴方向和index tensor中的位置关系逐个填入self tensor中,若有多于一个src值被填入到self的同一位置,那么这些值将会在这一位置上进行累加。16- 算子功能:将src tensor中的值按指定的轴方向和index tensor中的位置关系逐个填入self tensor中,若有多于一个src值被填入到self的同一位置,那么这些值将会在这一位置上进行累加。
@@ -78,4 +77,4 @@
78 77 
79| 调用方式 | 样例代码 | 说明 |78| 调用方式 | 样例代码 | 说明 |
80| ---------------- | --------------------------- | --------------------------------------------------- |79| ---------------- | --------------------------- | --------------------------------------------------- |
81-| aclnn接口 | [test_aclnn_scatter_add](examples/test_aclnn_scatter_add.cpp) | 通过[aclnnScatterAdd](docs/aclnnScatterAdd.md)接口方式调用ScatterAdd算子。 |80+| aclnn接口 | [test_aclnn_scatter_add](examples/test_aclnn_scatter_add.cpp) | 通过[aclnnScatterAdd](docs/aclnnScatterAdd.md)接口方式调用ScatterAdd算子。 |
@@ -11,7 +11,6 @@
11| <term>Atlas 推理系列产品</term> | × |11| <term>Atlas 推理系列产品</term> | × |
12| <term>Atlas 训练系列产品</term> | × |12| <term>Atlas 训练系列产品</term> | × |
13 13 
14- 
15## 功能说明14## 功能说明
16 15 
17- 算子功能:将src tensor中的值按指定的轴方向和index tensor中的位置关系逐个填入self tensor中,若有多于一个src值被填入到self的同一位置,那么这些值将会在这一位置上进行累加。16- 算子功能:将src tensor中的值按指定的轴方向和index tensor中的位置关系逐个填入self tensor中,若有多于一个src值被填入到self的同一位置,那么这些值将会在这一位置上进行累加。
@@ -11,7 +11,6 @@
11| <term>Atlas 推理系列产品</term> | × |11| <term>Atlas 推理系列产品</term> | × |
12| <term>Atlas 训练系列产品</term> | × |12| <term>Atlas 训练系列产品</term> | × |
13 13 
14- 
15## 功能说明14## 功能说明
16 15 
17- 算子功能:[aclnnMaxPool](../../../pooling/max_pool_v3/docs/aclnnMaxPool.md)在2d的逆运算,由outputSize决定out的H、W轴大小,并根据indices索引在out中填入self的元素值,其余位置都设置为0。16- 算子功能:[aclnnMaxPool](../../../pooling/max_pool_v3/docs/aclnnMaxPool.md)在2d的逆运算,由outputSize决定out的H、W轴大小,并根据indices索引在out中填入self的元素值,其余位置都设置为0。
@@ -253,9 +252,10 @@ aclnnStatus aclnnMaxUnpool2d(
253- 确定性计算:252- 确定性计算:
254 - aclnnMaxUnpool2d默认确定性实现。253 - aclnnMaxUnpool2d默认确定性实现。
255 254 
256- 
257## 调用示例255## 调用示例
256+ 
258示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。257示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。
258+ 
259```Cpp259```Cpp
260#include <iostream>260#include <iostream>
261#include <vector>261#include <vector>
@@ -90,4 +90,4 @@
90 90 
91## 约束说明91## 约束说明
92 92 
93-93+
@@ -32,7 +32,9 @@
32- aclnnAddbmm和aclnnInplaceAddbmm实现相同的功能,使用区别如下,请根据自身实际场景选择合适的算子。32- aclnnAddbmm和aclnnInplaceAddbmm实现相同的功能,使用区别如下,请根据自身实际场景选择合适的算子。
33 - aclnnAddbmm:需新建一个输出张量对象存储计算结果。33 - aclnnAddbmm:需新建一个输出张量对象存储计算结果。
34 - aclnnInplaceAddbmm:无需新建输出张量对象,直接在输入张量的内存中存储计算结果。34 - aclnnInplaceAddbmm:无需新建输出张量对象,直接在输入张量的内存中存储计算结果。
35+ 
35- 每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnAddbmmGetWorkspaceSize”或者”aclnnInplaceAddbmmGetWorkspaceSize“接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnAddbmm”或者”aclnnInplaceAddbmm“接口执行计算。36- 每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnAddbmmGetWorkspaceSize”或者”aclnnInplaceAddbmmGetWorkspaceSize“接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnAddbmm”或者”aclnnInplaceAddbmm“接口执行计算。
37+ 
36```cpp38```cpp
37aclnnStatus aclnnAddbmmGetWorkspaceSize(39aclnnStatus aclnnAddbmmGetWorkspaceSize(
38 const aclTensor *self,40 const aclTensor *self,
@@ -45,6 +47,7 @@ aclnnStatus aclnnAddbmmGetWorkspaceSize(
45 uint64_t *workspaceSize,47 uint64_t *workspaceSize,
46 aclOpExecutor **executor)48 aclOpExecutor **executor)
47```49```
50+ 
48```cpp51```cpp
49aclnnStatus aclnnAddbmm(52aclnnStatus aclnnAddbmm(
50 void *workspace,53 void *workspace,
@@ -64,6 +67,7 @@ aclnnStatus aclnnInplaceAddbmmGetWorkspaceSize(
64 uint64_t *workspaceSize,67 uint64_t *workspaceSize,
65 aclOpExecutor **executor)68 aclOpExecutor **executor)
66```69```
70+ 
67```cpp71```cpp
68aclnnStatus aclnnInplaceAddbmm(72aclnnStatus aclnnInplaceAddbmm(
69 void *workspace,73 void *workspace,
@@ -328,7 +332,7 @@ aclnnStatus aclnnInplaceAddbmm(
328 <td>输入|输出</td>332 <td>输入|输出</td>
329 <td>输入输出tensor,即公式中的输入self与out。</td>333 <td>输入输出tensor,即公式中的输入self与out。</td>
330 <td><ul>334 <td><ul>
331- <li>数据类型与batch1@batch2的数据类型需满足数据类型推导规则(参见<a href="../../../docs/zh/context/互推导关系.md">互推导关系</a>和<a href="#约束说明">约束说明</a>)。<li>shape需要与batch1@batch2的后两维的shape一致。</li>335+ <li>数据类型与batch1@batch2的数据类型需满足数据类型推导规则(参见<a href="../../../docs/zh/context/互推导关系.md">互推导关系</a>和<a href="#约束说明">约束说明</a>)。</li><li>shape需要与batch1@batch2的后两维的shape一致。</li>
332 <li>支持空Tensor。</li></ul></td>336 <li>支持空Tensor。</li></ul></td>
333 <td>BFLOAT16、FLOAT16、FLOAT32</td>337 <td>BFLOAT16、FLOAT16、FLOAT32</td>
334 <td>ND</td>338 <td>ND</td>
@@ -514,6 +518,7 @@ aclnnStatus aclnnInplaceAddbmm(
514 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。518 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
515 519 
516## 约束说明520## 约束说明
521+ 
517- 确定性说明:522- 确定性说明:
518 - <term>Atlas 训练系列产品</term><term>Atlas 推理系列产品</term>:aclnnAddbmm&aclnnInplaceAddbmm默认确定性实现。523 - <term>Atlas 训练系列产品</term><term>Atlas 推理系列产品</term>:aclnnAddbmm&aclnnInplaceAddbmm默认确定性实现。
519 - <term>Ascend 950PR/Ascend 950DT</term>:aclnnAddbmm&aclnnInplaceAddbmm默认确定性实现。524 - <term>Ascend 950PR/Ascend 950DT</term>:aclnnAddbmm&aclnnInplaceAddbmm默认确定性实现。
@@ -522,7 +527,9 @@ aclnnStatus aclnnInplaceAddbmm(
522- <term>Atlas 训练系列产品</term><term>Atlas 推理系列产品</term>:Cube单元不支持FLOAT32计算。当输入为FLOAT32,可通过设置cubeMathType=1(ALLOW_FP32_DOWN_PRECISION)来允许接口内部cast到FLOAT16进行计算。527- <term>Atlas 训练系列产品</term><term>Atlas 推理系列产品</term>:Cube单元不支持FLOAT32计算。当输入为FLOAT32,可通过设置cubeMathType=1(ALLOW_FP32_DOWN_PRECISION)来允许接口内部cast到FLOAT16进行计算。
523 528 
524## 调用示例529## 调用示例
530+ 
525示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。531示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。
532+ 
526```Cpp533```Cpp
527#include <iostream>534#include <iostream>
528#include <vector>535#include <vector>
@@ -11,7 +11,6 @@
11| <term>Atlas 推理系列产品</term> | × |11| <term>Atlas 推理系列产品</term> | × |
12| <term>Atlas 训练系列产品</term> | × |12| <term>Atlas 训练系列产品</term> | × |
13 13 
14- 
15## 功能说明14## 功能说明
16 15 
17- 接口功能:16- 接口功能:
@@ -26,6 +25,7 @@
26## 函数原型25## 函数原型
27 26 
28每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用 aclnnBatchMatmulQuantGetWorkspaceSize 接口获取入参并根据流程计算所需workspace大小,再调用 aclnnBatchMatmulQuant 接口执行计算。27每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用 aclnnBatchMatmulQuantGetWorkspaceSize 接口获取入参并根据流程计算所需workspace大小,再调用 aclnnBatchMatmulQuant 接口执行计算。
28+ 
29```cpp29```cpp
30aclnnStatus aclnnBatchMatmulQuantGetWorkspaceSize(30aclnnStatus aclnnBatchMatmulQuantGetWorkspaceSize(
31 const aclTensor* x1, 31 const aclTensor* x1,
@@ -38,6 +38,7 @@ aclnnStatus aclnnBatchMatmulQuantGetWorkspaceSize(
38 uint64_t* workspaceSize, 38 uint64_t* workspaceSize,
39 aclOpExecutor** executor)39 aclOpExecutor** executor)
40```40```
41+ 
41```cpp42```cpp
42aclnnStatus aclnnBatchMatmulQuant(43aclnnStatus aclnnBatchMatmulQuant(
43 void* workspace, 44 void* workspace,
@@ -259,10 +260,10 @@ aclnnStatus aclnnBatchMatmulQuant(
259- 确定性说明:260- 确定性说明:
260 - <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term><term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>:aclnnBatchMatmulQuant默认确定性实现。261 - <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term><term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>:aclnnBatchMatmulQuant默认确定性实现。
261 262 
262- 
263## 调用示例263## 调用示例
264 264 
265示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。265示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。
266+ 
266```Cpp267```Cpp
267#include <iostream>268#include <iostream>
268#include <vector>269#include <vector>
@@ -16,6 +16,7 @@
16## 功能说明16## 功能说明
17 17 
18对输入weight数据做预处理,实现低比特数据由稀疏存储到紧密存储的排布转换。输出weightInt4Pack的[数据格式](../../../docs/zh/context/数据格式.md)声明为FRACTAL_NZ时,该算子将[数据格式](../../../docs/zh/context/数据格式.md)从ND转为FRACTAL_NZ。18对输入weight数据做预处理,实现低比特数据由稀疏存储到紧密存储的排布转换。输出weightInt4Pack的[数据格式](../../../docs/zh/context/数据格式.md)声明为FRACTAL_NZ时,该算子将[数据格式](../../../docs/zh/context/数据格式.md)从ND转为FRACTAL_NZ。
19+ 
19- <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term><term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>:将INT32类型的weight输入数据打包为紧密排布的INT4数据。20- <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term><term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>:将INT32类型的weight输入数据打包为紧密排布的INT4数据。
20 21 
21- <term>Ascend 950PR/Ascend 950DT</term> :将INT32类型的weight打包为紧密排布的INT4类型,将FLOAT类型的weight打包为紧密排布的FLOAT4_E2M1类型。22- <term>Ascend 950PR/Ascend 950DT</term> :将INT32类型的weight打包为紧密排布的INT4类型,将FLOAT类型的weight打包为紧密排布的FLOAT4_E2M1类型。
@@ -692,4 +692,4 @@ int main()
692 Finalize(deviceId, stream);692 Finalize(deviceId, stream);
693 return 0;693 return 0;
694}694}
695-```695+```
@@ -13,7 +13,7 @@
13 13 
14## 功能说明14## 功能说明
15 15 
16-- 算子功能:功能等价Megatron的matmul与fused\_vocab\_parallel\_cross\_entropy的实现,支持vocabulary\_size维度切卡融合matmul与celoss,中间根据通信拆分为[FusedLinearOnlineMaxSum](./)和[FusedCrossEntropyLossWithMaxSum](../../loss/fused_cross_entropy_loss_with_max_sum)。16+- 算子功能:功能等价Megatron的matmul与fused\_vocab\_parallel\_cross\_entropy的实现,支持vocabulary\_size维度切卡融合matmul与celoss,中间根据通信拆分为[FusedLinearOnlineMaxSum](../../matmul/fused_linear_online_max_sum/docs/aclnnFusedLinearOnlineMaxSum.md)和[FusedCrossEntropyLossWithMaxSum](../../loss/fused_cross_entropy_loss_with_max_sum)。
17- 计算公式:17- 计算公式:
18 1. $input$与$wight^T$做矩阵乘得到:18 1. $input$与$wight^T$做矩阵乘得到:
19 19 
@@ -625,4 +625,4 @@ int main() {
625 aclFinalize();625 aclFinalize();
626 return 0;626 return 0;
627}627}
628-```628+```
@@ -49,6 +49,7 @@
49 $$49 $$
50 50 
51## 函数原型51## 函数原型
52+ 
52每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnFusedQuantMatmulGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnFusedQuantMatmul”接口执行计算。53每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnFusedQuantMatmulGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnFusedQuantMatmul”接口执行计算。
53 54 
54```c++55```c++
@@ -69,6 +70,7 @@ aclnnStatus aclnnFusedQuantMatmulGetWorkspaceSize(
69 uint64_t *workspaceSize,70 uint64_t *workspaceSize,
70 aclOpExecutor **executor)71 aclOpExecutor **executor)
71```72```
73+ 
72```c++74```c++
73aclnnStatus aclnnFusedQuantMatmul(75aclnnStatus aclnnFusedQuantMatmul(
74 void *workspace,76 void *workspace,
@@ -201,7 +201,7 @@ aclnnStatus aclnnMatmul(
201 <col style="width: 130px">201 <col style="width: 130px">
202 <col style="width: 650px">202 <col style="width: 650px">
203 </colgroup>203 </colgroup>
204- <table><thead>204+ <thead>
205 <tr>205 <tr>
206 <th>参数名</th>206 <th>参数名</th>
207 <th>输入/输出</th>207 <th>输入/输出</th>
@@ -98,7 +98,7 @@ aclnnStatus aclnnMatmulWeightNz(
98 <td>out</td>98 <td>out</td>
99 <td>输出</td>99 <td>输出</td>
100 <td>表示矩阵乘的输出矩阵,公式中的out。</td>100 <td>表示矩阵乘的输出矩阵,公式中的out。</td>
101- <td>数据类型需要与self与mat2推导之后的数据类型保持一致(参见<a href="../../../docs/zh/context/互推导关系.md">互推导关系</a>和<a href="#约束说明">约束说明</a>)。</br> 各个维度表示:(m,n),m与self的m一致,n与mat2的n1以及n0满足ceil(n / n0) = n1的关系。</td>101+ <td>数据类型需要与self与mat2推导之后的数据类型保持一致(参见<a href="../../../docs/zh/context/互推导关系.md">互推导关系</a>和<a href="#约束说明">约束说明</a>)。<br> 各个维度表示:(m,n),m与self的m一致,n与mat2的n1以及n0满足ceil(n / n0) = n1的关系。</td>
102 <td>BFLOAT16、FLOAT16、FLOAT32</td>102 <td>BFLOAT16、FLOAT16、FLOAT32</td>
103 <td>ND</td>103 <td>ND</td>
104 <td>2</td>104 <td>2</td>
@@ -198,7 +198,7 @@ aclnnStatus aclnnMatmulWeightNz(
198 <col style="width: 130px">198 <col style="width: 130px">
199 <col style="width: 650px">199 <col style="width: 650px">
200 </colgroup>200 </colgroup>
201- <table><thead>201+ <thead>
202 <tr>202 <tr>
203 <th>参数名</th>203 <th>参数名</th>
204 <th>输入/输出</th>204 <th>输入/输出</th>
@@ -199,7 +199,7 @@ aclnnStatus aclnnMm(
199 <col style="width: 130px">199 <col style="width: 130px">
200 <col style="width: 650px">200 <col style="width: 650px">
201 </colgroup>201 </colgroup>
202- <table><thead>202+ <thead>
203 <tr>203 <tr>
204 <th>参数名</th>204 <th>参数名</th>
205 <th>输入/输出</th>205 <th>输入/输出</th>
@@ -227,75 +227,76 @@ aclnnStatus aclnnMatmulCompress(
227 227 
2281. 准备压缩前的数据2281. 准备压缩前的数据
229 229 
230-假设通过脚本gen_data.py生成输入数据,示例如下,仅供参考:230+ 假设通过脚本gen_data.py生成输入数据,示例如下,仅供参考:
231 231 
232-```python232+ ```python
233-import numpy as np233+ import numpy as np
234-import os234+ import os
235-import sys235+ import sys
236-from numpy import random236+ from numpy import random
237 237 
238-def write2file(data, path):238+ def write2file(data, path):
239- with open(path, 'wb') as f:239+ with open(path, 'wb') as f:
240- data.tofile(f)240+ data.tofile(f)
241 241 
242-if not os.path.exists("./data"):242+ if not os.path.exists("./data"):
243- os.mkdir("./data")243+ os.mkdir("./data")
244 244 
245-if len(sys.argv) != 4:245+ if len(sys.argv) != 4:
246- print("Usage: python gen_data.py m k n")246+ print("Usage: python gen_data.py m k n")
247- sys.exit(1)247+ sys.exit(1)
248 248 
249-m = int(sys.argv[1])249+ m = int(sys.argv[1])
250-k = int(sys.argv[2])250+ k = int(sys.argv[2])
251-n = int(sys.argv[3])251+ n = int(sys.argv[3])
252 252 
253-if m <= 0 or k <= 0 or n <= 0:253+ if m <= 0 or k <= 0 or n <= 0:
254- print("Error: m, k and n must be positive integers.")254+ print("Error: m, k and n must be positive integers.")
255- sys.exit(1)255+ sys.exit(1)
256 256 
257-# 随机生成矩阵mat1,shape为(m,k )257+ # 随机生成矩阵mat1,shape为(m,k )
258-mat1 = random.randn(m, k).astype(np.float16)258+ mat1 = random.randn(m, k).astype(np.float16)
259-write2file(mat1, "./data/mat1.bin")259+ write2file(mat1, "./data/mat1.bin")
260 260 
261-# 随机生成矩阵mat2,shape为(n, k)261+ # 随机生成矩阵mat2,shape为(n, k)
262-mat2 = random.randint(0, 100, size=(n, k)).astype(np.float16)262+ mat2 = random.randint(0, 100, size=(n, k)).astype(np.float16)
263-mat2 = np.transpose(mat2, (1, 0)).copy()263+ mat2 = np.transpose(mat2, (1, 0)).copy()
264-mat2 = mat2.view(np.int8)264+ mat2 = mat2.view(np.int8)
265-np.save("./data/weight.npy", {'weight': mat2})265+ np.save("./data/weight.npy", {'weight': mat2})
266-os.chmod("./data/weight.npy", 0o0640)266+ os.chmod("./data/weight.npy", 0o0640)
267 267 
268-# 生成output268+ # 生成output
269-output = np.random.randn(m, n).astype(np.float16)269+ output = np.random.randn(m, n).astype(np.float16)
270-write2file(output, "./data/output.bin")270+ write2file(output, "./data/output.bin")
271 271 
272-# 生成bias272+ # 生成bias
273-bias = random.randn(n).astype(np.float32)273+ bias = random.randn(n).astype(np.float32)
274-write2file(bias, "./data/bias.bin")274+ write2file(bias, "./data/bias.bin")
275-```275+ ```
276-执行gen_data.py,假设mat1和mat2的shape入参为m=512、k=1024、n=1024。
277 276 
278-```shell277+ 执行gen_data.py,假设mat1和mat2的shape入参为m=512、k=1024、n=1024。
279-python3 gen_data.py 512 1024 1024278+ 
280-```279+ ```shell
280+ python3 gen_data.py 512 1024 1024
281+ ```
281 282 
2822. 对数据进行预处理2832. 对数据进行预处理
283 284 
284-**原始权重通过msModelSlim压缩工具生成压缩后的x2、compressIndex以及compressInfo:**285+ **原始权重通过msModelSlim压缩工具生成压缩后的x2、compressIndex以及compressInfo:**
285-使用以下接口时,需对CANN包中msModelSlim压缩工具进行编译,具体操作参考[Gitee msit仓](https://gitee.com/ascend/msit/tree/master/msmodelslim)中msmodelslim/pytorch/weight_compression目录下的README.md。286+ 使用以下接口时,需对CANN包中msModelSlim压缩工具进行编译,具体操作参考[Gitee msit仓](https://gitee.com/ascend/msit/tree/master/msmodelslim)中msmodelslim/pytorch/weight_compression目录下的README.md。
286 287 
287-```python288+ ```python
288-from msmodelslim.pytorch.weight_compression import CompressConfig, Compressor289+ from msmodelslim.pytorch.weight_compression import CompressConfig, Compressor
289 290 
290-compress_config = CompressConfig(do_pseudo_sparse=False, sparse_ratio=1)291+ compress_config = CompressConfig(do_pseudo_sparse=False, sparse_ratio=1)
291-compressor = Compressor(compress_config, weight_path=weight_path)292+ compressor = Compressor(compress_config, weight_path=weight_path)
292 293 
293-compress_weight, compress_index, compress_info = compressor.run()294+ compress_weight, compress_index, compress_info = compressor.run()
294-# 压缩后的权重,对应aclnnMatmulCompressGetWorkspaceSize接口的x2295+ # 压缩后的权重,对应aclnnMatmulCompressGetWorkspaceSize接口的x2
295-compressor.export(compress_weight, './data/weight')296+ compressor.export(compress_weight, './data/weight')
296-# 压缩权重的索引,对应aclnnMatmulCompressGetWorkspaceSize接口的compressIndex297+ # 压缩权重的索引,对应aclnnMatmulCompressGetWorkspaceSize接口的compressIndex
297-compressor.export(compress_index, './data/index')298+ compressor.export(compress_index, './data/index')
298-```299+ ```
299 300 
3003. 调用aclnn接口运算3013. 调用aclnn接口运算
301 302 
@@ -93,7 +93,6 @@
93 其中,gsM,gsN和gsK分别代表groupSizeM,groupSizeN和groupSizeK;x1Slice代表x1第m行长度为groupSizeK的向量,x2Slice代表x2第n列长度为groupSizeK的向量;K轴均从j*groupSizeK起始切片,j的取值范围[0, kLoops], kLoops = ceil(K / groupSizeK),K为K轴长度,支持最后的切片长度不足groupSizeK。93 其中,gsM,gsN和gsK分别代表groupSizeM,groupSizeN和groupSizeK;x1Slice代表x1第m行长度为groupSizeK的向量,x2Slice代表x2第n列长度为groupSizeK的向量;K轴均从j*groupSizeK起始切片,j的取值范围[0, kLoops], kLoops = ceil(K / groupSizeK),K为K轴长度,支持最后的切片长度不足groupSizeK。
94 </details>94 </details>
95 95 
96- 
97## 函数原型96## 函数原型
98 97 
99每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnQuantMatmulWeightNzGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnQuantMatmulWeightNz”接口执行计算。98每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnQuantMatmulWeightNzGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnQuantMatmulWeightNz”接口执行计算。
@@ -236,6 +236,7 @@ aclnnStatus aclnnQuantMatmul(
236 - <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term><term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>:aclnnQuantMatmul默认确定性实现。236 - <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term><term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>:aclnnQuantMatmul默认确定性实现。
237 237 
238该接口迁移到aclnnQuantMatmulV4接口的方法:238该接口迁移到aclnnQuantMatmulV4接口的方法:
239+ 
239- 输入x1,x2,bias可以直接转为aclnnQuantMatmulV4接口中的x1,x2,bias。240- 输入x1,x2,bias可以直接转为aclnnQuantMatmulV4接口中的x1,x2,bias。
240- 输入deqScale为FLOAT型,将这个FLOAT数构造成shape为(1,)的FLOAT型aclTensor(参考[调用示例](#调用示例)中的CreateAclTensor), 再利用aclnnTransQuantParamV2转为shape为(1,)的uint64_t的aclTensor(参考[aclnnQuantMatmulV4调用示例](../../quant_batch_matmul_v3/docs/aclnnQuantMatmulV4.md#调用示例)),记为**scale**,对标aclnnQuantMatmulV4接口中的scale。241- 输入deqScale为FLOAT型,将这个FLOAT数构造成shape为(1,)的FLOAT型aclTensor(参考[调用示例](#调用示例)中的CreateAclTensor), 再利用aclnnTransQuantParamV2转为shape为(1,)的uint64_t的aclTensor(参考[aclnnQuantMatmulV4调用示例](../../quant_batch_matmul_v3/docs/aclnnQuantMatmulV4.md#调用示例)),记为**scale**,对标aclnnQuantMatmulV4接口中的scale。
241- aclnnQuantMatmulV4接口中的可选输入offset/pertokenScaleOptional设置为nullptr,transposeX1和transposeX2均设置为false。242- aclnnQuantMatmulV4接口中的可选输入offset/pertokenScaleOptional设置为nullptr,transposeX1和transposeX2均设置为false。
@@ -244,6 +245,7 @@ aclnnStatus aclnnQuantMatmul(
244## 调用示例245## 调用示例
245 246 
246示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。247示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。
248+ 
247```Cpp249```Cpp
248#include <iostream>250#include <iostream>
249#include <vector>251#include <vector>
@@ -407,4 +409,4 @@ int main() {
407 Finalize(deviceId, stream);409 Finalize(deviceId, stream);
408 return 0;410 return 0;
409}411}
410-```412+```
@@ -2,7 +2,6 @@
2 2 
3**须知:该接口后续版本会废弃,请使用最新aclnnQuantMatmulV5接口。**3**须知:该接口后续版本会废弃,请使用最新aclnnQuantMatmulV5接口。**
4 4 
5- 
6## 产品支持情况5## 产品支持情况
7 6 
8| 产品 | 是否支持 |7| 产品 | 是否支持 |
@@ -1,7 +1,6 @@
1# TransposeBatchMatMul1# TransposeBatchMatMul
2 2 
3- 3+## 产品支持情况
4-## 产品支持情况
5 4 
6| 产品 | 是否支持 |5| 产品 | 是否支持 |
7| ---- | :----:|6| ---- | :----:|
@@ -142,6 +141,7 @@
142</tbody></table>141</tbody></table>
143 142 
144- Kirin X90/Kirin 9030处理器系列产品:不支持BFLOAT16。143- Kirin X90/Kirin 9030处理器系列产品:不支持BFLOAT16。
144+ 
145## 约束说明145## 约束说明
146 146 
147- <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term><term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>147- <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term><term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>
@@ -151,7 +151,9 @@
151 - 当x1的输入shape为(B, M, K)时,K <= 65535;当x1的输入shape为(M, B, K)时,B * K <= 65535。151 - 当x1的输入shape为(B, M, K)时,K <= 65535;当x1的输入shape为(M, B, K)时,B * K <= 65535。
152 - 当scale不为空时,batchSplitFactor只能等于1,B与N的乘积小于65536, 且仅支持输入为FLOAT16和输出为INT8的类型推导。152 - 当scale不为空时,batchSplitFactor只能等于1,B与N的乘积小于65536, 且仅支持输入为FLOAT16和输出为INT8的类型推导。
153- <term>Ascend 950PR/Ascend 950DT</term>153- <term>Ascend 950PR/Ascend 950DT</term>
154+ 
154 - 当scale不为空时,batchSplitFactor只能等于1,且仅支持输入为FLOAT16和输出为INT8的类型推导。155 - 当scale不为空时,batchSplitFactor只能等于1,且仅支持输入为FLOAT16和输出为INT8的类型推导。
156+
155## 调用说明157## 调用说明
156 158 
157| 调用方式 | 样例代码 | 说明 |159| 调用方式 | 样例代码 | 说明 |
@@ -284,7 +284,7 @@ aclnnStatus aclnnTransposeQuantBatchMatMul(
284 <col style="width: 130px">284 <col style="width: 130px">
285 <col style="width: 650px">285 <col style="width: 650px">
286 </colgroup>286 </colgroup>
287- <table><thead>287+ <thead>
288 <tr>288 <tr>
289 <th>参数名</th>289 <th>参数名</th>
290 <th>输入/输出</th>290 <th>输入/输出</th>
@@ -1,6 +1,6 @@
1# AdamApplyOne1# AdamApplyOne
2 2 
3-## 产品支持情况3+## 产品支持情况
4 4 
5|产品 | 是否支持 |5|产品 | 是否支持 |
6|:-------------------------|:----------:|6|:-------------------------|:----------:|
@@ -1,8 +1,8 @@
1- # AdamApplyOneWithDecay1+# AdamApplyOneWithDecay
2 2 
3## 产品支持情况3## 产品支持情况
4 4 
5-|产品 | 是否支持 |5+|产品 | 是否支持 |
6|:-------------------------|:----------:|6|:-------------------------|:----------:|
7| <term>Ascend 950PR/Ascend 950DT</term> | √ |7| <term>Ascend 950PR/Ascend 950DT</term> | √ |
8| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | √ |8| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | √ |
@@ -230,7 +230,6 @@ aclnnStatus aclnnAdvanceStepV2(
230 <td>-</td>230 <td>-</td>
231 <td>-</td>231 <td>-</td>
232 </tr>232 </tr>
233- <tr>
234 </tbody>233 </tbody>
235 </table>234 </table>
236 235 
@@ -1,6 +1,6 @@
1# AdaptiveAvgPool3dGrad1# AdaptiveAvgPool3dGrad
2 2 
3-## 产品支持情况3+## 产品支持情况
4 4 
5| 产品 | 是否支持 |5| 产品 | 是否支持 |
6| ---- | :----:|6| ---- | :----:|
@@ -105,6 +105,7 @@
105## 约束说明105## 约束说明
106 106 
107Shape描述:107Shape描述:
108+ 
108 - self.shape = (N, C, Din, Hin, Win)109 - self.shape = (N, C, Din, Hin, Win)
109 - outputSize = [Dout, Hout, Wout]110 - outputSize = [Dout, Hout, Wout]
110 - outputOut.shape = (N, C, Dout, Hout, Wout)111 - outputOut.shape = (N, C, Dout, Hout, Wout)
@@ -1,6 +1,6 @@
1# AvgPool3DGrad1# AvgPool3DGrad
2 2 
3-## 产品支持情况3+## 产品支持情况
4 4 
5| 产品 | 是否支持 |5| 产品 | 是否支持 |
6| ---- | :----:|6| ---- | :----:|
@@ -1,6 +1,6 @@
1# MaxPool3DWithArgmaxV21# MaxPool3DWithArgmaxV2
2 2 
3-## 产品支持情况3+## 产品支持情况
4 4 
5| 产品 | 是否支持 |5| 产品 | 是否支持 |
6| ---- | :----:|6| ---- | :----:|
@@ -129,4 +129,3 @@
129| 调用方式 | 样例代码 | 说明 |129| 调用方式 | 样例代码 | 说明 |
130| ---------------- | --------------------------- | --------------------------------------------------- |130| ---------------- | --------------------------- | --------------------------------------------------- |
131| aclnn接口 | [test_aclnn_max_pool3d_with_argmax.cpp](examples/test_aclnn_max_pool3d_with_argmax.cpp) | 通过[aclnnMaxPool3dWithArgmax](docs/aclnnMaxPool3dWithArgmax.md)接口方式调用MaxPool3DWithArgmaxV2算子。 |131| aclnn接口 | [test_aclnn_max_pool3d_with_argmax.cpp](examples/test_aclnn_max_pool3d_with_argmax.cpp) | 通过[aclnnMaxPool3dWithArgmax](docs/aclnnMaxPool3dWithArgmax.md)接口方式调用MaxPool3DWithArgmaxV2算子。 |
132- 
@@ -34,6 +34,7 @@
34 $$34 $$
35 35 
36## 函数原型36## 函数原型
37+ 
37每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnMaxPool2dWithIndicesGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnMaxPool2dWithIndices”接口执行计算。38每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnMaxPool2dWithIndicesGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnMaxPool2dWithIndices”接口执行计算。
38 39 
39```Cpp40```Cpp
@@ -49,6 +50,7 @@ aclnnStatus aclnnMaxPool2dWithIndicesGetWorkspaceSize(
49 uint64_t *workspaceSize,50 uint64_t *workspaceSize,
50 aclOpExecutor **executor)51 aclOpExecutor **executor)
51```52```
53+ 
52```Cpp54```Cpp
53aclnnStatus aclnnMaxPool2dWithIndices(55aclnnStatus aclnnMaxPool2dWithIndices(
54 void *workspace,56 void *workspace,
@@ -56,6 +58,7 @@ aclnnStatus aclnnMaxPool2dWithIndices(
56 aclOpExecutor *executor,58 aclOpExecutor *executor,
57 aclrtStream stream)59 aclrtStream stream)
58```60```
61+ 
59## aclnnMaxPool2dWithIndicesGetWorkspaceSize62## aclnnMaxPool2dWithIndicesGetWorkspaceSize
60 63 
61- **参数说明:**64- **参数说明:**
@@ -182,7 +185,8 @@ aclnnStatus aclnnMaxPool2dWithIndices(
182 <td>-</td>185 <td>-</td>
183 </tr>186 </tr>
184 </tbody></table>187 </tbody></table>
185- - <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>、<term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>:不支持NHWC,dilation中的元素值仅支持1。188+
189+ - <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term><term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>:不支持NHWC,dilation中的元素值仅支持1。
186 190 
187- **返回值:**191- **返回值:**
188 192 
@@ -252,6 +256,7 @@ aclnnStatus aclnnMaxPool2dWithIndices(
252 </tr>256 </tr>
253 </tbody>257 </tbody>
254 </table>258 </table>
259+ 
255## aclnnMaxPool2dWithIndices260## aclnnMaxPool2dWithIndices
256 261 
257- **参数说明:**262- **参数说明:**
@@ -289,11 +294,13 @@ aclnnStatus aclnnMaxPool2dWithIndices(
289 </tr>294 </tr>
290 </tbody>295 </tbody>
291 </table>296 </table>
292-- **返回值:**297+ 
298+- **返回值:**
293 299 
294 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。300 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
295 301 
296## 约束说明302## 约束说明
303+ 
297- 确定性计算:304- 确定性计算:
298 - aclnnMaxPool2dWithIndices默认确定性实现。305 - aclnnMaxPool2dWithIndices默认确定性实现。
299 306 
@@ -302,7 +309,9 @@ aclnnStatus aclnnMaxPool2dWithIndices(
302 - 当ceilMode为True的时候,如果滑动窗口全部在右侧padding区域上,这个输出结果将被忽略。309 - 当ceilMode为True的时候,如果滑动窗口全部在右侧padding区域上,这个输出结果将被忽略。
303 310 
304## 调用示例311## 调用示例
312+ 
305示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。313示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。
314+ 
306```Cpp315```Cpp
307#include <cstdio>316#include <cstdio>
308#include <iostream>317#include <iostream>
@@ -39,6 +39,7 @@
39 $$39 $$
40 40 
41## 函数原型41## 函数原型
42+ 
42每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnMaxPool2dWithMaskGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnMaxPool2dWithMask”接口执行计算。43每个算子分为[两段式接口](../../../docs/zh/context/两段式接口.md),必须先调用“aclnnMaxPool2dWithMaskGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnMaxPool2dWithMask”接口执行计算。
43 44 
44```Cpp45```Cpp
@@ -54,6 +55,7 @@ aclnnStatus aclnnMaxPool2dWithMaskGetWorkspaceSize(
54 uint64_t *workspaceSize,55 uint64_t *workspaceSize,
55 aclOpExecutor **executor)56 aclOpExecutor **executor)
56```57```
58+ 
57```Cpp59```Cpp
58aclnnStatus aclnnMaxPool2dWithMask(60aclnnStatus aclnnMaxPool2dWithMask(
59 void *workspace,61 void *workspace,
@@ -61,6 +63,7 @@ aclnnStatus aclnnMaxPool2dWithMask(
61 aclOpExecutor *executor,63 aclOpExecutor *executor,
62 aclrtStream stream)64 aclrtStream stream)
63```65```
66+ 
64## aclnnMaxPool2dWithMaskGetWorkspaceSize67## aclnnMaxPool2dWithMaskGetWorkspaceSize
65 68 
66- **参数说明:**69- **参数说明:**
@@ -187,9 +190,9 @@ aclnnStatus aclnnMaxPool2dWithMask(
187 <td>-</td>190 <td>-</td>
188 </tr>191 </tr>
189 </tbody></table>192 </tbody></table>
190- - <term>Atlas 推理系列产品</term>:数据类型支持FLOAT。
191 193 
192- - <term>Atlas 训练系列产品</term>:不支持BFLOAT16数据类型。194+ - <term>Atlas 推理系列产品</term>:数据类型支持FLOAT
195+ - <term>Atlas 训练系列产品</term>:不支持BFLOAT16数据类型。
193 196 
194- **返回值:**197- **返回值:**
195 198 
@@ -303,11 +306,12 @@ aclnnStatus aclnnMaxPool2dWithMask(
303 </tr>306 </tr>
304 </tbody>307 </tbody>
305 </table>308 </table>
306-- **返回值:**309+- **返回值:**
307 310 
308 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。311 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
309 312 
310## 约束说明313## 约束说明
314+ 
311- 确定性计算:315- 确定性计算:
312 - aclnnMaxPool2dWithMask默认确定性实现。316 - aclnnMaxPool2dWithMask默认确定性实现。
313 317 
@@ -321,9 +325,10 @@ $$s_h >= (H_{in} + padding\_size) / (H_{out} - 1)$$
321 325 
322$$s_w >= (W_{in} + padding\_size) / (W_{out} - 1)$$326$$s_w >= (W_{in} + padding\_size) / (W_{out} - 1)$$
323 327 
324- 
325## 调用示例328## 调用示例
329+ 
326示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。330示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。
331+ 
327```Cpp332```Cpp
328#include <cstdio>333#include <cstdio>
329#include <iostream>334#include <iostream>
@@ -60,6 +60,7 @@ aclnnStatus aclnnMaxPool3dWithArgmaxGetWorkspaceSize(
60 uint64_t *workspaceSize,60 uint64_t *workspaceSize,
61 aclOpExecutor **executor)61 aclOpExecutor **executor)
62```62```
63+ 
63```Cpp64```Cpp
64aclnnStatus aclnnMaxPool3dWithArgmax(65aclnnStatus aclnnMaxPool3dWithArgmax(
65 void *workspace,66 void *workspace,
@@ -67,6 +68,7 @@ aclnnStatus aclnnMaxPool3dWithArgmax(
67 aclOpExecutor *executor,68 aclOpExecutor *executor,
68 aclrtStream stream)69 aclrtStream stream)
69```70```
71+ 
70## aclnnMaxPool3dWithArgmaxGetWorkspaceSize72## aclnnMaxPool3dWithArgmaxGetWorkspaceSize
71 73 
72* **参数说明**74* **参数说明**
@@ -281,11 +283,13 @@ aclnnStatus aclnnMaxPool3dWithArgmax(
281 </tr>283 </tr>
282 </tbody>284 </tbody>
283 </table>285 </table>
284-- **返回值:**286+ 
287+- **返回值:**
285 288 
286 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。289 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
287 290 
288## 约束说明291## 约束说明
292+ 
289- 确定性计算:aclnnMaxPool3dWithArgmax默认确定性实现。293- 确定性计算:aclnnMaxPool3dWithArgmax默认确定性实现。
290 294 
291- kernelSize、stride、padding、dilation、ceilMode参数需要保证输出out shape中不存在小于1的轴。295- kernelSize、stride、padding、dilation、ceilMode参数需要保证输出out shape中不存在小于1的轴。
@@ -456,4 +460,4 @@ int main() {
456 aclFinalize();460 aclFinalize();
457 return 0;461 return 0;
458}462}
459-```463+```
@@ -1,6 +1,6 @@
1# MaxPoolGradWithArgmaxV31# MaxPoolGradWithArgmaxV3
2 2 
3-## 产品支持情况3+## 产品支持情况
4 4 
5|产品 | 是否支持 |5|产品 | 是否支持 |
6|:-------------------------|:----------:|6|:-------------------------|:----------:|
@@ -201,6 +201,6 @@
201 201 
202## 调用说明202## 调用说明
203 203 
204-| 调用方式 | 调用样例 | 说明 |204+| 调用方式 | 调用样例 | 说明 |
205|--------------|------------------------------------------------------------------------|----------------------------------------------------------------|205|--------------|------------------------------------------------------------------------|----------------------------------------------------------------|
206| aclnn调用 | [test_aclnn_bidirection_lstm_v2](examples/test_aclnn_bidirection_lstm_v2.cpp) | 通过[aclnnBidirectionLSTMV2](docs/aclnnBidirectionLSTMV2.md)接口方式调用BidirectionLSTMV2算子。 |206| aclnn调用 | [test_aclnn_bidirection_lstm_v2](examples/test_aclnn_bidirection_lstm_v2.cpp) | 通过[aclnnBidirectionLSTMV2](docs/aclnnBidirectionLSTMV2.md)接口方式调用BidirectionLSTMV2算子。 |
@@ -306,7 +306,7 @@ aclnnStatus aclnnLstmBackward(
306 <td>hx</td>306 <td>hx</td>
307 <td>输入</td>307 <td>输入</td>
308 <td>LSTM每层的初始hidden和cell状态。对应0时刻的h(t-1)与c(t-1)。</td>308 <td>LSTM每层的初始hidden和cell状态。对应0时刻的h(t-1)与c(t-1)。</td>
309- <td><ul><li>列表长度为2,包含h_0和c_0。</li><li>多层双向时每个tensor数据沿第0维按先双向后逐层排布。<li>数据类型与input一致。</li></ul></td>309+ <td><ul><li>列表长度为2,包含h_0和c_0。</li><li>多层双向时每个tensor数据沿第0维按先双向后逐层排布。</li><li>数据类型与input一致。</li></ul></td>
310 <td>FLOAT32、FLOAT16</td>310 <td>FLOAT32、FLOAT16</td>
311 <td>ND</td>311 <td>ND</td>
312 <td>列表内每个tensor shape为[D * num_layers, batch_size, hidden_size]</td>312 <td>列表内每个tensor shape为[D * num_layers, batch_size, hidden_size]</td>
@@ -163,7 +163,6 @@ aclnnStatus aclnnModulate(
163 </tbody>163 </tbody>
164 </table>164 </table>
165 165 
166- 
167## aclnnModulate166## aclnnModulate
168 167 
169- **参数说明**168- **参数说明**
@@ -106,4 +106,4 @@
106 106 
107| 调用方式 | 调用样例 | 说明 |107| 调用方式 | 调用样例 | 说明 |
108|--------------|------------------------------------------------------------------------|----------------------------------------------------------------|108|--------------|------------------------------------------------------------------------|----------------------------------------------------------------|
109-| aclnn调用 | [test_aclnn_modulatebackward](./examples/test_aclnn_modulatebackward.cpp) | 通过[aclnnModulateBackward](./docs/aclnnModulate.md)接口方式调用ModulateGrad算子。 |109+| aclnn调用 | [test_aclnn_modulatebackward](./examples/test_aclnn_modulatebackward.cpp) | 通过[aclnnModulateBackward](../../vfusion/modulate_grad/docs/aclnnModulateBackward.md)接口方式调用ModulateGrad算子。|
@@ -384,7 +384,7 @@ int main() {
384 auto ret = Init(deviceId, &stream);384 auto ret = Init(deviceId, &stream);
385 // check根据自己的需要处理385 // check根据自己的需要处理
386 CHECK_RET(ret == 0, LOG_PRINT("Init acl failed. ERROR: %d\n", ret); return ret);386 CHECK_RET(ret == 0, LOG_PRINT("Init acl failed. ERROR: %d\n", ret); return ret);
387- // 2.构造输入与输出,需要根据API的接口自定义构造387+ // 2.构造输入与输出,需要根据API的接口自定义构造
388 std::vector<int64_t> valueShape = {1, 1, 2, 32};388 std::vector<int64_t> valueShape = {1, 1, 2, 32};
389 std::vector<int64_t> spatialShapeShape = {1, 2};389 std::vector<int64_t> spatialShapeShape = {1, 2};
390 std::vector<int64_t> levelStartIndexShape = {1};390 std::vector<int64_t> levelStartIndexShape = {1};
@@ -35,6 +35,7 @@ aclnnStatus aclnnScaledMaskedSoftmaxBackwardGetWorkspaceSize(
35 uint64_t* workspaceSize,35 uint64_t* workspaceSize,
36 aclOpExecutor** executor)36 aclOpExecutor** executor)
37```37```
38+ 
38```Cpp39```Cpp
39aclnnStatus aclnnScaledMaskedSoftmaxBackward(40aclnnStatus aclnnScaledMaskedSoftmaxBackward(
40 void* workspace,41 void* workspace,
@@ -237,6 +238,7 @@ aclnnStatus aclnnScaledMaskedSoftmaxBackward(
237## 调用示例238## 调用示例
238 239 
239示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。240示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/编译与运行样例.md)。
241+ 
240```c++242```c++
241#include <iostream>243#include <iostream>
242#include <vector>244#include <vector>