From dabae32881b2c686cf273c5fade7d9c35112db38 Mon Sep 17 00:00:00 2001 From: pengzirong Date: Fri, 1 Jul 2022 09:37:56 +0800 Subject: [PATCH] =?UTF-8?q?v1.5.0=E5=86=85=E5=AE=B9=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E8=87=B3=E5=95=86=E5=8F=91=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 --- README.zh.md | 278 +++++++- ...\214\201\346\270\205\345\215\225_1.5.0.md" | 344 +++++----- ...11\350\243\205\346\214\207\345\215\227.md" | 625 +++++++++--------- ...02\351\205\215\346\214\207\345\215\227.md" | 14 +- 4 files changed, 719 insertions(+), 542 deletions(-) diff --git a/README.zh.md b/README.zh.md index 79891efde4..f74452f828 100644 --- a/README.zh.md +++ b/README.zh.md @@ -1,26 +1,23 @@ # AscendPyTorch -# 项目简介 -本项目开发了PyTorch Adapter插件,用于昇腾适配PyTorch框架,为使用PyTorch框架的开发者提供昇腾AI处理器的超强算力。 +

简介

+本项目开发了PyTorch Adapter插件,用于昇腾适配PyTorch框架,为使用PyTorch框架的开发者提供昇腾AI处理器的超强算力。用户在准备相关环境进行基于PyTorch框架模型的开发、运行时,可以选择在服务器中手动编译安装PyTorch框架相关模块。 -# 编译/执行约束 +

前提条件

-gcc版本: 7.3.0(只在编译场景要求) - -cmake版本:3.12.0以上版本(只在编译场景要求) - -python版本:3.7.5、3.8.x +- 需完成CANN开发或运行环境的安装,具体操作请参考《CANN 软件安装指南》。 +- python版本:3.7.5、3.8。 # 系统依赖库 ## CentOS & EulerOS -yum install -y cmake zlib-devel libffi-devel openssl-devel libjpeg-turbo-devel gcc-c++ sqlite-devel dos2unix openblas +yum install -y cmake==3.12.0 zlib-devel libffi-devel openssl-devel libjpeg-turbo-devel gcc-c++ sqlite-devel dos2unix openblas git gcc==7.3.0 ## Ubuntu -apt-get install -y gcc g++ make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev m4 cmake dos2unix libopenblas-dev +apt-get install -y gcc==7.3.0 g++ make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev m4 cmake==3.12.0 dos2unix libopenblas-dev git # Ascend配套软件 @@ -33,17 +30,15 @@ apt-get install -y gcc g++ make build-essential libssl-dev zlib1g-dev libbz2-dev | 3.0.rc1 | CANN 5.1.RC1 | 1.5.0.post5 | v1.5.0-3.0.rc1 | | 3.0.rc1 | CANN 5.1.RC1 | 1.8.1.rc1 | v1.8.1-3.0.rc1 | -# 使用方式 --生成全量代码并编译 +# 安装方式 + +## 安装PyTorch依赖环境 -## 获取适配昇腾AI处理器的PyTorch源代码patch 获取适配昇腾AI处理器的PyTorch源代码(即当前仓库代码),并切换到所需的分支。 ``` - git clone https://gitee.com/ascend/pytorch.git - # 当前master分支为pytorch 1.8.1版本,需要1.5.0版本请使用git checkout 命令切换到v1.5.0对应版本分支 - cd pytorch - git checkout -b v1.5.0-3.0.rc1 remotes/origin/v1.5.0-3.0.rc1 + git clone -b v1.5.0-3.0.rc2 https://gitee.com/ascend/pytorch.git ``` ## 获取原生PyTorch源代码和third_party代码 @@ -51,6 +46,7 @@ apt-get install -y gcc g++ make build-essential libssl-dev zlib1g-dev libbz2-dev 在当前仓库根目录pytorch/下获取原生PyTorch1.5.0的源代码。请关注PyTorch原生社区的安全板块与Issue板块是否有安全相关问题修复,并根据社区修复及时更新原生PyTorch代码。 ```sh +cd pytorch git clone -b v1.5.0 --depth=1 https://github.com/pytorch/pytorch.git ``` @@ -102,9 +98,7 @@ bash build.sh --python=3.8 生成的二进制包在pytorch/pytorch/dist/目录下 -# 安装 - -### (以1.5.0版本为例,1.8.1版本同理) +## 安装pytorch **x86_64:** @@ -142,33 +136,143 @@ source env.sh ## 自定义环境变量 -以下环境变量为NPU场景下使用的功能类或可以提升性能的环境变量: +依据实际场景,选择合适的HCCL初始化方式,并配置相应环境变量: ``` -export TASK_QUEUE_ENABLE=1 # 使用异步任务下发,异步调用acl接口,建议默认开启,开启设置为1 -export PTCOPY_ENABLE=1 # 使用PTCopy算子模式,加速转连续及copy等过程,建议默认开启,开启设置为1 +# 场景一:单机场景 + export HCCL_WHITELIST_DISABLE=1 # 关闭HCCL通信白名单 +# 场景二:多机场景。 + export HCCL_WHITELIST_DISABLE=1 # 关闭HCCL通信白名单 + export HCCL_IF_IP="1.1.1.1" # “1.1.1.1”为示例使用的host网卡IP,请根据实际修改。需要保证使用的网卡IP在集群内是互通的。 ``` 可选的环境变量可能会对运行的模型产生影响: ``` -export DYNAMIC_COMPILE_ENABLE=1 # 动态shape特性功能,针对shape变化场景,可选,开启设置为1 + export COMBINED_ENABLE=1 # 非连续两个算子组合类场景优化,可选,开启设置为1 export TRI_COMBINED_ENABLE=1 # 非连续三个算子组合类场景优化,可选,开启设置为1 export ACL_DUMP_DATA=1 # 算子数据dump功能,调试时使用,可选,开启设置为1 -export DYNAMIC_OP="ADD#MUL" # 算子实现,ADD和MUL算子在不同场景下有不同的性能表现。可选 -``` +``` +当系统为openEuler及其继承操作系统时,如UOS,需设置此命令,取消CPU绑核。 + + ``` + # unset GOMP_CPU_AFFINITY + ``` +**表 1** 环境变量说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

配置项

+

说明

+

LD_LIBRARY_PATH

+

动态库的查找路径,参考上述举例配置。

+

若训练所在系统环境需要升级gcc(例如CentOS、Debian和BClinux系统),则“LD_LIBRARY_PATH”配置项处动态库查找路径需要添加“${install_path}/lib64”,其中“{install_path}”为gcc升级安装路径。请参见5

+

PYTHONPATH

+

Python搜索路径,参考上述举例配置。

+

PATH

+

可执行程序的查找路径,参考上述举例配置。

+

ASCEND_OPP_PATH

+

算子根目录,参考上述举例配置。

+

OPTION_EXEC_EXTERN_PLUGIN_PATH

+

算子信息库路径。

+

ASCEND_AICPU_PATH

+

aicpu算子包路径。

+

HCCL_WHITELIST_DISABLE

+

配置在使用HCCL时是否开启通信白名单。

+
  • 0:开启白名单,无需校验HCCL通信白名单。
  • 1:关闭白名单,需校验HCCL通信白名单。
+

缺省值为0,默认开启白名单。

+

HCCL_IF_IP

+

配置HCCL的初始化通信网卡IP。

+
  • ip格式为点分十进制。
  • 暂只支持host网卡。
+

缺省时,按照以下优先级选定host通信网卡名:docker/local以外网卡(网卡名字字典序升序排列)>docker 网卡 > local网卡

+

ASCEND_SLOG_PRINT_TO_STDOUT

+

(可选)设置是否开启日志打屏。

+
  • 0:表示采用日志的默认输出方式。
  • 1:表示日志打屏显示。
  • 其他值为非法值。
+

