已合并
修改nn仓9.0.0doc tools 内容修改 #3743
caiwenwen创建于 4月13日
修改nn仓9.0.0doc tools 内容修改 #3743
已合并
共 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 | + | ||
| 49 | PR上库要求: | 50 | PR上库要求: |
| 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 | |||
| 26 | 1. [算子列表](docs/zh/op_list.md):项目全量算子信息,方便快速查询。 | 26 | 1. [算子列表](docs/zh/op_list.md):项目全量算子信息,方便快速查询。 |
| 27 | 2. [QuickStart](QUICKSTART.md):**基于WebIDE或Docker环境**提供极简快速上手指南,包括搭建环境、编译部署、算子调用/开发/调试、贡献等。 | 27 | 2. [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.sh | 88 | source ${INSTALL_DIR}/set_env.sh |
| 88 | ``` | 89 | ``` |
| @@ -139,4 +140,5 @@ | |||
| 139 | ``` | 140 | ``` |
| 140 | aclnnAddmmGetWorkspaceSize failed. ERROR: 161001 | 141 | 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 | ```bash | 127 | ```bash |
| 129 | msprof op ./test_aclnn_add_example | 128 | 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 | ``` text | 133 | ``` text |
| @@ -141,6 +141,7 @@ | |||
| 141 | Current Freq: 1800 | 141 | Current Freq: 1800 |
| 142 | Rated Freq: 1800 | 142 | 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 @@ | |||
| 148 | 3. 采集仿真流水图。 | 149 | 3. 采集仿真流水图。 |
| 149 | 150 | ||
| 150 | msProf工具进行算子仿真调优之前,需执行如下命令配置环境变量。 | 151 | msProf工具进行算子仿真调优之前,需执行如下命令配置环境变量。 |
| 152 | + | ||
| 151 | ```bash | 153 | ```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 | ```bash | 161 | ```bash |
| 158 | msprof op simulator --output=$PWD/pipeline_auto --kernel-name"AddExample" ./test_aclnn_add_example | 162 | 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 | ||
| 185 | 3. 在Chrome浏览器中输入“chrome://tracing”地址,并将生成的指令流水图文件(trace_core0.json)拖到空白处打开,具体参数介绍参考CANN Simulator中[“仿真结果解析”](./cann_simulator.md/#仿真结果解析)章节。 | 190 | 3. 在Chrome浏览器中输入“chrome://tracing”地址,并将生成的指令流水图文件(trace_core0.json)拖到空白处打开,具体参数介绍参考CANN Simulator中[“仿真结果解析”](./cann_simulator.md/#仿真结果解析)章节。 |
| 186 | - | ||
| @@ -101,6 +101,7 @@ ${op_name} # 替换为实际算子名的小写下 | |||
| 101 | Tiling一共需要三个交付件:```${op_name}_tiling.cpp``` ```${op_name}_tiling_key.h``` ```${op_name}_tiling_data.h``` | 101 | Tiling一共需要三个交付件:```${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 | |||
| 240 | Kernel一共需要两个交付件:```${op_name}.cpp``` ```${op_name}.h``` | 242 | Kernel一共需要两个交付件:```${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 | ```bash | 387 | ```bash |
| 385 | # 编译指定算子,如bash build.sh --pkg --ops=add_example | 388 | # 编译指定算子,如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_mul | 54 | # 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 | ||
| 29 | 1. 计算$A_{max}$: | 29 | 1. 计算$A_{max}$: |
| 30 | 30 | ||
| 31 | -$$A_{max} = rowMax(|A_{group}|)$$ | 31 | + $$ A_{max} = rowMax(|A_{group}|)$$ |
| 32 | 32 | ||
| 33 | 2. 计算$tmp_{1}$: | 33 | 2. 计算$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 | ```Cpp | 313 | ```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&aclnnInplaceIndexFill | 1 | # 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 | ```Cpp | 586 | ```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 | ```Cpp | 259 | ```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 | ```cpp | 38 | ```cpp |
| 37 | aclnnStatus aclnnAddbmmGetWorkspaceSize( | 39 | aclnnStatus 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 | ```cpp | 51 | ```cpp |
| 49 | aclnnStatus aclnnAddbmm( | 52 | aclnnStatus 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 | ```cpp | 71 | ```cpp |
| 68 | aclnnStatus aclnnInplaceAddbmm( | 72 | aclnnStatus 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 | ```Cpp | 533 | ```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 | ```cpp | 29 | ```cpp |
| 30 | aclnnStatus aclnnBatchMatmulQuantGetWorkspaceSize( | 30 | aclnnStatus 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 | ```cpp | 42 | ```cpp |
| 42 | aclnnStatus aclnnBatchMatmulQuant( | 43 | aclnnStatus 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 | ```Cpp | 267 | ```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++ |
| 73 | aclnnStatus aclnnFusedQuantMatmul( | 75 | aclnnStatus 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 | ||
| 228 | 1. 准备压缩前的数据 | 228 | 1. 准备压缩前的数据 |
| 229 | 229 | ||
| 230 | -假设通过脚本gen_data.py生成输入数据,示例如下,仅供参考: | 230 | + 假设通过脚本gen_data.py生成输入数据,示例如下,仅供参考: |
| 231 | 231 | ||
| 232 | -```python | 232 | + ```python |
| 233 | -import numpy as np | 233 | + import numpy as np |
| 234 | -import os | 234 | + import os |
| 235 | -import sys | 235 | + import sys |
| 236 | -from numpy import random | 236 | + 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 | -# 生成output | 268 | + # 生成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 | -# 生成bias | 272 | + # 生成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 | -```shell | 277 | + 执行gen_data.py,假设mat1和mat2的shape入参为m=512、k=1024、n=1024。 |
| 279 | -python3 gen_data.py 512 1024 1024 | 278 | + |
| 280 | -``` | 279 | + ```shell |
| 280 | + python3 gen_data.py 512 1024 1024 | ||
| 281 | + ``` | ||
| 281 | 282 | ||
| 282 | 2. 对数据进行预处理 | 283 | 2. 对数据进行预处理 |
| 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 | -```python | 288 | + ```python |
| 288 | -from msmodelslim.pytorch.weight_compression import CompressConfig, Compressor | 289 | + 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接口的x2 | 295 | + # 压缩后的权重,对应aclnnMatmulCompressGetWorkspaceSize接口的x2 |
| 295 | -compressor.export(compress_weight, './data/weight') | 296 | + compressor.export(compress_weight, './data/weight') |
| 296 | -# 压缩权重的索引,对应aclnnMatmulCompressGetWorkspaceSize接口的compressIndex | 297 | + # 压缩权重的索引,对应aclnnMatmulCompressGetWorkspaceSize接口的compressIndex |
| 297 | -compressor.export(compress_index, './data/index') | 298 | + compressor.export(compress_index, './data/index') |
| 298 | -``` | 299 | + ``` |
| 299 | 300 | ||
| 300 | 3. 调用aclnn接口运算 | 301 | 3. 调用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 | ```Cpp | 249 | ```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 | # TransposeBatchMatMul | 1 | # 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 | # AdamApplyOne | 1 | # AdamApplyOne |
| 2 | 2 | ||
| 3 | -## 产品支持情况 | 3 | +## 产品支持情况 |
| 4 | 4 | ||
| 5 | |产品 | 是否支持 | | 5 | |产品 | 是否支持 | |
| 6 | |:-------------------------|:----------:| | 6 | |:-------------------------|:----------:| |
| @@ -1,8 +1,8 @@ | |||
| 1 | - # AdamApplyOneWithDecay | 1 | +# 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 | # AdaptiveAvgPool3dGrad | 1 | # AdaptiveAvgPool3dGrad |
| 2 | 2 | ||
| 3 | -## 产品支持情况 | 3 | +## 产品支持情况 |
| 4 | 4 | ||
| 5 | | 产品 | 是否支持 | | 5 | | 产品 | 是否支持 | |
| 6 | | ---- | :----:| | 6 | | ---- | :----:| |
| @@ -105,6 +105,7 @@ | |||
| 105 | ## 约束说明 | 105 | ## 约束说明 |
| 106 | 106 | ||
| 107 | Shape描述: | 107 | Shape描述: |
| 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 | # AvgPool3DGrad | 1 | # AvgPool3DGrad |
| 2 | 2 | ||
| 3 | -## 产品支持情况 | 3 | +## 产品支持情况 |
| 4 | 4 | ||
| 5 | | 产品 | 是否支持 | | 5 | | 产品 | 是否支持 | |
| 6 | | ---- | :----:| | 6 | | ---- | :----:| |
| @@ -1,6 +1,6 @@ | |||
| 1 | # MaxPool3DWithArgmaxV2 | 1 | # 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 | ```Cpp | 40 | ```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 | ```Cpp | 54 | ```Cpp |
| 53 | aclnnStatus aclnnMaxPool2dWithIndices( | 55 | aclnnStatus 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 | ## aclnnMaxPool2dWithIndicesGetWorkspaceSize | 62 | ## 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 | ## aclnnMaxPool2dWithIndices | 260 | ## 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 | ```Cpp | 315 | ```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 | ```Cpp | 45 | ```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 | ```Cpp | 59 | ```Cpp |
| 58 | aclnnStatus aclnnMaxPool2dWithMask( | 60 | aclnnStatus 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 | ## aclnnMaxPool2dWithMaskGetWorkspaceSize | 67 | ## 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 | ```Cpp | 332 | ```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 | ```Cpp | 64 | ```Cpp |
| 64 | aclnnStatus aclnnMaxPool3dWithArgmax( | 65 | aclnnStatus 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 | ## aclnnMaxPool3dWithArgmaxGetWorkspaceSize | 72 | ## 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 | # MaxPoolGradWithArgmaxV3 | 1 | # 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 | ## aclnnModulate | 166 | ## 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 | ```Cpp | 39 | ```Cpp |
| 39 | aclnnStatus aclnnScaledMaskedSoftmaxBackward( | 40 | aclnnStatus 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> |