diff --git "a/docs/zh/PyTorch\347\256\227\345\255\220\345\274\200\345\217\221\346\214\207\345\215\227/PyTorch\347\256\227\345\255\220\345\274\200\345\217\221\346\214\207\345\215\227.md" "b/docs/zh/PyTorch\347\256\227\345\255\220\345\274\200\345\217\221\346\214\207\345\215\227/PyTorch\347\256\227\345\255\220\345\274\200\345\217\221\346\214\207\345\215\227.md" index 50013c7b352a4d663c148a30379142d98be5b81e..32e95bc3714e23a93167f53da6e976936c743d41 100644 --- "a/docs/zh/PyTorch\347\256\227\345\255\220\345\274\200\345\217\221\346\214\207\345\215\227/PyTorch\347\256\227\345\255\220\345\274\200\345\217\221\346\214\207\345\215\227.md" +++ "b/docs/zh/PyTorch\347\256\227\345\255\220\345\274\200\345\217\221\346\214\207\345\215\227/PyTorch\347\256\227\345\255\220\345\274\200\345\217\221\346\214\207\345\215\227.md" @@ -8,36 +8,37 @@ - [前提条件](#前提条件.md) - [获取PyTorch源码](#获取PyTorch源码.md) - [注册算子开发](#注册算子开发.md) - - [算子适配开发](#算子适配开发-0.md) - - [编译安装PyTorch框架](#编译安装PyTorch框架.md) + - [算子适配插件开发](#算子适配插件开发.md) + - [编译和安装PyTorch框架](#编译和安装PyTorch框架.md) - [算子功能验证](#算子功能验证.md) - [概述](#概述.md) - [实现过程](#实现过程.md) - [FAQ](#FAQ.md) - - [Pillow==5.3.0安装失败](#Pillow==5.3.0安装失败.md) - - [pip3.7 install torchvision安装失败](#pip3.7 install torchvision安装失败.md) - - [安装“torch-\*.whl ”提示“torch 1.5.0xxxx”与“torchvision”所依赖的版本不匹配](#安装torch-\*.whl提示torch 1.5.0xxxx与torchvision所依赖的版本不匹配.md) - - [执行算子功能验证用例,结果成功,但会报一个错误“THPModule\_npu\_shutdown failed.”](#执行算子功能验证用例,结果成功,但会报一个错误THPModule\_npu\_shutdown failed.md) + - [Pillow==5.3.0安装失败](#Pillow-5-3-0安装失败.md) + - [pip3.7 install torchvision安装失败](#pip3-7-install-torchvision安装失败.md) + - [安装“torch-\*.whl ”提示“torch 1.5.0xxxx”与“torchvision”所依赖的版本不匹配](#安装-torch--whl-提示-torch-1-5-0xxxx-与-torchvision-所依赖的版本不匹配.md) - [如何查看测试的运行日志](#如何查看测试的运行日志.md) - - [测试运行输出的NPU错误码是什么意思,有无对应的含义解释?](#测试运行输出的NPU错误码是什么意思,有无对应的含义解释?.md) - - [为什么我实现的“自定义TBE算子”无法调用到?](#为什么我实现的自定义TBE算子无法调用到?.md) - - [如何确定“TBE算子”是否被“PyTorch适配”正确调用?](#如何确定TBE算子是否被PyTorch适配正确调用?.md) - - [PyTorch编译失败,提示“error: ld returned 1 exit status”](#PyTorch编译失败,提示error: ld returned 1 exit status.md) - - [PyTorch编译失败,提示“error: call of overload ....”](#PyTorch编译失败,提示error: call of overload.md) + - [测试运行输出的NPU错误码是什么意思,有无对应的含义解释?](#测试运行输出的NPU错误码是什么意思-有无对应的含义解释.md) + - [为什么我实现的“自定义TBE算子”无法调用到?](#为什么我实现的-自定义TBE算子-无法调用到.md) + - [如何确定“TBE算子”是否被“PyTorch适配”正确调用](#如何确定-TBE算子-是否被-PyTorch适配-正确调用.md) + - [PyTorch编译失败,提示“error: ld returned 1 exit status”](#PyTorch编译失败-提示-error-ld-returned-1-exit-status.md) + - [PyTorch编译失败,提示“error: call of overload ....”](#PyTorch编译失败-提示-error-call-of-overload.md) - [附录](#附录.md) - [CMake安装方法](#CMake安装方法.md) - [自定义算子导出方法](#自定义算子导出方法.md) -## 简介 +

简介

-用户通过完成TBE自定义算子适配PyTorch框架,实现PyTorch框架中算子在昇腾AI处理器上运行。 +## 概述 -## 算子开发流程 +为了实现PyTorch深度学习框架在昇腾AI处理器上运行,需要将框架算子用TBE自定义开发。用户通过完成TBE自定义算子适配PyTorch框架,实现PyTorch框架中算子在昇腾AI处理器上运行。 + +

算子开发流程

Pytorch算子开发包含TBE算子开发和PyTorch框架下的算子适配。 1. TBE算子开发:昇腾AI软件栈中不包含相应的算子,需要先完成TBE算子的开发,再进行PyTorch框架下的算子适配。 - TBE算子开发流程及方法请参见《[CANN TBE自定义算子开发指南](https://support.huawei.com/enterprise/zh/doc/EDOC1100191916)》。 + TBE算子开发流程及方法请参见《CANN TBE自定义算子开发指南》。 2. PyTorch框架下的算子适配:昇腾AI软件栈中已实现了相应的TBE算子,可直接进行PyTorch框架适配。 @@ -46,45 +47,111 @@ Pytorch算子开发包含TBE算子开发和PyTorch框架下的算子适配。 **图 1** PyTorch框架下的算子适配流程 ![](figures/PyTorch框架下的算子适配流程.png "PyTorch框架下的算子适配流程") -**表 1** 算子开发步骤详解 -| 序号 | 步骤 | 描述 | 参考 | -| ---- | ------------------- | ------------------------------------------------------------ | -------------------------------- | -| 1 | 环境准备 | 准备算子开发及运行验证所依赖的开发环境与运行环境。 | [算子开发准备](#算子开发准备.md) | -| 2 | 算子速查 | 查看TBE算子支持列表和PyTorch算子适配列表。当前昇腾AI处理器支持的算子列表及支持的算子的详细规格约束;当前PyTorch适配的算子列表。 | [算子开发准备](#算子开发准备.md) | -| 3 | 获取PyTorch源码 | 获取昇腾社区PyTorch源码。 | [算子适配开发](#算子适配开发.md) | -| 4 | 注册算子开发 | 将算子分发到昇腾AI处理器。 | [算子适配开发](#算子适配开发.md) | -| 5 | 算子适配层开发 | 算子适配层开发,将基于第三方框架的算子属性映射成适配昇腾AI处理器的算子属性。 | [算子适配开发](#算子适配开发.md) | -| 6 | 编译安装PyTorch框架 | 编译适配开发后的Pytorch源码,并安装编译的源码包。 | [算子适配开发](#算子适配开发.md) | -| 7 | 算子验证 | 在真实的硬件环境中验证算子功能。 | [算子功能验证](#算子功能验证.md) | +**表 1** 算子开发步骤详解 -## 算子开发准备 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

序号

+

步骤

+

描述

+

参考

+

1

+

环境准备

+

准备算子开发及运行验证所依赖的开发环境与运行环境。

+

算子开发准备

+

2

+

算子速查

+

查看TBE算子支持列表和PyTorch算子适配列表。

+
  • 当前昇腾AI处理器支持的算子列表及支持的算子的详细规格约束。
  • 当前PyTorch适配的算子列表。
+

3

+

获取PyTorch源码

+

获取昇腾社区PyTorch源码。

+

算子适配开发

+

4

+

注册算子开发

+

将算子分发到昇腾AI处理器。

+

5

+

算子适配层开发

+

算子适配层开发,将基于第三方框架的算子属性映射成适配昇腾AI处理器的算子属性。

+

6

+

编译安装PyTorch框架

+

编译适配开发后的PyTorch源码,并安装编译的源码包。

+

7

+

算子功能验证

+

在真实的硬件环境中验证算子功能。

+

算子功能验证

+
+ +

算子开发准备

- **[环境准备](#环境准备.md)** - **[算子速查](#算子速查.md)** -### 环境准备 -**前提条件** +

环境准备

-- 已完成CANN开发或运行环境的安装,具体操作请参考《[CANN 软件安装指南](https://support.huawei.com/enterprise/zh/ascend-computing/cann-pid-251168373)》。 -- 需安装3.12.0以上版本的CMake,安装方法请参考[CMake安装方法](#CMake安装方法.md)。 -- 需确保已安装7.3.0以上版本的gcc,7.3.0版本gcc具体安装及使用方式请参见《[CANN 软件安装指南](https://support.huawei.com/enterprise/zh/ascend-computing/cann-pid-251168373)》中的“安装7.3.0版本gcc”章节。 +## 前提条件 + +- 需完成CANN开发或运行环境的安装,具体操作请参考《CANN 软件安装指南》。 +- 需安装3.12.0及以上版本的CMake,安装方法请参考[CMake安装方法](#CMake安装方法.md)。 +- 需确保已安装7.3.0以上版本的gcc,7.3.0版本gcc具体安装及使用方式请参见《CANN 软件安装指南》中的“安装7.3.0版本gcc”章节。 - 需确保环境中已安装git工具,以Ubuntu和CentOS系统为例,命令如下: - Ubuntu系统 - **apt-get install git** + ``` + apt-get install git + ``` - CentOS系统 - **yum install git** + ``` + yum install git + ``` -**安装PyTorch依赖环境** +## 安装PyTorch依赖环境 -如果使用非root用户安装Python及其依赖,用户需要在每句命令结尾加上**--user**,保证安装的正常进行。命令示例为:**pip3.7 install pyyaml --user** +如果使用非root用户安装Python及其依赖,用户需要在每句命令末尾加上**--user**,保证安装的正常进行。命令示例为:**pip3.7 install pyyaml --user** ``` pip3.7 install pyyaml @@ -95,38 +162,46 @@ pip3.7 install Pillow==5.3.0 >![](public_sys-resources/icon-note.gif) **说明:** >若以上过程出错,请参考[FAQ](#FAQ.md)尝试解决问题。 -### 算子速查 +

算子速查

进行算子开发时,您可以查询当前昇腾AI处理器中支持的算子列表和当前PyTorch适配的算子列表。根据查询结果进行算子开发或PyTorch算子适配。 +- 若昇腾AI处理器不支持算子,则需要进行TBE算子开发和PyTorch框架算子适配。 +- 若昇腾AI处理器支持算子但PyTorch框架没有算子适配,仅需要进行PyTorch框架下算子适配。 +- 若PyTorch框架已经适配算子,直接使用算子即可,不需要开发和适配。 + +昇腾AI处理器和PyTorch适配的算子查询方式如下。 + - 当前昇腾AI处理器中支持的算子以及对应的算子约束可以通过以下两种方式查询。 - - 命令行开发方式下,您可以参见《[CANN 算子清单 \(Ascend 910\)](https://support.huawei.com/enterprise/zh/doc/EDOC1100191920)》进行离线查询。 - - MindStudio开发方式下,您可以通过MindStudio进行在线查询,详细查看方法可参见《[MindStudio 用户指南](https://support.huaweicloud.com/mindstudio301/index.html)》中的“算子&模型速查”章节。 -- 当前PyTorch适配的算子列表可以参见《[PyTorch适配算子清单](https://support.huawei.com/enterprise/zh/doc/EDOC1100191773)》 + - 命令行开发方式下,您可以参见《CANN 算子清单 \(Ascend 910\)》进行离线查询。 + - MindStudio开发方式下,您可以通过MindStudio进行在线查询,详细查看方法可参见《MindStudio 用户指南》中的“算子&模型速查”章节。 + +- 当前PyTorch适配的算子列表可以参见《PyTorch适配算子清单》。 -## 算子适配开发 +

算子适配开发

-- **[前提条件](#前提条件.md)** +- **[前提条件](#前提条件.md)** -- **[获取PyTorch源码](#获取PyTorch源码.md)** +- **[获取PyTorch源码](#获取PyTorch源码.md)** -- **[注册算子开发](#注册算子开发.md)** +- **[注册算子开发](#注册算子开发.md)** -- **[算子适配开发](#算子适配开发-0.md)** +- **[算子适配插件开发](#算子适配插件开发.md)** -- **[编译安装PyTorch框架](#编译安装PyTorch框架.md)** +- **[编译和安装PyTorch框架](#编译和安装PyTorch框架.md)** -### 前提条件 -1. 完成开发及运行环境准备及相关依赖的安装,详情请参见[环境准备](#环境准备.md)。 -2. 完成相关的TBE算子开发及部署,详情请参见《[CANN TBE自定义算子开发指南](https://support.huawei.com/enterprise/zh/doc/EDOC1100191916)》。 +

前提条件

-### 获取PyTorch源码 +- 完成开发及运行环境准备及相关依赖的安装,详情请参见[环境准备](#环境准备.md)。 +- 完成相关的TBE算子开发及部署,详情请参见《CANN TBE自定义算子开发指南》。 -从gitee上获取适配昇腾AI处理器的PyTorch源代码,获取地址为:[https://gitee.com/ascend/pytorch](https://gitee.com/ascend/pytorch) 。用户可以通过执行下面git命令行下载源代码。 +

获取PyTorch源码

+ +从gitee上获取适配昇腾AI处理器的PyTorch源代码,获取地址为: [https://gitee.com/ascend/pytorch-develop](https://gitee.com/ascend/pytorch-develop) 。用户可以通过执行下面git命令行下载源代码。 ``` -git clone https://gitee.com/ascend/pytorch.git --deepth=1 +git clone https://gitee.com/ascend/pytorch-develop.git --deepth=1 ``` 下载成功后,得到pytorch文件目录。 @@ -134,13 +209,13 @@ git clone https://gitee.com/ascend/pytorch.git --deepth=1 >![](public_sys-resources/icon-note.gif) **说明:** >如无权限获取代码,请联系华为技术支持申请加入“Ascend”组织。 -### 注册算子开发 +

注册算子开发

-#### 概述 +## 概述 当前制定的NPU适配派发原则是NPU算子的派发不经过框架公共函数,直接派发成NPU适配的函数,即算子执行调用栈中只包含NPU适配的函数调用,不包含框架公共函数。PyTorch框架在编译时,会根据 native\_functions.yaml 的定义,按框架中定义的类型和设备分发原则,生成相应的新算子的中间层的调用说明。对于NPU,会生成在 build/aten/src/ATen/NPUType.cpp。 -#### 注册算子开发方法 +## 注册算子开发方法 1. 打开native\_functions.yaml文件。 @@ -186,12 +261,12 @@ git clone https://gitee.com/ascend/pytorch.git --deepth=1 >该格式供参考,算子适配开发过程中的函数名需与NPU\_Adapt\_Fun\_Name保持一致。 -#### 示例 +## 示例 以torch.add\(\)算子为例介绍注册算子开发过程。 1. 打开native\_functions.yaml文件。 -2. 确定相关函数 +2. 确定相关函数。 在yaml中搜索add,找到与add算子相关的函数。 @@ -270,19 +345,21 @@ git clone https://gitee.com/ascend/pytorch.git --deepth=1 supports_named_tensor: True ``` -### 算子适配开发 -#### 简介 + +

算子适配插件开发

+ +## 简介 用户通过开发算子适配插件,实现PyTorch原生算子的输入参数、输出参数和属性的格式转换,使转换后的格式与TBE算子的输入参数、输出参数和属性的格式相同。适配昇腾AI处理器的PyTorch源代码中提供了适配关联、类型转换和判别、处理动态shape等相关的方法供用户使用。 -#### 适配插件实现 +## 适配插件实现 -1. 创建适配插件文件 +1. 创建适配插件文件。 NPU TBE算子适配文件保存在pytorch/aten/src/ATen/native/npu目录下,命名风格采用大驼峰,命名格式:<算子名\> + .cpp,如:AddKernelNpu.cpp。 -2. 引入依赖头文件 +2. 引入依赖头文件。 适配昇腾AI处理器的PyTorch源代码在ATen/native/npu/utils中提供适配常用的工具供用户使用。 @@ -291,22 +368,22 @@ git clone https://gitee.com/ascend/pytorch.git --deepth=1 3. 定义算子适配主体函数。 - 根据注册算子开发中的分发函数确定自定义算子适配主题函数。 + 根据注册算子开发中的分发函数确定自定义算子适配主体函数。 4. 分别实现适配主体函数。 实现算子适配主题函数,根据TBE算子原型构造得到对应的input、output、attr。 -#### 示例 +## 示例 以torch.add\(\)算子为例介绍算子适配开发过程。 -1. 创建适配插件文件 +1. 创建适配插件文件。 - 在pytorch/aten/src/ATen/native/npu目录下创建AddKernelNpu.cpp适配文件 + 在pytorch/aten/src/ATen/native/npu目录下创建AddKernelNpu.cpp适配文件。 -2. 引入依赖头文件 +2. 引入依赖头文件。 ``` #include @@ -315,7 +392,6 @@ git clone https://gitee.com/ascend/pytorch.git --deepth=1 ``` >![](public_sys-resources/icon-note.gif) **说明:** - >" OptionsManager.h"中主要包含类型动态shape相关的函数。 >" CalcuOpUtil.h "中主要包含类型转换和判别的函数。 >" OpAdapter.h"文件中主要包含适配关联的头文件。 @@ -456,9 +532,9 @@ git clone https://gitee.com/ascend/pytorch.git --deepth=1 >![](public_sys-resources/icon-note.gif) **说明:** >AddKernelNpu.cpp的详细实现代码请参见pytorch/aten/src/ATen/native/npu/AddKernelNpu.cpp文档。 -### 编译安装PyTorch框架 +

编译和安装PyTorch框架

-#### 编译PyTorch框架 +## 编译PyTorch框架 1. 进入PyTorch工作目录 :“pytorch“。 2. 给脚本文件赋权限: @@ -469,75 +545,72 @@ git clone https://gitee.com/ascend/pytorch.git --deepth=1 **./build.sh** -4. 编译成功后,会在“**pytorch/dist**” 下会生成 torch-\*.whl 包,例如:torch-1.5.0a0-cp37-cp37m-linux\_x86.whl + >![](public_sys-resources/icon-note.gif) **说明:** + >首次编译持续的时间较长,可能超过30分钟,建议:若无必要,无需执行"make clean"。 ->![](public_sys-resources/icon-note.gif) **说明:** ->首次编译持续的时间较长,可能超过30分钟,建议:若无必要,无需执行"make clean"。 +4. 编译成功后,会在“**pytorch/dist**” 下生成 torch-\*.whl 包,例如:torch-1.5.0a0-cp37-cp37m-linux\_x86.whl。 -#### 安装PyTorch框架 +## 安装PyTorch框架 -1. 将[编译安装PyTorch框架](#编译安装PyTorch框架.md)生成的torch-\*.whl包上传到服务器任一路径。 +1. 将[编译和安装PyTorch框架](#编译和安装PyTorch框架.md)生成的torch-\*.whl包上传到服务器任一路径。 2. 进入torch-\*.whl 所在的目录,使用pip命令完成torch安装。 当前登录用户为root用户时,执行: ``` - pip3.7.5 install torch-*.whl + pip3.7 install torch-*.whl ``` 当前登录用户为非root用户时,执行: ``` - pip3.7.5 install torch-*.whl --user + pip3.7 install torch-*.whl --user ``` >![](public_sys-resources/icon-note.gif) **说明:** ->1. 修改代码之后,需要重新执行“编译”和“安装”PyTorch过程。 ->2. 安装过程中,可能会出现错误提示"torchvision 0.6.0" 版本不匹配,此问题无影响,忽略即可。 +>- 修改代码之后,需要重新执行“编译”和“安装”PyTorch过程。 +>- 安装过程中,可能会出现错误提示"torchvision 0.6.0" 版本不匹配,此问题无影响,忽略即可。 -## 算子功能验证 +

算子功能验证

- **[概述](#概述.md)** - **[实现过程](#实现过程.md)** -### 概述 -#### 简介 +

概述

+ +## 简介 完成算子适配开发后,可通过运行适配昇腾处理器的PyTorch算子,验证算子运行结果是否正确。 算子功能验证会覆盖算子开发的所有交付件,包含实现文件,算子原型定义、算子信息库以及算子适配插件。本节仅对验证的方法做介绍。 -#### 测试用例及测试工具 +## 测试用例及测试工具 进行自定义算子功能验证,通过PyTorch前端构造自定义算子的函数并运行验证。 -在https://gitee.com/ascend/pytorch中 "pytorch/test/test\_npu/test\_network\_ops"目录下提供了测试用例及测试工具,供用户参考。 +在https://gitee.com/ascend/pytorch-develop中 "pytorch/test/test\_npu/test\_network\_ops"目录下提供了测试用例及测试工具,供用户参考。 -### 实现过程 +

实现过程

-#### 简介 +## 简介 本章通过具体例子,完成PyTorch算子的功能测试步骤。 -#### 操作步骤 +## 操作步骤 1. 设置环境变量。 ``` - export install_path=/home/HwHiAiUser/Ascend/ascend-toolkit/latest - export PATH={install_path}/fwkacllib/ccec_compiler/bin:{install_path}/fwkacllib/bin:{install_path}/toolkit/bin:$PATH - export LD_LIBRARY_PATH={install_path}/fwkacllib/lib64:$LD_LIBRARY_PATH - export PYTHONPATH={install_path}/fwkacllib/python/site-packages:{install_path}/toolkit/python/site-packages:$PYTHONPATH - export ASCEND_OPP_PATH={install_path}/opp/ - export ASCEND_AICPU_PATH={install_path}/x86_64-linux/ + # 进行环境变量设置。具体如下(以HwHiAiUser用户安装,安装路径为默认路径为例): + . /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh ``` install\_path请修改为Toolkit的实际安装路径。 -2. 编写测试脚本。以add算子为例,在“pytorch/test/test\_npu/test\_network\_ops“路径下编写测试脚本文件: testcase\_add.py。 +2. 编写测试脚本。以add算子为例,在“pytorch/test/test\_npu/test\_network\_ops“路径下编写测试脚本文件: test\_add.py。 以下示例仅为一个简单的用例实现供用户参考,具体测试用例的实现,需要根据算子定义进行完整的覆盖才能保证功能的基本正确。 @@ -596,113 +669,93 @@ git clone https://gitee.com/ascend/pytorch.git --deepth=1 3. 执行测试用例脚本 - 进入add\_testcase.py所在的目录,执行: + 进入test\_add.py所在的目录,执行: ``` - python3.7.5 testcase_add.py + python3.7 test_add.py ``` -## FAQ -- **[Pillow==5.3.0安装失败](#Pillow==5.3.0安装失败.md)** +

FAQ

-- **[pip3.7 install torchvision安装失败](#pip3.7 install torchvision安装失败.md)** +- **[Pillow==5.3.0安装失败](#Pillow-5-3-0安装失败.md)** -- **[安装“torch-\*.whl ”提示“torch 1.5.0xxxx”与“torchvision”所依赖的版本不匹配](#安装torch-\*.whl提示torch 1.5.0xxxx与torchvision所依赖的版本不匹配.md)** +- **[pip3.7 install torchvision安装失败](#pip3-7-install-torchvision安装失败.md)** -- **[执行算子功能验证用例,结果成功,但会报一个错误“THPModule\_npu\_shutdown failed.”](#执行算子功能验证用例,结果成功,但会报一个错误THPModule\_npu\_shutdown failed.md)** +- **[安装“torch-\*.whl ”提示“torch 1.5.0xxxx”与“torchvision”所依赖的版本不匹配](#安装-torch--whl-提示-torch-1-5-0xxxx-与-torchvision-所依赖的版本不匹配.md)** - **[如何查看测试的运行日志](#如何查看测试的运行日志.md)** -- **[测试运行输出的NPU错误码是什么意思,有无对应的含义解释?](#测试运行输出的NPU错误码是什么意思,有无对应的含义解释?.md)** +- **[测试运行输出的NPU错误码是什么意思,有无对应的含义解释?](#测试运行输出的NPU错误码是什么意思-有无对应的含义解释.md)** -- **[为什么我实现的“自定义TBE算子”无法调用到?](#为什么我实现的自定义TBE算子无法调用到?.md)** +- **[为什么我实现的“自定义TBE算子”无法调用到?](#为什么我实现的-自定义TBE算子-无法调用到.md)** -- **[如何确定“TBE算子”是否被“PyTorch适配”正确调用?](#如何确定TBE算子是否被PyTorch适配正确调用?.md)** +- **[如何确定“TBE算子”是否被“PyTorch适配”正确调用](#如何确定-TBE算子-是否被-PyTorch适配-正确调用.md)** -- **[PyTorch编译失败,提示“error: ld returned 1 exit status”](#PyTorch编译失败,提示error: ld returned 1 exit status.md)** +- **[PyTorch编译失败,提示“error: ld returned 1 exit status”](#PyTorch编译失败-提示-error-ld-returned-1-exit-status.md)** -- **[PyTorch编译失败,提示“error: call of overload ....”](#PyTorch编译失败,提示error: call of overload.md)** +- **[PyTorch编译失败,提示“error: call of overload ....”](#PyTorch编译失败-提示-error-call-of-overload.md)** -### Pillow==5.3.0安装失败 -**现象描述** +

Pillow==5.3.0安装失败

+ +## 现象描述 pillow==5.3.0安装失败。 -**可能原因** +## 可能原因 缺少必要的依赖,如:libjpeg、python-devel、 zlib-devel 、libjpeg-turbo-devel等等。 -**处理方法** +## 处理方法 -apt-get install libjpeg python-devel zlib-devel libjpeg-turbo-devel。 +执行以下命令安装所需依赖。 -### pip3.7 install torchvision安装失败 +``` +apt-get install libjpeg python-devel zlib-devel libjpeg-turbo-devel +``` -**现象描述** +

pip3.7 install torchvision安装失败

+ +## 现象描述 pip3.7 install torchvision安装失败。 -**可能原因** +## 可能原因 torch与torchvision版本不匹配。 -**处理方法** +## 处理方法 + +执行以下命令。 +``` pip3.7 install torchvision --no-deps +``` -### 安装“torch-\*.whl ”提示“torch 1.5.0xxxx”与“torchvision”所依赖的版本不匹配 +

安装“torch-\*.whl ”提示“torch 1.5.0xxxx”与“torchvision”所依赖的版本不匹配

-**现象描述** +## 现象描述 安装“torch-\*.whl”时,提示"ERROR:torchvision 0.6.0 has requirement torch==1.5.0, but you'll have torch 1.5.0a0+1977093 which is incompatible"。 ![](figures/zh-cn_image_0000001172886189.png) -但实际安装成功。 +但实际安装成功 -**可能原因** +## 可能原因 安装torch时,会自动触发torchvision进行依赖版本检查,环境中安装的torchvision版本为0.6.0,检查时发现我们安装的torch-\*.whl的版本号与要求的1.5.0不一致,所以提示了一条错误 。 -**处理方法** +## 处理方法 对实际结果无影响,无需处理。 -### 执行算子功能验证用例,结果成功,但会报一个错误“THPModule\_npu\_shutdown failed.” - -**现象描述** - -执行算子功能验证用例,结果成功,但会报一个错误“THPModule\_npu\_shutdown failed.”。 - -![](figures/zh-cn_image_0000001173046107.png) - -**可能原因** - -可能是框架影响,待进一步定位 。 - -**处理方法** - -对实际结果无影响,无需处理,忽略此问题。 - -### 如何查看测试的运行日志 +

如何查看测试的运行日志

测试运行过程提示错误,但直接可参考的信息太少,如何才能看到更详细的运行日志? -方式一:直接查看运行日志 - -1. 进入 "/var/log/npu"目录 - - 在此目录下,对于算子功能测试运行,主要的涉及日志路径为“oplog”和“slog”,建议优先查看“oplog”中的日志,这里记录了算子运行过程中的关键信息;slog下的日志记录系统的运行过程及异常信息,具体日志信息内容,参考[日志文件](https://support.huaweicloud.com/lr-A800_9000_9010/atlaslog_24_0003.html)描述。 - -2. 进入对应的日志目录,使用vi等工具打开最新的日志文件,进行日志查看。 - - >![](public_sys-resources/icon-note.gif) **说明:** - >以“/var/log/npu/oplog”为例,"vi oplog.log",可以查看到很多日志信息。但由于可能存在很多开发者同时操作设备进行测试,所有会包含其他开发者的运行日志信息,需要开发者通过“时间”等信息,识别出相关的日志。建议使用“方式二” - - -方式二:设置日志输出到屏幕,重定向到指定文本文件 +设置日志输出到屏幕,重定向到指定文本文件 1. 设置环境变量,将当前用户的日志到屏幕。 @@ -712,76 +765,72 @@ pip3.7 install torchvision --no-deps 设置完成后,直接运行测试用例,就可以将相关的日志输出到屏幕,为了方便查看和回溯,建议根据需要使用[2](#zh-cn_topic_0000001125315889_li168732325719)运行。 -2. 运行测试用例时,将日志重定向到指定文件。 +2. 运行测试用例时,将日志重定向到指定文件。 ``` - python3.7.5 add_testcase.py > test_log.txt + python3.7 test_add.py > test_log.txt ``` -### 测试运行输出的NPU错误码是什么意思,有无对应的含义解释? + +

测试运行输出的NPU错误码是什么意思,有无对应的含义解释?

参考“[错误码定义](https://support.huaweicloud.com/adevg-A300_3000_3010/atlasdevelopment_01_0256.html)”。 -### 为什么我实现的“自定义TBE算子”无法调用到? +

为什么我实现的“自定义TBE算子”无法调用到?

-**现象描述** +## 现象描述 完成“自定义TBE算子”开发,和“PyTorch”适配开发,但执行测试用例,发现无法调用到新开发的算子。 -**可能原因** +## 可能原因 -1. 环境变量没有正确设置; -2. yaml存在错误,导致没有正确分发; -3. 自定义TBE算子实现存在问题,导致无法调用到。 +- 环境变量没有正确设置。 +- yaml存在错误,导致没有正确分发。 +- 自定义TBE算子实现存在问题,导致无法调用到。 -**处理方法** +## 处理方法 1. 参考“[算子功能验证](#算子功能验证.md)”章节,完成运行环境设置,特别注意: ``` - export ASCEND_OPP_PATH=~/.local/Ascend/opp - export CUSTOM_OP_LIB_PATH=~/.local/Ascend/opp/framework/custom/tensorflow + . /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh ``` 2. 检查yaml文件中对应算子的分发配置,是否正确的完整分发; 3. 分析排查代码实现,建议手段: - 1. 修改"pytorch"中的算子适配实现,让"add\_testcase.py"可以调用到“自定义算子包”中的TBE算子; + 1. 修改"pytorch"中的算子适配实现,让“test\_add.py”可以调用到“自定义算子包”中的TBE算子; "pytorch/aten/src/ATen/native/npu/AddKernelNpu.cpp" ![](figures/zh-cn_image_0000001126846510.png) - 2. 修改"cann"中的"add"算子实现\(建议此时不要包含新开发的“自定义TBE算子”,方便对比\),在算子入口增加日志打印,作为运行标识; - - "cann/ops/contrib/ops/custom/tbe/impl/add.py" - - 3. 完成上两步的编译、安装,调用"python3.7.5 add\_testcase.py"进行测试; + 2. 完成上两步的编译、安装,调用“python3.7 test\_add.py”进行测试。 ``` - cd 至"add_testcase.py" 所在路径,调用 - add_testcase.py + cd 至"test_add.py" 所在路径,调用 + test_add.py 进行测试 ``` 至此步骤,不应该有错误,屏幕应该输出 "add" 中增加的日志打印。若出错,请完成代码清理排查,保证无新开发的代码影响测试。 - 4. 将新开发的“自定义TBE算子”合并到"cann"中,在对应的在算子入口增加日志打印,作为运行标识; - 5. 完成上面的"cann"编译、安装,调用"python3.7.5 add\_testcase.py"进行测试; + 3. 将新开发的“自定义TBE算子”合并到"cann"中,在对应的在算子入口增加日志打印,作为运行标识。 + 4. 完成上面的"cann"编译、安装,调用“python3.7.5 test\_add.py”进行测试。 >![](public_sys-resources/icon-note.gif) **说明:** - >1、背景知识:根据Ascend的设计逻辑,用户开发安装的“custom”算子包优先级高于“built-in”的内置算子包,在运行加载时,会优先加载调度“custom”包中的算子。过程中,若解析“custom”中的算子信息文件失败,则会跳过“custom”算子包,不加载调度任何“custom”算子包中的任何算子。 - >2、若此步骤出错,或屏幕未输出 "add" 中增加的日志打印,则说明新开发的“自定义TBE算子”有错误,影响了“自定义算子包”的加载,建议**优先排查新开发的“自定义TBE算子”中的“算子信息定义”是否正确**。 - >3、若此步骤正确,至少说明 **新开发的“自定义TBE算子”中的“算子信息定义”不影响运行**。 + >根据Ascend的设计逻辑,用户开发安装的“custom”算子包优先级高于“built-in”的内置算子包,在运行加载时,会优先加载调度“custom”包中的算子。过程中,若解析“custom”中的算子信息文件失败,则会跳过“custom”算子包,不加载调度任何“custom”算子包中的任何算子。 + >- 若此步骤出错,或屏幕未输出 "add" 中增加的日志打印,则说明新开发的“自定义TBE算子”有错误,影响了“自定义算子包”的加载,建议**优先排查新开发的“自定义TBE算子”中的“算子信息定义”是否正确**。 + >- 若此步骤正确,至少说明 **新开发的“自定义TBE算子”中的“算子信息定义”不影响运行**。 - 6. 调用"python3.7.5 xxx\_testcase.py"进行测试; + 5. 调用“python3.7.5 xxx\_testcase.py”进行测试; >![](public_sys-resources/icon-note.gif) **说明:** - >1、若屏幕正常输出新开发的“自定义TBE算子”中增加的日志打印,则至少说明调度到了新开发的算子。 - >2、若屏幕未输出新开发的“自定义TBE算子”中增加的日志打印,则问题可能出现在"PyTorch适配"中,需要排查这一部分的实现代码,较多的可能会出现在“XxxxKernelNpu.cpp”中的输入、输出未能正确适配。 + >- 若屏幕正常输出新开发的“自定义TBE算子”中增加的日志打印,则至少说明调度到了新开发的算子。 + >- 若屏幕未输出新开发的“自定义TBE算子”中增加的日志打印,则问题可能出现在“PyTorch适配”中,需要排查这一部分的实现代码,较多的可能会出现在“XxxxKernelNpu.cpp”中的输入、输出未能正确适配。 -### 如何确定“TBE算子”是否被“PyTorch适配”正确调用? +

如何确定“TBE算子”是否被“PyTorch适配”正确调用

不管是“custom”算子,还是“built-in”算子,在安装后,都是以\*.py源码的方式存放在安装目录下,所以我们可以通过编辑源码,在API入口增加日志的方式,打印输出入参,确定输入的参数是否正确。 @@ -790,7 +839,7 @@ pip3.7 install torchvision --no-deps 下面以"built-in"算子中的"zn\_2\_nchw"算子为例: -1. 打开安装在用户目录下的算子包安装目录 +1. 打开安装在用户目录下的算子包安装目录。 ``` cd ~/.local/Ascend/opp/op_impl/built-in/ai_core/tbe/impl @@ -830,15 +879,16 @@ pip3.7 install torchvision --no-deps ![](figures/zh-cn_image_0000001126846512.png) -### PyTorch编译失败,提示“error: ld returned 1 exit status” -**现象描述** +

PyTorch编译失败,提示“error: ld returned 1 exit status”

+ +## 现象描述 PyTorch编译失败,提示“ error: ld returned 1 exit status”。 ![](figures/zh-cn_image_0000001127006338.png) -**可能原因** +## 可能原因 通过日志分析,大概原因为XxxxKernelNpu.cpp中实现的适配函数,与PyTorch框架算子要求的分发实现接口参数不匹配。在上面的例子中,是“binary\_cross\_entropy\_npu”,打开对应的XxxxKernelNpu.cpp文件,找到相应的适配函数。 @@ -846,21 +896,21 @@ PyTorch编译失败,提示“ error: ld returned 1 exit status”。 可以看出实现中,最后一个参数是"int" ,与要求的“long”不匹配。 -**处理方法** +## 处理方法 修改XxxxKernelNpu.cpp中实现的适配函数,在上面的例子中,修改“binary\_cross\_entropy\_npu”方法最后一个参数类型为“int64\_t”\(cpp中“long”的类型使用"int64\_t"\)。 -### PyTorch编译失败,提示“error: call of overload ....” +

PyTorch编译失败,提示“error: call of overload ....”

-**现象描述** +## 现象描述 -PyTorch编译失败,提示“error: call of overload ....” +PyTorch编译失败,提示“error: call of overload ....”。 ![](figures/zh-cn_image_0000001173046111.png) ![](figures/zh-cn_image_0000001126846514.png) -**可能原因** +## 可能原因 通过日志分析,错误出在XxxxKernelNpu.cpp中30行位置,NPUAttrDesc的参数不合法。在上面的例子中,是“binary\_cross\_entropy\_attr”,打开对应的XxxxKernelNpu.cpp文件,找到相应的适配函数。 @@ -868,22 +918,22 @@ PyTorch编译失败,提示“error: call of overload ....” 可以看出实现中,NPUAttrDesc的入参,第二个参数是"int" ,与NPUAttrDesc定义不匹配。 -**处理方法** +## 处理方法 -1. 将binary\_cross\_entropy\_attr\(\)中错误的行代码替换为上面的注释中的代码。 +1、将binary\_cross\_entropy\_attr\(\)中错误的行代码替换为上面的注释中的代码 -2. binary\_cross\_entropy\_attr\(\)入参类型修改为 int64\_t。 +2、binary\_cross\_entropy\_attr\(\)入参类型修改为 int64\_t。 +

附录

-## 附录 +- **[CMake安装方法](#CMake安装方法.md)** -- **[CMake安装方法](#CMake安装方法.md)** +- **[自定义算子导出方法](#自定义算子导出方法.md)** -- **[自定义算子导出方法](#自定义算子导出方法.md)** -### CMake安装方法 +

CMake安装方法

-CMake版本升级为3.12.1的方法 +以CMake版本升级为3.12.1为例说明。 1. 获取Cmake软件包。 @@ -917,23 +967,24 @@ CMake版本升级为3.12.1的方法 cmake --version ``` - 如显示“cmake version 3.12.1”则表示安装成功。 + 显示“cmake version 3.12.1”则表示安装成功。 + -### 自定义算子导出方法 +

自定义算子导出方法

-#### 简介 +## 简介 PyTorch训练模型中包含自定义算子,将自定义算子导出成onnx单算子模型,方便转移到其他AI框架中使用。自定义算子导出有三种形式,适配NPU的TBE算子导出、C++算子导出、纯Python算子导出。 -#### 前提条件 +## 前提条件 安装PyTorch框架。 -#### TBE算子导出 +## TBE算子导出 TBE算子导出有两种方式。 -第一种方式。 +方式一: 1. 定义和注册算子 @@ -1000,7 +1051,7 @@ TBE算子导出有两种方式。 ``` -第二种方式。 +方式二: 1. 定义方法类 @@ -1084,7 +1135,7 @@ TBE算子导出有两种方式。 >![](public_sys-resources/icon-note.gif) **说明:** >详细实现代码请参见[test\_custom\_ops\_npu\_demo.py](https://gitee.com/ascend/pytorch/blob/master/test/test_npu/test_onnx/torch.onnx/custom_ops_demo/test_custom_ops_npu_demo.py),如无权限获取代码,请联系华为技术支持申请加入“Ascend”组织。 -#### C++算子导出 +## C++算子导出 1. 自定义算子 @@ -1150,7 +1201,7 @@ TBE算子导出有两种方式。 >![](public_sys-resources/icon-note.gif) **说明:** >详细实现代码请参见[test\_custom\_ops\_demo.py](https://gitee.com/ascend/pytorch/blob/master/test/test_npu/test_onnx/torch.onnx/custom_ops_demo/test_custom_ops_demo.py),如无权限获取代码,请联系华为技术支持申请加入“Ascend”组织。 -#### 纯Python算子导出 +## 纯Python算子导出 1. 自定义算子 diff --git "a/docs/zh/PyTorch\347\256\227\345\255\220\345\274\200\345\217\221\346\214\207\345\215\227/figures/zh-cn_image_0000001173046107.png" "b/docs/zh/PyTorch\347\256\227\345\255\220\345\274\200\345\217\221\346\214\207\345\215\227/figures/zh-cn_image_0000001173046107.png" deleted file mode 100644 index 5184f88e480847f15321aeaaabf9833a76c2af77..0000000000000000000000000000000000000000 Binary files "a/docs/zh/PyTorch\347\256\227\345\255\220\345\274\200\345\217\221\346\214\207\345\215\227/figures/zh-cn_image_0000001173046107.png" and /dev/null differ diff --git "a/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225.md" "b/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225.md" index cad08b2e9b8a5e3430e2869440300e7a9e4d36a4..6b13eaeb75451e1ef70e93f46ff1ec2a4a031e07 100644 --- "a/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225.md" +++ "b/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225.md" @@ -1,7 +1,7 @@ -# PyTorch适配算子清单 -- [PyTorch原生算子](#PyTorch原生算子.md) -- [PyTorch算子\(由昇腾开发\)](#PyTorch算子\(由昇腾开发\).md) -## PyTorch原生算子 +# **PyTorch适配算子清单** +- **[PyTorch原生API昇腾算子对应表](#PyTorch原生API昇腾算子对应表.md)** +- **[PyTorch昇腾自定义算子](#PyTorch昇腾自定义算子.md)** +

PyTorch原生API昇腾算子对应表

| 序号 | PyTorch 原生算子 | 昇腾适配算子 | | ---- | ------------------------------------------- | --------------------------------------------- | @@ -452,26 +452,26 @@ | 445 | bitwise_and.Tensor | bitwise_and_npu | | 446 | bitwise_and_.Scalar | bitwise_and_npu_ | | 447 | bitwise_and_.Tensor | bitwise_and_npu_ | -| 448 | __and__.Scalar | __and___npu | -| 449 | __and__.Tensor | __and___npu | +| 448 | and.Scalar | and_npu | +| 449 | and.Tensor | and_npu | | 450 | bitwise_or.Tensor_out | bitwise_or_out_npu | | 451 | bitwise_or.Scalar_out | bitwise_or_out_npu | | 452 | bitwise_or.Scalar | bitwise_or_npu | | 453 | bitwise_or.Tensor | bitwise_or_npu | | 454 | bitwise_or_.Scalar | bitwise_or_npu_ | | 455 | bitwise_or_.Tensor | bitwise_or_npu_ | -| 456 | __or__.Scalar | __or___npu | -| 457 | __or__.Tensor | __or___npu | -| 458 | __ior__.Scalar | __ior___npu | -| 459 | __ior__.Tensor | __ior___npu | +| 456 | or.Scalar | or_npu | +| 457 | or.Tensor | or_npu | +| 458 | ior.Scalar | ior_npu | +| 459 | ior.Tensor | ior_npu | | 460 | bitwise_xor.Tensor_out | bitwise_xor_out_npu | | 461 | bitwise_xor.Scalar_out | bitwise_xor_out_npu | | 462 | bitwise_xor.Scalar | bitwise_xor_npu | | 463 | bitwise_xor.Tensor | bitwise_xor_npu | | 464 | bitwise_xor_.Scalar | bitwise_xor_npu_ | | 465 | bitwise_xor_.Tensor | bitwise_xor_npu_ | -| 466 | __xor__.Scalar | __xor___npu | -| 467 | __xor__.Tensor | __xor___npu | +| 466 | xor.Scalar | xor_npu | +| 467 | xor.Tensor | xor_npu | | 468 | atan2_ | atan2_npu_ | | 469 | tril_ | tril_npu_ | | 470 | triu_ | triu_npu_ | @@ -777,93 +777,92 @@ | 770 | isfinite | isfinite_npu | - -## PyTorch算子\(由昇腾开发\) +

PyTorch昇腾自定义算子

| 序号 | PyTorch 算子(由昇腾开发) | 昇腾适配算子 | -| :--: | ---------------------------------------------- | ---------------------------------------------- | -| 1 | npu_convolution_transpose | npu_convolution_transpose | -| 2 | npu_conv_transpose2d | convolution_transpose_npu | -| 3 | npu_convolution_transpose_backward | convolution_transpose_backward_npu | -| 4 | npu_convolution | npu_convolution | -| 5 | npu_convolution_backward | npu_convolution_backward | -| 6 | npu_conv2d | conv2d_npu | -| 7 | npu_conv2d.out | conv2d_out_npu | -| 8 | npu_conv2d_backward | conv2d_backward_npu | -| 9 | npu_conv3d | conv3d_npu | -| 10 | npu_conv3d.out | conv3d_out_npu | -| 11 | npu_conv3d_backward | conv3d_backward_npu | -| 12 | one_ | one_npu_ | -| 13 | npu_sort_v2.out | sort_without_indices_out_npu | -| 14 | npu_sort_v2 | sort_without_indices_npu | -| 15 | npu_format_cast | format_cast_npu | -| 16 | npu_format_cast_.acl_format | format_cast_npu_ | -| 17 | npu_format_cast_.src | format_cast_npu_ | -| 18 | npu_transpose_to_contiguous | transpose_to_contiguous_npu | -| 19 | npu_transpose | transpose_npu | -| 20 | npu_transpose.out | transpose_out_npu | -| 21 | npu_broadcast | broadcast_npu | -| 22 | npu_broadcast.out | broadcast_out_npu | -| 23 | npu_dtype_cast | dtype_cast_npu | -| 24 | npu_dtype_cast_.Tensor | dtype_cast_npu_ | -| 25 | npu_roi_alignbk | roi_align_backward_npu | -| 26 | empty_with_format | empty_with_format_npu | -| 27 | empty_with_format.names | empty_with_format_npu | -| 28 | copy_memory_ | copy_memory_npu_ | -| 29 | npu_one_hot | one_hot_npu | -| 30 | npu_stride_add | stride_add_npu | -| 31 | npu_softmax_cross_entropy_with_logits | softmax_cross_entropy_with_logits_npu | -| 32 | npu_softmax_cross_entropy_with_logits_backward | softmax_cross_entropy_with_logits_backward_npu | -| 33 | npu_ps_roi_pooling | ps_roi_pooling_npu | -| 34 | npu_ps_roi_pooling_backward | ps_roi_pooling_backward_npu | -| 35 | npu_roi_align | roi_align_npu | -| 36 | npu_nms_v4 | nms_v4_npu | -| 37 | npu_lstm | lstm_npu | -| 38 | npu_lstm_backward | lstm_backward_npu | -| 39 | npu_iou | iou_npu | -| 40 | npu_ptiou | ptiou_npu | -| 41 | npu_nms_with_mask | nms_with_mask_npu | -| 42 | npu_pad | pad_npu | -| 43 | npu_bounding_box_encode | bounding_box_encode_npu | -| 44 | npu_bounding_box_decode | bounding_box_decode_npu | -| 45 | npu_gru | gru_npu | -| 46 | npu_gru_backward | gru_backward_npu | -| 47 | npu_set_.source_Storage_storage_offset_format | set_npu_ | -| 48 | npu_random_choice_with_mask | random_choice_with_mask_npu | -| 49 | npu_batch_nms | batch_nms_npu | -| 50 | npu_slice | slice_npu | -| 51 | npu_slice.out | slice_out_npu | -| 52 | npu_dropoutV2 | dropout_v2_npu | -| 53 | npu_dropoutV2_backward | dropout_v2_backward_npu | -| 54 | _npu_dropout | _dropout_npu | -| 55 | _npu_dropout_inplace | _dropout_npu_inplace | -| 56 | npu_dropout_backward | dropout_backward_npu | -| 57 | npu_indexing | indexing_npu | -| 58 | npu_indexing.out | indexing_out_npu | -| 59 | npu_ifmr | ifmr_npu | -| 60 | npu_max.dim | max_v1_npu | -| 61 | npu_max.names_dim | max_v1_npu | -| 62 | npu_scatter | scatter_npu | -| 63 | npu_max_backward | max_backward_npu | -| 64 | npu_apply_adam | apply_adam_npu | -| 65 | npu_layer_norm_eval | layer_norm_eval_npu | -| 66 | npu_alloc_float_status | alloc_float_status_npu | -| 67 | npu_get_float_status | get_float_status_npu | -| 68 | npu_clear_float_status | clear_float_status_npu | -| 69 | npu_confusion_transpose | confusion_transpose_npu | -| 70 | npu_confusion_transpose_backward | confusion_transpose_backward_npu | -| 71 | npu_bmmV2 | bmm_v2_npu | -| 72 | fast_gelu | fast_gelu_npu | -| 73 | fast_gelu_backward | fast_gelu_backward_npu | -| 74 | npu_sub_sample | sub_sample_npu | -| 75 | npu_deformable_conv2d | deformable_conv2d_npu | -| 76 | npu_deformable_conv2dbk | deformable_conv2d_backward_npu | -| 77 | npu_mish | mish_npu | -| 78 | npu_anchor_response_flags | anchor_response_flags_npu | -| 79 | npu_yolo_boxes_encode | yolo_boxes_encode_npu | -| 80 | npu_grid_assign_positive | grid_assign_positive_npu | -| 81 | npu_mish_backward | mish_backward_npu | -| 82 | npu_normalize_batch | normalize_batch_npu | -| 83 | npu_masked_fill_range | masked_fill_range_npu | +| ---- | ---------------------------------------------- | ---------------------------------------------- | +| 1 | npu_convolution_transpose | npu_convolution_transpose | +| 2 | npu_conv_transpose2d | convolution_transpose_npu | +| 3 | npu_convolution_transpose_backward | convolution_transpose_backward_npu | +| 4 | npu_convolution | npu_convolution | +| 5 | npu_convolution_backward | npu_convolution_backward | +| 6 | npu_conv2d | conv2d_npu | +| 7 | npu_conv2d.out | conv2d_out_npu | +| 8 | npu_conv2d_backward | conv2d_backward_npu | +| 9 | npu_conv3d | conv3d_npu | +| 10 | npu_conv3d.out | conv3d_out_npu | +| 11 | npu_conv3d_backward | conv3d_backward_npu | +| 12 | one_ | one_npu_ | +| 13 | npu_sort_v2.out | sort_without_indices_out_npu | +| 14 | npu_sort_v2 | sort_without_indices_npu | +| 15 | npu_format_cast | format_cast_npu | +| 16 | npu_format_cast_.acl_format | format_cast_npu_ | +| 17 | npu_format_cast_.src | format_cast_npu_ | +| 18 | npu_transpose_to_contiguous | transpose_to_contiguous_npu | +| 19 | npu_transpose | transpose_npu | +| 20 | npu_transpose.out | transpose_out_npu | +| 21 | npu_broadcast | broadcast_npu | +| 22 | npu_broadcast.out | broadcast_out_npu | +| 23 | npu_dtype_cast | dtype_cast_npu | +| 24 | npu_dtype_cast_.Tensor | dtype_cast_npu_ | +| 25 | npu_roi_alignbk | roi_align_backward_npu | +| 26 | empty_with_format | empty_with_format_npu | +| 27 | empty_with_format.names | empty_with_format_npu | +| 28 | copy_memory_ | copy_memory_npu_ | +| 29 | npu_one_hot | one_hot_npu | +| 30 | npu_stride_add | stride_add_npu | +| 31 | npu_softmax_cross_entropy_with_logits | softmax_cross_entropy_with_logits_npu | +| 32 | npu_softmax_cross_entropy_with_logits_backward | softmax_cross_entropy_with_logits_backward_npu | +| 33 | npu_ps_roi_pooling | ps_roi_pooling_npu | +| 34 | npu_ps_roi_pooling_backward | ps_roi_pooling_backward_npu | +| 35 | npu_roi_align | roi_align_npu | +| 36 | npu_nms_v4 | nms_v4_npu | +| 37 | npu_lstm | lstm_npu | +| 38 | npu_lstm_backward | lstm_backward_npu | +| 39 | npu_iou | iou_npu | +| 40 | npu_ptiou | ptiou_npu | +| 41 | npu_nms_with_mask | nms_with_mask_npu | +| 42 | npu_pad | pad_npu | +| 43 | npu_bounding_box_encode | bounding_box_encode_npu | +| 44 | npu_bounding_box_decode | bounding_box_decode_npu | +| 45 | npu_gru | gru_npu | +| 46 | npu_gru_backward | gru_backward_npu | +| 47 | npu_set_.source_Storage_storage_offset_format | set_npu_ | +| 48 | npu_random_choice_with_mask | random_choice_with_mask_npu | +| 49 | npu_batch_nms | batch_nms_npu | +| 50 | npu_slice | slice_npu | +| 51 | npu_slice.out | slice_out_npu | +| 52 | npu_dropoutV2 | dropout_v2_npu | +| 53 | npu_dropoutV2_backward | dropout_v2_backward_npu | +| 54 | _npu_dropout | _dropout_npu | +| 55 | _npu_dropout_inplace | _dropout_npu_inplace | +| 56 | npu_dropout_backward | dropout_backward_npu | +| 57 | npu_indexing | indexing_npu | +| 58 | npu_indexing.out | indexing_out_npu | +| 59 | npu_ifmr | ifmr_npu | +| 60 | npu_max.dim | max_v1_npu | +| 61 | npu_max.names_dim | max_v1_npu | +| 62 | npu_scatter | scatter_npu | +| 63 | npu_max_backward | max_backward_npu | +| 64 | npu_apply_adam | apply_adam_npu | +| 65 | npu_layer_norm_eval | layer_norm_eval_npu | +| 66 | npu_alloc_float_status | alloc_float_status_npu | +| 67 | npu_get_float_status | get_float_status_npu | +| 68 | npu_clear_float_status | clear_float_status_npu | +| 69 | npu_confusion_transpose | confusion_transpose_npu | +| 70 | npu_confusion_transpose_backward | confusion_transpose_backward_npu | +| 71 | npu_bmmV2 | bmm_v2_npu | +| 72 | fast_gelu | fast_gelu_npu | +| 73 | fast_gelu_backward | fast_gelu_backward_npu | +| 74 | npu_sub_sample | sub_sample_npu | +| 75 | npu_deformable_conv2d | deformable_conv2d_npu | +| 76 | npu_deformable_conv2dbk | deformable_conv2d_backward_npu | +| 77 | npu_mish | mish_npu | +| 78 | npu_anchor_response_flags | anchor_response_flags_npu | +| 79 | npu_yolo_boxes_encode | yolo_boxes_encode_npu | +| 80 | npu_grid_assign_positive | grid_assign_positive_npu | +| 81 | npu_mish_backward | mish_backward_npu | +| 82 | npu_normalize_batch | normalize_batch_npu | +| 83 | npu_masked_fill_range | masked_fill_range_npu | diff --git "a/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-caution.gif" "b/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-caution.gif" new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and "b/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-caution.gif" differ diff --git "a/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-danger.gif" "b/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-danger.gif" new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and "b/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-danger.gif" differ diff --git "a/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-note.gif" "b/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-note.gif" new file mode 100644 index 0000000000000000000000000000000000000000..6314297e45c1de184204098efd4814d6dc8b1cda Binary files /dev/null and "b/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-note.gif" differ diff --git "a/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-notice.gif" "b/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-notice.gif" new file mode 100644 index 0000000000000000000000000000000000000000..86024f61b691400bea99e5b1f506d9d9aef36e27 Binary files /dev/null and "b/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-notice.gif" differ diff --git "a/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-tip.gif" "b/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-tip.gif" new file mode 100644 index 0000000000000000000000000000000000000000..93aa72053b510e456b149f36a0972703ea9999b7 Binary files /dev/null and "b/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-tip.gif" differ diff --git "a/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-warning.gif" "b/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-warning.gif" new file mode 100644 index 0000000000000000000000000000000000000000..6e90d7cfc2193e39e10bb58c38d01a23f045d571 Binary files /dev/null and "b/docs/zh/PyTorch\351\200\202\351\205\215\347\256\227\345\255\220\346\270\205\345\215\225/public_sys-resources/icon-warning.gif" differ