ASCEND_GLOBAL_LOG_LEVEL

+

设置应用类日志的全局日志级别。

+
  • 0:对应DEBUG级别。
  • 1:对应INFO级别。
  • 2:对应WARNING级别。
  • 3:对应ERROR级别。
  • 4:对应NULL级别,不输出日志。
  • 其他值为非法值。
+

ASCEND_GLOBAL_EVENT_ENABLE

+

设置应用类日志是否开启Event日志。

+
  • 0:不开启Event日志。
  • 1:开启Event日志。
  • 其他值为非法值。
+

COMBINED_ENABLE

+

(可选)非连续两个算子组合类场景优化,开启设置为1。

+

RI_COMBINED_ENABLE

+

(可选)非连续三个算子组合类场景优化,开启设置为1。

+

ACL_DUMP_DATA

+

(可选)算子数据dump功能,调试时使用,开启设置为1。

+

unset GOMP_CPU_AFFINITY

+

(可选)当系统为openEuler及其继承操作系统时,如UOS,需设置此命令,取消CPU绑核。

+
## 执行单元测试脚本 验证运行, 输出结果OK + ```shell // 根据前述版本,选择对应的测试脚本,以下为1.5.0版本 cd ../ python3 pytorch1.5.0/test/test_npu/test_network_ops/test_div.py ``` +

安装混合精度模块(可选)

+请用户根据以下功能需要选择使用,若需要安装Apex模块请参考相关[README文档](https://gitee.com/ascend/apex/tree/v1.5.0/)进行编译安装Apex模块。 + +- APEX + - O1配置模式:Conv,Matmul等使用float16精度计算,其他如softmax、BN使用float32精度。 + - O2配置模式:除BN使用float32精度外,其他部分使用float16精度。 + - 静态loss scale:静态设置参数确保混合精度训练收敛。 + - 动态loss scale:动态计算loss scale的值并判断是否溢出。 # 文档 @@ -201,6 +305,16 @@ Ascend PyTorch的版本分支有以下几种维护阶段: # FAQ +## 在PIP设置为华为源时,安装requirments.txt中的typing依赖后,会导致python环境错误。 + +在PIP设置为华为源时,需打开requirments.txt文件,删除typing依赖,再执行命令。 + +``` +pip3 install -r requirments.txt +``` + + + ## import torch 报找不到libhccl.so错误 未配置环境变量,需通过env.sh脚本配置 @@ -244,25 +358,119 @@ pip3 install --upgrade te-0.4.0-py3-none-any.whl -## 编译cmake报错版本过低 +## 命令行安装cmake依赖时提示找不到包、编译cmake报错版本过低,可使用安装脚本或源码编译安装。 + +下载安装脚本安装cmake。(参考cmake官网) + + X86_64环境推荐脚本安装:cmake-3.12.0-Linux-x86_64.sh + +部分源下载cmake时会提示无法找到包,需要使用源码编译安装。 + +1. 获取Cmake软件包。 + + ``` + wget https://cmake.org/files/v3.12/cmake-3.12.0.tar.gz --no-check-certificate + ``` + +2. 解压并进入软件包目录。 + + ``` + tar -xf cmake-3.12.0.tar.gz + cd cmake-3.12.0/ + ``` + +3. 执行配置、编译和安装命令。 + + ``` + ./configure --prefix=/usr/local/cmake + make && make install + ``` + +4. 设置软连接。 + + ``` + ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake + ``` + +5. 执行如下命令验证是否安装成功。 + + ``` + cmake --version + ``` + + 如显示“cmake version 3.12.0”则表示安装成功。 + + + +## 命令行安装gcc依赖时提示找不到包、编译时gcc报错问题 + +部分源下载gcc时会提示无法找到包,需要使用源码编译安装。 + +以下步骤请在root用户下执行。 + +1. 下载gcc-7.3.0.tar.gz,下载地址为[https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz](https://gitee.com/link?target=https%3A%2F%2Fmirrors.tuna.tsinghua.edu.cn%2Fgnu%2Fgcc%2Fgcc-7.3.0%2Fgcc-7.3.0.tar.gz)。 + +2. 安装gcc时候会占用大量临时空间,所以先执行下面的命令清空/tmp目录: + + ``` + sudo rm -rf /tmp/* + ``` + +3. 安装依赖(以CentOS和Ubuntu系统为例)。 + + - CentOS执行如下命令安装。 + + ``` + yum install bzip2 + ``` + + - Ubuntu执行如下命令安装。 + + ``` + apt-get install bzip2 + ``` + +4. 编译安装gcc。 + + 1. 进入gcc-7.3.0.tar.gz源码包所在目录,解压源码包,命令为: + + ``` + tar -zxvf gcc-7.3.0.tar.gz + ``` + + 2. 进入解压后的文件夹,执行如下命令下载gcc依赖包: -cmake官网下载linux版本安装(当前3.18.0) + ``` + cd gcc-7.3.0 + ./contrib/download_prerequisites + ``` -1. 使用yum命令安装: yum install -y cmake==3.18.0 + 如果执行上述命令报错,需要执行如下命令在“gcc-7.3.0/“文件夹下下载依赖包: -2. 下载cmake sh脚本安装:(参考cmake官网) + ``` + wget http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 + wget http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 + wget http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz + wget http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2 + ``` - X86_64环境推荐脚本安装: cmake-3.18.2-Linux-x86_64.sh + 下载好上述依赖包后,重新执行以下命令: - + ``` + ./contrib/download_prerequisites + ``` -## GCC版本问题切换问题 + 如果上述命令校验失败,需要确保依赖包为一次性下载成功,无重复下载现象。 -目前存在测试环境从GCC4.8.5 切换到 GCC7.3.0。这个过程容易出现错误导致pytorch编译不过,以下是需要软连接的库 + 3. 执行配置、编译和安装命令: -gcc, g++,c++(--version 必须是7.3.0) + ``` + ./configure --enable-languages=c,c++ --disable-multilib --with-system-zlib --prefix=/usr/local/linux_gcc7.3.0 + make -j15 # 通过grep -w processor /proc/cpuinfo|wc -l查看cpu数,示例为15,用户可自行设置相应参数。 + make install + ``` -libstdc++->libstdc++.so.6.0.24(7.3.0) + > ![img](figures/icon-notice.gif) **须知:** 其中“--prefix“参数用于指定linux_gcc7.3.0安装路径,用户可自行配置,但注意不要配置为“/usr/local“及“/usr“,因为会与系统使用软件源默认安装的gcc相冲突,导致系统原始gcc编译环境被破坏。示例指定为“/usr/local/linux_gcc7.3.0“。 diff --git "a/docs/zh/PyTorch API\346\224\257\346\214\201\346\270\205\345\215\225_1.5.0.md" "b/docs/zh/PyTorch API\346\224\257\346\214\201\346\270\205\345\215\225_1.5.0.md" index 89b5c8f358..6c3f7b28db 100644 --- "a/docs/zh/PyTorch API\346\224\257\346\214\201\346\270\205\345\215\225_1.5.0.md" +++ "b/docs/zh/PyTorch API\346\224\257\346\214\201\346\270\205\345\215\225_1.5.0.md" @@ -106,178 +106,178 @@ ## Math operations -| 序号 | API名称 | 是否支持 | -| ---- | ------------------------ | ------------------------ | -| 1 | torch.abs | 是 | -| 2 | torch.acos | 是 | -| 3 | torch.add | 是 | -| 4 | torch.addcdiv | 是 | -| 5 | torch.addcmul | 是 | -| 6 | torch.angle | 否 | -| 7 | torch.asin | 是 | -| 8 | torch.atan | 是 | -| 9 | torch.atan2 | 是 | -| 10 | torch.bitwise_not | 是 | -| 11 | torch.bitwise_and | 是 | -| 12 | torch.bitwise_or | 是 | -| 13 | torch.bitwise_xor | 是 | -| 14 | torch.ceil | 是 | -| 15 | torch.clamp | 是 | -| 16 | torch.conj | 否 | -| 17 | torch.cos | 是 | -| 18 | torch.cosh | 是 | -| 19 | torch.div | 是 | -| 20 | torch.digamma | 否 | -| 21 | torch.erf | 是 | -| 22 | torch.erfc | 是 | -| 23 | torch.erfinv | 是 | -| 24 | torch.exp | 是 | -| 25 | torch.expm1 | 是 | -| 26 | torch.floor | 是 | -| 27 | torch.floor_divide | 是 | -| 28 | torch.fmod | 是 | -| 29 | torch.frac | 是 | -| 30 | torch.imag | 否 | -| 31 | torch.lerp | 是 | -| 32 | torch.lgamma | 否 | -| 33 | torch.log | 是 | -| 34 | torch.log10 | 是 | -| 35 | torch.log1p | 是 | -| 36 | torch.log2 | 是 | -| 37 | torch.logical_and | 是 | -| 38 | torch.logical_not | 是 | -| 39 | torch.logical_or | 是 | -| 40 | torch.logical_xor | 是 | -| 41 | torch.mul | 是 | -| 42 | torch.mvlgamma | 否 | -| 43 | torch.neg | 是 | -| 44 | torch.polygamma | 否 | -| 45 | torch.pow | 是 | -| 46 | torch.real | 是 | -| 47 | torch.reciprocal | 是 | -| 48 | torch.remainder | 是 | -| 49 | torch.round | 是 | -| 50 | torch.rsqrt | 是 | -| 51 | torch.sigmoid | 是 | -| 52 | torch.sign | 是 | -| 53 | torch.sin | 是 | -| 54 | torch.sinh | 是 | -| 55 | torch.sqrt | 是 | -| 56 | torch.square | 是 | -| 57 | torch.tan | 是 | -| 58 | torch.tanh | 是 | -| 59 | torch.true_divide | 是 | -| 60 | torch.trunc | 是 | -| 61 | torch.argmax | 是 | -| 62 | torch.argmin | 是 | -| 63 | torch.dist | 是 | -| 64 | torch.logsumexp | 是 | -| 65 | torch.mean | 是 | -| 66 | torch.median | 是 | -| 67 | torch.mode | 否 | -| 68 | torch.norm | 是 | -| 69 | torch.prod | 是 | -| 70 | torch.std | 是 | -| 71 | torch.std_mean | 是 | -| 72 | torch.sum | 是 | -| 73 | torch.unique | 是 | -| 74 | torch.unique_consecutive | 否 | -| 75 | torch.var | 否 | -| 76 | torch.var_mean | 否 | -| 77 | torch.allclose | 是 | -| 78 | torch.argsort | 是 | -| 79 | torch.eq | 是 | -| 80 | torch.equal | 是 | -| 81 | torch.ge | 是 | -| 82 | torch.gt | 是 | -| 83 | torch.isfinite | 是 | -| 84 | torch.isinf | 是 | -| 85 | torch.isnan | 是 | -| 86 | torch.kthvalue | 是 | -| 87 | torch.le | 是 | -| 88 | torch.lt | 是 | -| 89 | torch.max | 是 | -| 90 | torch.min | 是 | -| 91 | torch.ne | 是 | -| 92 | torch.sort | 是 | -| 93 | torch.topk | 是 | -| 94 | torch.fft | 否 | -| 95 | torch.ifft | 否 | -| 96 | torch.rfft | 否 | -| 97 | torch.irfft | 否 | -| 98 | torch.stft | 否 | -| 99 | torch.bartlett_window | 是 | -| 100 | torch.blackman_window | 是 | -| 101 | torch.hamming_window | 是 | -| 102 | torch.hann_window | 是 | -| 103 | torch.bincount | 是 | -| 104 | torch.broadcast_tensors | 是 | -| 105 | torch.cartesian_prod | 是 | -| 106 | torch.cdist | 是 | -| 107 | torch.combinations | 否 | -| 108 | torch.cross | 是 | -| 109 | torch.cummax | 是 | -| 110 | torch.cummin | 是 | -| 111 | torch.cumprod | 是 | -| 112 | torch.cumsum | 是 | -| 113 | torch.diag | 是,仅支持diagonal=0场景 | -| 114 | torch.diag_embed | 是 | -| 115 | torch.diagflat | 是 | -| 116 | torch.diagonal | 是 | -| 117 | torch.einsum | 是 | -| 118 | torch.flatten | 是 | -| 119 | torch.flip | 是 | -| 120 | torch.rot90 | 是 | -| 121 | torch.histc | 否 | -| 122 | torch.meshgrid | 是 | -| 123 | torch.renorm | 是 | -| 124 | torch.repeat_interleave | 是 | -| 125 | torch.roll | 是 | -| 126 | torch.tensordot | 是 | -| 127 | torch.trace | 否 | -| 128 | torch.tril | 是 | -| 129 | torch.tril_indices | 是 | -| 130 | torch.triu | 是 | -| 131 | torch.triu_indices | 是 | -| 132 | torch.addbmm | 是 | -| 133 | torch.addmm | 是 | -| 134 | torch.addmv | 是 | -| 135 | torch.addr | 是 | -| 136 | torch.baddbmm | 是 | -| 137 | torch.bmm | 是 | -| 138 | torch.chain_matmul | 是 | -| 139 | torch.cholesky | 否 | -| 140 | torch.cholesky_inverse | 否 | -| 141 | torch.cholesky_solve | 否 | -| 142 | torch.dot | 是 | -| 143 | torch.eig | 否 | -| 144 | torch.geqrf | 否 | -| 145 | torch.ger | 是 | -| 146 | torch.inverse | 是 | -| 147 | torch.det | 否 | -| 148 | torch.logdet | 否 | -| 149 | torch.slogdet | 是 | -| 150 | torch.lstsq | 否 | -| 151 | torch.lu | 否 | -| 152 | torch.lu_solve | 否 | -| 153 | torch.lu_unpack | 否 | -| 154 | torch.matmul | 是 | -| 155 | torch.matrix_power | 是 | -| 156 | torch.matrix_rank | 是 | -| 157 | torch.mm | 是 | -| 158 | torch.mv | 是 | -| 159 | torch.orgqr | 否 | -| 160 | torch.ormqr | 否 | -| 161 | torch.pinverse | 是 | -| 162 | torch.qr | 是 | -| 163 | torch.solve | 否 | -| 164 | torch.svd | 是 | -| 165 | torch.svd_lowrank | 是 | -| 166 | torch.pca_lowrank | 是 | -| 167 | torch.symeig | 是 | -| 168 | torch.lobpcg | 否 | -| 169 | torch.trapz | 是 | -| 170 | torch.triangular_solve | 是 | +| 序号 | API名称 | 是否支持 | +| ---- | ------------------------ | ------------------------------------------- | +| 1 | torch.abs | 是 | +| 2 | torch.acos | 是 | +| 3 | torch.add | 是 | +| 4 | torch.addcdiv | 是 | +| 5 | torch.addcmul | 是 | +| 6 | torch.angle | 否 | +| 7 | torch.asin | 是 | +| 8 | torch.atan | 是 | +| 9 | torch.atan2 | 是 | +| 10 | torch.bitwise_not | 是 | +| 11 | torch.bitwise_and | 是 | +| 12 | torch.bitwise_or | 是 | +| 13 | torch.bitwise_xor | 是 | +| 14 | torch.ceil | 是 | +| 15 | torch.clamp | 是 | +| 16 | torch.conj | 否 | +| 17 | torch.cos | 是 | +| 18 | torch.cosh | 是 | +| 19 | torch.div | 是 | +| 20 | torch.digamma | 否 | +| 21 | torch.erf | 是 | +| 22 | torch.erfc | 是 | +| 23 | torch.erfinv | 是 | +| 24 | torch.exp | 是 | +| 25 | torch.expm1 | 是 | +| 26 | torch.floor | 是 | +| 27 | torch.floor_divide | 是 | +| 28 | torch.fmod | 是 | +| 29 | torch.frac | 是 | +| 30 | torch.imag | 否 | +| 31 | torch.lerp | 是 | +| 32 | torch.lgamma | 否 | +| 33 | torch.log | 是 | +| 34 | torch.log10 | 是 | +| 35 | torch.log1p | 是 | +| 36 | torch.log2 | 是 | +| 37 | torch.logical_and | 是 | +| 38 | torch.logical_not | 是 | +| 39 | torch.logical_or | 是 | +| 40 | torch.logical_xor | 是 | +| 41 | torch.mul | 是 | +| 42 | torch.mvlgamma | 否 | +| 43 | torch.neg | 是 | +| 44 | torch.polygamma | 否 | +| 45 | torch.pow | 是 | +| 46 | torch.real | 是 | +| 47 | torch.reciprocal | 是 | +| 48 | torch.remainder | 是 | +| 49 | torch.round | 是 | +| 50 | torch.rsqrt | 是 | +| 51 | torch.sigmoid | 是 | +| 52 | torch.sign | 是 | +| 53 | torch.sin | 是 | +| 54 | torch.sinh | 是 | +| 55 | torch.sqrt | 是 | +| 56 | torch.square | 是 | +| 57 | torch.tan | 是 | +| 58 | torch.tanh | 是 | +| 59 | torch.true_divide | 是 | +| 60 | torch.trunc | 是 | +| 61 | torch.argmax | 是 | +| 62 | torch.argmin | 是 | +| 63 | torch.dist | 是 | +| 64 | torch.logsumexp | 是 | +| 65 | torch.mean | 是 | +| 66 | torch.median | 是 | +| 67 | torch.mode | 否 | +| 68 | torch.norm | 是 | +| 69 | torch.prod | 是 | +| 70 | torch.std | 是 | +| 71 | torch.std_mean | 是 | +| 72 | torch.sum | 是 | +| 73 | torch.unique | 是 | +| 74 | torch.unique_consecutive | 否 | +| 75 | torch.var | 否 | +| 76 | torch.var_mean | 否 | +| 77 | torch.allclose | 是 | +| 78 | torch.argsort | 是 | +| 79 | torch.eq | 是 | +| 80 | torch.equal | 是 | +| 81 | torch.ge | 是 | +| 82 | torch.gt | 是 | +| 83 | torch.isfinite | 是 | +| 84 | torch.isinf | 是 | +| 85 | torch.isnan | 是 | +| 86 | torch.kthvalue | 是 | +| 87 | torch.le | 是 | +| 88 | torch.lt | 是 | +| 89 | torch.max | 是 | +| 90 | torch.min | 是 | +| 91 | torch.ne | 是 | +| 92 | torch.sort | 是 | +| 93 | torch.topk | 是 | +| 94 | torch.fft | 否 | +| 95 | torch.ifft | 否 | +| 96 | torch.rfft | 否 | +| 97 | torch.irfft | 否 | +| 98 | torch.stft | 否 | +| 99 | torch.bartlett_window | 是 | +| 100 | torch.blackman_window | 是 | +| 101 | torch.hamming_window | 是 | +| 102 | torch.hann_window | 是 | +| 103 | torch.bincount | 是 | +| 104 | torch.broadcast_tensors | 是 | +| 105 | torch.cartesian_prod | 是 | +| 106 | torch.cdist | 是,仅支持mode=donot_use_mm_for_euclid_dist | +| 107 | torch.combinations | 否 | +| 108 | torch.cross | 是 | +| 109 | torch.cummax | 是 | +| 110 | torch.cummin | 是 | +| 111 | torch.cumprod | 是 | +| 112 | torch.cumsum | 是 | +| 113 | torch.diag | 是,仅支持diagonal=0场景 | +| 114 | torch.diag_embed | 是 | +| 115 | torch.diagflat | 是 | +| 116 | torch.diagonal | 是 | +| 117 | torch.einsum | 是 | +| 118 | torch.flatten | 是 | +| 119 | torch.flip | 是 | +| 120 | torch.rot90 | 是 | +| 121 | torch.histc | 否 | +| 122 | torch.meshgrid | 是 | +| 123 | torch.renorm | 是 | +| 124 | torch.repeat_interleave | 是 | +| 125 | torch.roll | 是 | +| 126 | torch.tensordot | 是 | +| 127 | torch.trace | 否 | +| 128 | torch.tril | 是 | +| 129 | torch.tril_indices | 是 | +| 130 | torch.triu | 是 | +| 131 | torch.triu_indices | 是 | +| 132 | torch.addbmm | 是 | +| 133 | torch.addmm | 是 | +| 134 | torch.addmv | 是 | +| 135 | torch.addr | 是 | +| 136 | torch.baddbmm | 是 | +| 137 | torch.bmm | 是 | +| 138 | torch.chain_matmul | 是 | +| 139 | torch.cholesky | 否 | +| 140 | torch.cholesky_inverse | 否 | +| 141 | torch.cholesky_solve | 否 | +| 142 | torch.dot | 是 | +| 143 | torch.eig | 否 | +| 144 | torch.geqrf | 否 | +| 145 | torch.ger | 是 | +| 146 | torch.inverse | 是 | +| 147 | torch.det | 否 | +| 148 | torch.logdet | 否 | +| 149 | torch.slogdet | 是 | +| 150 | torch.lstsq | 否 | +| 151 | torch.lu | 否 | +| 152 | torch.lu_solve | 否 | +| 153 | torch.lu_unpack | 否 | +| 154 | torch.matmul | 是 | +| 155 | torch.matrix_power | 是 | +| 156 | torch.matrix_rank | 是 | +| 157 | torch.mm | 是 | +| 158 | torch.mv | 是 | +| 159 | torch.orgqr | 否 | +| 160 | torch.ormqr | 否 | +| 161 | torch.pinverse | 是 | +| 162 | torch.qr | 是 | +| 163 | torch.solve | 否 | +| 164 | torch.svd | 是 | +| 165 | torch.svd_lowrank | 是 | +| 166 | torch.pca_lowrank | 是 | +| 167 | torch.symeig | 是 | +| 168 | torch.lobpcg | 否 | +| 169 | torch.trapz | 是 | +| 170 | torch.triangular_solve | 是 | ## Utilities diff --git "a/docs/zh/PyTorch\345\256\211\350\243\205\346\214\207\345\215\227/PyTorch\345\256\211\350\243\205\346\214\207\345\215\227.md" "b/docs/zh/PyTorch\345\256\211\350\243\205\346\214\207\345\215\227/PyTorch\345\256\211\350\243\205\346\214\207\345\215\227.md" index 4e367e1779..870b61d9ce 100644 --- "a/docs/zh/PyTorch\345\256\211\350\243\205\346\214\207\345\215\227/PyTorch\345\256\211\350\243\205\346\214\207\345\215\227.md" +++ "b/docs/zh/PyTorch\345\256\211\350\243\205\346\214\207\345\215\227/PyTorch\345\256\211\350\243\205\346\214\207\345\215\227.md" @@ -1,213 +1,182 @@ # PyTorch安装指南 -- [简介](#简介md) -- [手动编译安装](#手动编译安装md) - - [前提条件](#前提条件md) - - [安装PyTorch框架](#安装PyTorch框架md) - - [配置环境变量](#配置环境变量md) - - [安装混合精度模块](#安装混合精度模块md) -- [参考信息](#参考信息md) - - [CMake安装方法](#CMake安装方法md) - - [安装7.3.0版本gcc](#安装7-3-0版本gccmd) - - [安装“torch-\*.whl ”提示“torch 1.5.0xxxx”与“torchvision”所依赖的版本不匹配](#安装-torch--whl-提示-torch-1-5-0xxxx-与-torchvision-所依赖的版本不匹配md) -

简介

+- [简介](#简介) -用户在准备相关环境进行基于PyTorch框架模型的开发、运行时,可以选择在服务器中手动编译安装PyTorch框架相关模块。 +- [系统依赖库](#系统依赖库) -**图 1** 环境准备流程图 +- [Ascend配套软件](#Ascend配套软件) +- [安装方式](#安装方式) -![](figures/210926103326800.png) +- [运行](#运行) -

手动编译安装

+- [安装混合精度模块(可选)](#安装混合精度模块(可选)) -- **[前提条件](#前提条件md)** +- [FAQ](#FAQ) -- **[安装PyTorch框架](#安装PyTorch框架md)** +- [版本说明](#版本说明) -- **[配置环境变量](#配置环境变量md)** + -- **[安装混合精度模块](#安装混合精度模块md)** +# 简介 +本项目开发了PyTorch Adapter插件,用于昇腾适配PyTorch框架,为使用PyTorch框架的开发者提供昇腾AI处理器的超强算力。用户在准备相关环境进行基于PyTorch框架模型的开发、运行时,可以选择在服务器中手动编译安装PyTorch框架相关模块。

前提条件

-#### 前提条件 - - 需完成CANN开发或运行环境的安装,具体操作请参考《CANN 软件安装指南》。 +- python版本:3.7.5、3.8。 -| AscendPyTorch版本 | CANN版本 | 支持PyTorch版本 | -| :------------ | :----------- | :----------- | -| 3.0.2 | CANN 5.0.2 | 1.5.0.post2 | -| 2.0.3 | CANN 5.0.3 | 1.5.0.post3 | -| 2.0.4 | CANN 5.0.4 | 1.5.0.post4 | -| 3.0.rc1 | CANN 5.1.RC1 | 1.5.0.post5, 1.8.1.rc1 | +# 系统依赖库 -- 需安装3.12.0以上版本的CMake,安装方法请参考[CMake安装方法](#CMake安装方法md)。 +## CentOS & EulerOS -- 需确保已安装7.3.0以上版本的gcc,7.3.0版本gcc具体安装及使用方式请参考[安装7.3.0版本gcc](#安装7-3-0版本gccmd)。 +yum install -y cmake==3.12.0 zlib-devel libffi-devel openssl-devel libjpeg-turbo-devel gcc-c++ sqlite-devel dos2unix openblas git gcc==7.3.0 -- 需安装python版本为3.7.5、3.8。 +## Ubuntu -- 需注意torch1.5版本不支持python3.9编译安装(与官方保持一致)。 +apt-get install -y gcc==7.3.0 g++ make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev m4 cmake==3.12.0 dos2unix libopenblas-dev git -- 需确保环境中已安装patch、git工具,以Ubuntu和CentOS系统为例,命令如下: - - Ubuntu系统 - ``` - apt-get install patch - apt-get install git - ``` +# Ascend配套软件 - - CentOS系统 +| AscendPyTorch版本 | CANN版本 | 支持PyTorch版本 | Gitee分支名称 | +| :------------ | :----------- | :----------- | ------------ | +| 2.0.2 | CANN 5.0.2 | 1.5.0.post2 | 2.0.2.tr5 | +| 2.0.3 | CANN 5.0.3 | 1.5.0.post3 | 2.0.3.tr5 | +| 2.0.4 | CANN 5.0.4 | 1.5.0.post4 | 2.0.4.tr5 | +| 3.0.rc1 | CANN 5.1.RC1 | 1.5.0.post5 | v1.5.0-3.0.rc1 | +| 3.0.rc1 | CANN 5.1.RC1 | 1.8.1.rc1 | v1.8.1-3.0.rc1 | - ``` - yum install patch - yum install git - ``` +# 安装方式 +## 安装PyTorch依赖环境 -

安装PyTorch框架

+获取适配昇腾AI处理器的PyTorch源代码(即当前仓库代码)。 -#### 安装流程 + ``` + git clone -b v1.5.0-3.0.rc2 https://gitee.com/ascend/pytorch.git + ``` -1. 以root或非root用户登录服务器。 -2. 依次执行如下命令安装PyTorch依赖环境。 +## 获取原生PyTorch源代码和third_party代码 - 如果使用非root用户安装Python及其依赖,用户需要在本步骤中的每句命令结尾加上**--user**,命令示例为:**pip3.7 install pyyaml --user** +在当前仓库根目录pytorch/下获取原生PyTorch1.5.0的源代码。请关注PyTorch原生社区的安全板块与Issue板块是否有安全相关问题修复,并根据社区修复及时更新原生PyTorch代码。 - ``` - pip3 install pyyaml - pip3 install wheel - ``` +```sh +cd pytorch +git clone -b v1.5.0 --depth=1 https://github.com/pytorch/pytorch.git +``` -3. 获取PyTorch源代码。 - - 1. 运行如下命令,获取适配昇腾AI处理器的PyTorch源代码,并切换到所需的分支。 - - ``` - git clone https://gitee.com/ascend/pytorch.git - # 默认是master分支,若需要其他分支请使用git checkout 命令切换 - cd pytorch - git checkout -b v1.5.0 remotes/origin/v1.5.0 - ``` - - 下载的源码主要目录结构如下所示: - - ``` - ├── patch # 昇腾AI处理器适配补丁目录 - │ ├── pytorch1.5.0_npu.patch # pytorch1.5.0版本补丁 - ├── pytorch1.5.0 # pytorch1.5.0源码及测试目录 - │ ├── access_control_test.py - │ ├── src # 源码目录 - │ └── test # 测试用例存放目录 - └── scripts # 编译构建目录 - ``` - - 2. 在当前仓根目录“/pytorch“下获取原生PyTorch 1.5.0源代码。 - - ``` - git clone -b v1.5.0 --depth=1 https://github.com/pytorch/pytorch.git - ``` - - >![](public_sys-resources/icon-note.gif) **说明:** - >请关注PyTorch原生社区的安全板块与Issue板块是否有安全相关问题修复,并根据社区修复及时更新PyTorch原生代码。 - -3. 运行如下命令,进入原生pytorch代码目录“pytorch“,并获取PyTorch被动依赖代码。 - - ``` - cd pytorch - git submodule sync - git submodule update --init --recursive - ``` - - >![](public_sys-resources/icon-note.gif) **说明:** - >受网络波动影响,源码获取时间可能较长,下载过程中请耐心等待。 下载完成之后若没有报错,即生成了PyTorch及其依赖的第三方代码。 - -4. 编译生成适配昇腾AI处理器的PyTorch安装包。 - 1. 进入“pytorch/scripts“文件夹,执行转换脚本,生成适配昇腾AI处理器的全量代码。 - - ``` - cd ../scripts - # 若安装1.5.0版本 - bash gen.sh - ``` - - 将在"pytorch/pytorch"目录中生成适配昇腾AI处理器的全量代码。 - - 2. 进入到“pytorch/pytorch/“目录,依赖库安装。 - - ``` - cd ../pytorch - pip3 install -r requirements.txt - ``` - - 3. 编译生成pytorch的二进制安装包。 - - ``` - bash build.sh --python=3.7 - 或 - bash build.sh --python=3.8 - 或 - bash build.sh --python=3.9 #torch1.5不支持使用python3.9编译安装 - ``` - - 请指定环境中python版本进行编译。生成的二进制包在当前的dist目录下,即“pytorch/pytorch/dist”文件夹目录下。 - -5. 安装PyTorch。 +进入到pytorch/pytorch/目录下, 获取PyTorch被动依赖代码(获取时间较长,请耐心等待)。 - 进入“pytorch/pytorch/dist“文件夹目录,执行如下命令安装。 +```sh +cd pytorch +git submodule sync +git submodule update --init --recursive +``` - ``` - cd dist/ - pip3 install --upgrade torch-1.5.0+ascend.post5-cp37-cp37m-linux_{arch}.whl - ``` +完成且没有报错之后就生成了PyTorch及其依赖的三方代码 - **\{arch\}**表示架构信息,为aarch64或x86\_64。 +## 生成适配昇腾AI处理器的PyTorch全量代码。 - >![](public_sys-resources/icon-note.gif) **说明:** - >若对环境中的PyTorch进行升级时,需要先卸载环境中已安装的PyTorch软件包再执行[5. 安装PyTorch。](#zh-cn_topic_0000001152776301_li49671667141)可以通过执行如下命令查询环境上是否已安装PyTorch。 - >**pip3 list | grep torch** +进入到pytorch/scripts目录,根据选择的版本执行,执行脚本(注意:下载原生Pytorch源代码和下面版本要对应,否则可能出错) +```sh +cd ../scripts/ +bash gen.sh +``` -

配置环境变量

+会在pytorch/pytorch/目录中生成npu适配全量代码 -安装完软件包后,需要配置环境变量才能正常使用昇腾PyTorch。相关环境变量介绍参见[表1](#zh-cn_topic_0000001152616261_table42017516135)。 -1. 配置运行环境变量,在适配昇腾AI处理器的PyTorch源代码根目录中运行如下命令。 +## python依赖库 - ``` - cd ../ - source env.sh - ``` +进入到pytorch/pytorch/目录,依赖库安装: -2. 请依据实际场景,选择合适的HCCL初始化方式,并配置相应环境变量。 +```python3 +cd ../pytorch +pip3 install -r requirements.txt +``` - ``` - # 场景一:单机场景 + +## 编译torch的二进制包 + +在pytorch/pytorch/目录,执行 + +```sh +# python3.7版本 +bash build.sh +或者 +bash build.sh --python=3.7(推荐) + +# python3.8版本 +bash build.sh --python=3.8 +``` + +生成的二进制包在pytorch/pytorch/dist/目录下 + +## 安装pytorch + +**x86_64:** + +torch-1.5.0+ascend-cp37-cp37m-linux_x86_64.whl (实际可能附带小版本号例如torch-1.5.0.post2+ascend-cp37-cp37m-linux_x86_64.whl) + +```shell +cd dist +pip3 uninstall torch +pip3 install --upgrade torch-1.5.0+ascend-cp37-cp37m-linux_x86_64.whl +``` + + +**arm:** + +torch-1.5.0+ascend-cp37-cp37m-linux_aarch64.whl (实际可能附带小版本号例如torch-1.5.0.post2+ascend-cp37-cp37m-linux_aarch64.whl) + +```shell +cd dist +pip3 uninstall torch +pip3 install --upgrade torch-1.5.0+ascend-cp37-cp37m-linux_aarch64.whl +``` + + +# 运行 + +## 运行环境变量 + +在pytorch/pytorch/中执行设置环境变量脚本 + +``` +cd ../ +source env.sh +``` + + +## 自定义环境变量 + +依据实际场景,选择合适的HCCL初始化方式,并配置相应环境变量: + +``` +# 场景一:单机场景 export HCCL_WHITELIST_DISABLE=1 # 关闭HCCL通信白名单 - # 场景二:多机场景。 +# 场景二:多机场景。 export HCCL_WHITELIST_DISABLE=1 # 关闭HCCL通信白名单 export HCCL_IF_IP="1.1.1.1" # “1.1.1.1”为示例使用的host网卡IP,请根据实际修改。需要保证使用的网卡IP在集群内是互通的。 - ``` +``` -3. (可选)NPU场景下配置功能或性能环境变量。默认为不开启。 +可选的环境变量可能会对运行的模型产生影响: - ``` - export DYNAMIC_COMPILE_ENABLE=1 # 动态shape特性功能,针对shape变化场景,可选,开启设置为1 - export COMBINED_ENABLE=1 # 非连续两个算子组合类场景优化,可选,开启设置为1 - export TRI_COMBINED_ENABLE=1 # 非连续三个算子组合类场景优化,可选,开启设置为1 - export ACL_DUMP_DATA=1 # 算子数据dump功能,调试时使用,可选,开启设置为1 - export DYNAMIC_OP="ADD#MUL" # 算子实现,ADD和MUL算子在不同场景下有不同的性能表现。可选 - ``` +``` -4. (可选)当系统为openEuler及其继承操作系统时,如UOS,需设置此命令,取消CPU绑核。 +export COMBINED_ENABLE=1 # 非连续两个算子组合类场景优化,可选,开启设置为1 +export TRI_COMBINED_ENABLE=1 # 非连续三个算子组合类场景优化,可选,开启设置为1 +export ACL_DUMP_DATA=1 # 算子数据dump功能,调试时使用,可选,开启设置为1 + +``` +当系统为openEuler及其继承操作系统时,如UOS,需设置此命令,取消CPU绑核。 ``` # unset GOMP_CPU_AFFINITY ``` - - **表 1** 环境变量说明 @@ -248,11 +217,6 @@

aicpu算子包路径。

-

TASK_QUEUE_ENABLE

- -

使用异步任务下发,异步调用acl接口。建议开启,开启设置为1。

- -

HCCL_WHITELIST_DISABLE

配置在使用HCCL时是否开启通信白名单。

@@ -285,11 +249,6 @@ -

DYNAMIC_COMPILE_ENABLE

- -

(可选)动态shape特性功能,针对shape变化场景,开启设置为1。

- -

COMBINED_ENABLE

(可选)非连续两个算子组合类场景优化,开启设置为1。

@@ -305,11 +264,6 @@

(可选)算子数据dump功能,调试时使用,开启设置为1。

-

DYNAMIC_OP

- -

(可选)算子实现,ADD和MUL算子在不同场景下有不同的性能表现。默认不设置。

- -

unset GOMP_CPU_AFFINITY

(可选)当系统为openEuler及其继承操作系统时,如UOS,需设置此命令,取消CPU绑核。

@@ -318,244 +272,259 @@ +## 执行单元测试脚本 +验证运行, 输出结果OK -

安装混合精度模块

-#### 前提条件 +```shell +// 根据前述版本,选择对应的测试脚本,以下为1.5.0版本 +cd ../ +python3 pytorch1.5.0/test/test_npu/test_network_ops/test_div.py +``` +# 安装混合精度模块(可选) -1. 请确保运行环境中适配昇腾AI处理器的PyTorch框架能正常使用。 -2. 编译安装Apex前,需参见[配置环境变量](#配置环境变量md)配置好编译过程依赖的环境变量。 +请用户根据以下功能需要选择使用,若需要安装Apex模块请参考相关[README文档](https://gitee.com/ascend/apex/tree/v1.5.0/)进行编译安装Apex模块。 -#### 安装流程 +- APEX + - O1配置模式:Conv,Matmul等使用float16精度计算,其他如softmax、BN使用float32精度。 + - O2配置模式:除BN使用float32精度外,其他部分使用float16精度。 + - 静态loss scale:静态设置参数确保混合精度训练收敛。 + - 动态loss scale:动态计算loss scale的值并判断是否溢出。 -1. 以root或非root用户登录服务器。 -2. 获取apex源代码。 +# FAQ - 1. 运行如下命令,获取适配昇腾AI处理器的apex源代码。 +## CPU架构为ARM架构时,由于社区未提供ARM架构CPU版本的torch包,无法使用PIP3命令安装PyTorch1.5.0,需要使用源码编译安装。 - ``` - git clone -b v1.5.0 https://gitee.com/ascend/apex.git - ``` +下载PyTorch v1.5.0源码包。 - 下载的源码主要目录结构如下所示: +``` +git clone -b v1.5.0 https://github.com/pytorch/pytorch.git --depth=1 pytorch_v1.5.0 +``` - ``` - apex - │ ├─patch # 昇腾AI处理器适配补丁目录 - │ ├─npu.patch - │ ├─scripts # 编译构建目录 - │ ├─gen.sh - │ ├─src # 源码目录 - │ ├─tests # 测试用例存放目录 - ``` +进入源码包获取被动依赖代码。 - 2. 运行如下命令,进入“apex“目录,并获取原生apex源代码。 +``` +cd pytorch_v1.5.0 +git submodule sync +git submodule update --init --recursive +``` - ``` - cd apex - git clone https://github.com/NVIDIA/apex.git - ``` +执行编译安装。 - 下载原生apex源码后,代码主要目录结构如下所示: +``` +python3 setup.py install +``` - ``` - apex - │ ├─apex # 原生apex代码目录 - │ ├─patch # 昇腾AI处理器适配补丁目录 - │ ├─npu.patch - │ ├─scripts # 编译构建目录 - │ ├─gen.sh - │ ├─src # 源码目录 - │ ├─tests # 测试用例存放目录 - ``` - 3. 进入原生apex代码目录,即“apex/apex“目录。切换至commitid为4ef930c1c884fdca5f472ab2ce7cb9b505d26c1a的代码分支。 - ``` - cd apex - git checkout 4ef930c1c884fdca5f472ab2ce7cb9b505d26c1a - ``` +## 在PIP设置为华为源时,安装requirments.txt中的typing依赖后,会导致python环境错误。 - >![](public_sys-resources/icon-note.gif) **说明:** - >受网络波动影响,源码获取时间可能较长,下载过程中请耐心等待。 +在PIP设置为华为源时,需打开requirments.txt文件,删除typing依赖,再执行命令。 -3. 编译生成适配昇腾AI处理器的apex安装包。 - 1. 进入“apex/scripts“文件夹,执行转换脚本,生成适配昇腾AI处理器的全量代码。 +``` +pip3 install -r requirments.txt +``` - ``` - cd ../scripts - bash gen.sh - ``` - 将在"apex/apex"目录中生成适配昇腾AI处理器的全量代码。 - 2. 进入适配后的全量代码目录,即“apex/apex“目录,编译生成apex的二进制安装包。 +## import torch 报找不到libhccl.so错误 - ``` - cd ../apex - python3 setup.py --cpp_ext --npu_float_status bdist_wheel - ``` +未配置环境变量,需通过env.sh脚本配置 - Python版本需与PyTorch使用的Python一致,生成的二进制包在当前的dist目录下,即“apex/apex/dist”文件夹目录下。 +``` +source pytorch/pytorch1.5.0/src/env.sh +``` -4. 安装apex。 - 进入“apex/apex/dist“文件夹目录,执行如下命令安装。 - ``` - pip3 install --upgrade apex-0.1+ascend-cp37-cp37m-linux_{arch}.whl - ``` +## 编译过程执行bash build.sh报错no module named yaml/typing_extensions. - **\{arch\}**表示架构信息,为aarch64或x86\_64。 +pytorch编译依赖 yaml库和typing_extensions库,需要手动安装。 - >![](public_sys-resources/icon-note.gif) **说明:** - >若对环境中的Apex进行升级时,需要先卸载环境中已安装的PyTorch软件包再执行[4. 安装apex。](#zh-cn_topic_0000001106176190_li425495374416)可以通过执行如下命令查询环境上是否已安装PyTorch。 - >**pip3 list | grep apex** +``` +pip3 install pyyaml +pip3 install typing_extensions +``` +安装成功后,注意需要执行make clean在执行bash build.sh进行编译,否则可能因缓存出现未知编译错误。 -

参考信息

-- **[CMake安装方法](#CMake安装方法md)** -- **[安装7.3.0版本gcc](#安装7-3-0版本gccmd)** +## 运行遇到找不到te问题 -- **[安装“torch-\*.whl ”提示“torch 1.5.0xxxx”与“torchvision”所依赖的版本不匹配](#安装-torch--whl-提示-torch-1-5-0xxxx-与-torchvision-所依赖的版本不匹配md)** +开发态: +``` +cd /urs/local/Ascend/ascend-toolkit/latest/{arch}-linux/lib64 +``` -

CMake安装方法

+用户态: -CMake版本升级为3.12.1的方法 +``` +cd /urs/local/Ascend/nnae/latest/{arch}-linux/lib64 -1. 获取Cmake软件包。 +pip3 install --upgrade topi-0.4.0-py3-none-any.whl - ``` - wget https://cmake.org/files/v3.12/cmake-3.12.1.tar.gz --no-check-certificate - ``` +pip3 install --upgrade te-0.4.0-py3-none-any.whl +``` -2. 解压并进入软件包目录。 - ``` - tar -xf cmake-3.12.1.tar.gz - cd cmake-3.12.1/ - ``` -3. 执行配置、编译和安装命令。 +## 命令行安装cmake依赖时提示找不到包、编译cmake报错版本过低,可使用安装脚本或源码编译安装。 - ``` - ./configure --prefix=/usr/local/cmake - make && make install - ``` +下载安装脚本安装cmake。(参考cmake官网) -4. 设置软连接。 + X86_64环境推荐脚本安装:cmake-3.12.0-Linux-x86_64.sh - ``` - ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake - ``` +部分源下载cmake时会提示无法找到包,需要使用源码编译安装。 -5. 执行如下命令验证是否安装成功。 +1. 获取Cmake软件包。 - ``` - cmake --version - ``` + ``` + wget https://cmake.org/files/v3.12/cmake-3.12.0.tar.gz --no-check-certificate + ``` - 如显示“cmake version 3.12.1”则表示安装成功。 +2. 解压并进入软件包目录。 + ``` + tar -xf cmake-3.12.0.tar.gz + cd cmake-3.12.0/ + ``` -

安装7.3.0版本gcc

+3. 执行配置、编译和安装命令。 + + ``` + ./configure --prefix=/usr/local/cmake + make && make install + ``` + +4. 设置软连接。 + + ``` + ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake + ``` + +5. 执行如下命令验证是否安装成功。 + + ``` + cmake --version + ``` + + 如显示“cmake version 3.12.0”则表示安装成功。 + + + +## 命令行安装gcc依赖时提示找不到包、编译时gcc报错问题 + +部分源下载gcc时会提示无法找到包,需要使用源码编译安装。 以下步骤请在root用户下执行。 -1. 下载gcc-7.3.0.tar.gz,下载地址为[https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz](https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz)。 -2. 安装gcc时候会占用大量临时空间,所以先执行下面的命令清空/tmp目录: +1. 下载gcc-7.3.0.tar.gz,下载地址为[https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz](https://gitee.com/link?target=https%3A%2F%2Fmirrors.tuna.tsinghua.edu.cn%2Fgnu%2Fgcc%2Fgcc-7.3.0%2Fgcc-7.3.0.tar.gz)。 - ``` - sudo rm -rf /tmp/* - ``` +2. 安装gcc时候会占用大量临时空间,所以先执行下面的命令清空/tmp目录: -3. 安装依赖(以CentOS和Ubuntu系统为例)。 - - CentOS执行如下命令安装。 + ``` + sudo rm -rf /tmp/* + ``` - ``` - yum install bzip2 - ``` +3. 安装依赖(以CentOS和Ubuntu系统为例)。 - - Ubuntu执行如下命令安装。 + - CentOS执行如下命令安装。 - ``` - apt-get install bzip2 - ``` + ``` + yum install bzip2 + ``` -4. 编译安装gcc。 - 1. 进入gcc-7.3.0.tar.gz源码包所在目录,解压源码包,命令为: + - Ubuntu执行如下命令安装。 - ``` - tar -zxvf gcc-7.3.0.tar.gz - ``` + ``` + apt-get install bzip2 + ``` - 2. 进入解压后的文件夹,执行如下命令下载gcc依赖包: +4. 编译安装gcc。 - ``` - cd gcc-7.3.0 - ./contrib/download_prerequisites - ``` + 1. 进入gcc-7.3.0.tar.gz源码包所在目录,解压源码包,命令为: - 如果执行上述命令报错,需要执行如下命令在“gcc-7.3.0/“文件夹下下载依赖包: + ``` + tar -zxvf gcc-7.3.0.tar.gz + ``` - ``` - wget http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 - wget http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 - wget http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz - wget http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2 - ``` + 2. 进入解压后的文件夹,执行如下命令下载gcc依赖包: - 下载好上述依赖包后,重新执行以下命令: + ``` + cd gcc-7.3.0 + ./contrib/download_prerequisites + ``` - ``` - ./contrib/download_prerequisites - ``` + 如果执行上述命令报错,需要执行如下命令在“gcc-7.3.0/“文件夹下下载依赖包: - 如果上述命令校验失败,需要确保依赖包为一次性下载成功,无重复下载现象。 + ``` + wget http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 + wget http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 + wget http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz + wget http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2 + ``` - 3. 执行配置、编译和安装命令: + 下载好上述依赖包后,重新执行以下命令: - ``` - ./configure --enable-languages=c,c++ --disable-multilib --with-system-zlib --prefix=/usr/local/linux_gcc7.3.0 - make -j15 # 通过grep -w processor /proc/cpuinfo|wc -l查看cpu数,示例为15,用户可自行设置相应参数。 - make install - ``` + ``` + ./contrib/download_prerequisites + ``` - >![](public_sys-resources/icon-notice.gif) **须知:** - >其中“--prefix“参数用于指定linux\_gcc7.3.0安装路径,用户可自行配置,但注意不要配置为“/usr/local“及“/usr“,因为会与系统使用软件源默认安装的gcc相冲突,导致系统原始gcc编译环境被破坏。示例指定为“/usr/local/linux\_gcc7.3.0“。 + 如果上述命令校验失败,需要确保依赖包为一次性下载成功,无重复下载现象。 + 3. 执行配置、编译和安装命令: -5. 配置环境变量。 + ``` + ./configure --enable-languages=c,c++ --disable-multilib --with-system-zlib --prefix=/usr/local/linux_gcc7.3.0 + make -j15 # 通过grep -w processor /proc/cpuinfo|wc -l查看cpu数,示例为15,用户可自行设置相应参数。 + make install + ``` - 当用户执行训练时,需要用到gcc升级后的编译环境,因此要在训练脚本中配置环境变量,通过如下命令配置。 + > ![img](figures/icon-notice.gif) **须知:** 其中“--prefix“参数用于指定linux_gcc7.3.0安装路径,用户可自行配置,但注意不要配置为“/usr/local“及“/usr“,因为会与系统使用软件源默认安装的gcc相冲突,导致系统原始gcc编译环境被破坏。示例指定为“/usr/local/linux_gcc7.3.0“。 - ``` - export LD_LIBRARY_PATH=${install_path}/lib64:${LD_LIBRARY_PATH} - ``` - 其中$\{install\_path\}为[3.](#zh-cn_topic_0000001135347812_zh-cn_topic_0000001173199577_zh-cn_topic_0000001172534867_zh-cn_topic_0276688294_li1649343041310)中配置的gcc7.3.0安装路径,本示例为“/usr/local/gcc7.3.0/“。 - >![](public_sys-resources/icon-note.gif) **说明:** - >本步骤为用户在需要用到gcc升级后的编译环境时才配置环境变量。 +## 找不到libblas.so问题 + +环境缺少openblas库,需要安装openblas库 + +Centos,EulerOS环境 + +```sh +yum -y install openblas +``` + +Ubuntu环境 + +```sh +apt install libopenblas-dev +``` + + +## ARM环境pip安装torchvision失败 -

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

+可采用源码安装(需先安装昇腾pytorch并通过env.sh配置环境变量) -#### 现象描述 +``` +git clone -b v0.6.0 https://github.com/pytorch/vision.git +cd vision +python setup.py install +``` -安装“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"。 +验证torchvision是否安装成功 -![](figures/zh-cn_image_0000001190081735.png) +``` +python -c "import torchvision" +``` -#### 可能原因 +若不报错,则说明安装成功 -安装torch时,会自动触发torchvision进行依赖版本检查,环境中安装的torchvision版本为0.6.0,检查时发现我们安装的torch-\*.whl的版本号与要求的1.5.0不一致,所以提示报错,但实际安装成功 。 -#### 处理方法 -对实际结果无影响,无需处理。 +# 版本说明 +版本说明请参阅[ReleseNote](docs/zh/RELEASENOTE) \ No newline at end of file diff --git "a/docs/zh/PyTorch\346\250\241\345\236\213\345\244\232\346\234\272\345\244\232\345\215\241\350\256\255\347\273\203\351\200\202\351\205\215\346\214\207\345\215\227.md" "b/docs/zh/PyTorch\346\250\241\345\236\213\345\244\232\346\234\272\345\244\232\345\215\241\350\256\255\347\273\203\351\200\202\351\205\215\346\214\207\345\215\227.md" index 5dd8b21b75..f8fb1fa0e0 100644 --- "a/docs/zh/PyTorch\346\250\241\345\236\213\345\244\232\346\234\272\345\244\232\345\215\241\350\256\255\347\273\203\351\200\202\351\205\215\346\214\207\345\215\227.md" +++ "b/docs/zh/PyTorch\346\250\241\345\236\213\345\244\232\346\234\272\345\244\232\345\215\241\350\256\255\347\273\203\351\200\202\351\205\215\346\214\207\345\215\227.md" @@ -714,12 +714,12 @@ pytorch分布式训练基本概念 3. 在每台服务器上分别打开**/etc/hosts**文件,在该文件中添加本服务器对应的IP地址和主机名,且需要添加到该文件的首行。如果文件中已添加,则跳过此步骤。添加内容示例如下: ``` - 10.90.140.199 ubuntu + xxx.xxx.xxx.111 ubuntu ``` - 其中10.90.140.199为该服务器的IP地址,ubuntu为主机名。 + 其中xxx.xxx.xxx.111为该服务器的IP地址,ubuntu为主机名。 - 4. 在第一台服务器执行如下命令生成公钥(例如第一台服务器IP为10.90.140.199)。 + 4. 在第一台服务器执行如下命令生成公钥(例如第一台服务器IP为xxx.xxx.xxx.111)。 ``` cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost @@ -748,7 +748,7 @@ pytorch分布式训练基本概念 6. 在其他每台服务器上执行如下命令将第一台服务器制作好的公钥复制到其他每台服务器内。 cd ~/.ssh/ - scp root@10.90.140.199:~/.ssh/authorized_keys ./ + scp root@xxx.xxx.xxx.111:~/.ssh/authorized_keys ./ 7. 在每台服务器执行如下命令测试免密登录。 @@ -756,9 +756,9 @@ pytorch分布式训练基本概念 ssh 用户名@IP地址 ``` - 例如:在第一台服务器10.90.140.199免密登录服务器10.90.140.231,执行**ssh root@10.90.140.231**命令。 + 例如:在第一台服务器xxx.xxx.xxx.111免密登录服务器xxx.xxx.xxx.222,执行**ssh root@xxx.xxx.xxx.222**命令。 - 若显示类似如下信息,说明已免密登录服务器10.90.140.231。 + 若显示类似如下信息,说明已免密登录服务器xxx.xxx.xxx.222。 ``` Linux ubuntu 4.19.28 #1 SMP Tue Jun 23 19:05:23 EDT 2020 x86_64 @@ -776,7 +776,7 @@ pytorch分布式训练基本概念 ``` logout - Connection to 10.90.140.231 closed. + Connection to xxx.xxx.xxx.222 closed. ``` 3. 使用OpenMPI拉起模型训练。 -- Gitee