4 Star 4 Fork 843

ckirchhoff / pytorch

forked from Ascend / pytorch 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-3-Clause

AscendPyTorch

简介

本项目开发了PyTorch Adapter插件,用于昇腾适配PyTorch框架,为使用PyTorch框架的开发者提供昇腾AI处理器的超强算力。用户在准备相关环境进行基于PyTorch框架模型的开发、运行时,可以选择在服务器中手动编译相关模块。 当前master分支为在研版本,上下游依赖存在变动可能,功能较不稳定,推荐使用Ascend配套软件表格中分支对应版本。master分支的安装使用请参考FAQ-使用源码编译安装PyTorch框架

文档

有关安装指南、模型迁移和训练/推理教程和API列表等更多详细信息,请参考昇腾社区PyTorch Adapter

文档名称 文档链接
PyTorch 安装指南 参考链接
PyTorch 网络模型迁移和训练 参考链接
PyTorch 在线推理 参考链接
PyTorch 算子适配 参考链接
PyTorch API清单 参考链接

快速安装PyTorch

昇腾开发PyTorch Adapter插件用于适配PyTorch框架,为使用PyTorch框架的开发者提供昇腾AI处理器的超强算力,本章节指导用户安装PyTorch框架和PyTorch Adapter插件。

对应分支代码包下载

说明: PyTorch配套的Python版本是:Python3.8.x(3.8.0~3.8.11)、Python3.9.x(3.9.0~3.9.2)。

安装PyTorch时,请参见表1下载对应分支代码包。

表 1 Ascend配套软件

AscendPyTorch版本

CANN版本

支持PyTorch版本

代码分支名称

AscendHub镜像版本/名称(获取链接

5.0.RC2

CANN 6.3.RC2

2.0.1.rc1

v2.0.1-5.0.rc2

-

1.8.1.post2

v1.8.1-5.0.rc2

-

1.11.0.post1

v1.11.0-5.0.rc2

-

5.0.RC1

CANN 6.3.RC1

1.8.1.post1

v1.8.1-5.0.rc1

-

1.11.0

v1.11.0-5.0.rc1

-

3.0.0

CANN 6.0.1

1.5.0.post8

v1.5.0-3.0.0

22.0.0/pytorch-modelzoo

1.8.1

v1.8.1-3.0.0

22.0.0-1.8.1/pytorch-modelzoo

1.11.0.rc2(beta)

v1.11.0-3.0.0

-

3.0.rc3

CANN 6.0.RC1

1.5.0.post7

v1.5.0-3.0.rc3

22.0.RC3/pytorch-modelzoo

1.8.1.rc3

v1.8.1-3.0.rc3

22.0.RC3-1.8.1/pytorch-modelzoo

1.11.0.rc1(beta)

v1.11.0-3.0.rc3

-

3.0.rc2

CANN 5.1.RC2

1.5.0.post6

v1.5.0-3.0.rc2

22.0.RC2/pytorch-modelzoo

1.8.1.rc2

v1.8.1-3.0.rc2

22.0.RC2-1.8.1/pytorch-modelzoo

3.0.rc1

CANN 5.1.RC1

1.5.0.post5

v1.5.0-3.0.rc1

22.0.RC1/pytorch-modelzoo

1.8.1.rc1

v1.8.1-3.0.rc1

-

2.0.4

CANN 5.0.4

1.5.0.post4

2.0.4.tr5

21.0.4/pytorch-modelzoo

2.0.3

CANN 5.0.3

1.5.0.post3

2.0.3.tr5

21.0.3/pytorch-modelzoo

2.0.2

CANN 5.0.2

1.5.0.post2

2.0.2.tr5

21.0.2/pytorch-modelzoo

安装PyTorch环境依赖

执行如下命令安装。如果使用非root用户安装,需要在命令后加**--user**,例如:pip3 install pyyaml --user,pip3 install wheel --user

pip3 install pyyaml
pip3 install wheel

安装PyTorch

推荐用户使用编好的二进制whl包安装PyTorch。用户也可选择编译安装方式安装PyTorch。请参考编译安装PyTorch

  1. 安装官方torch包。 官方torch的master分支,并无每日构建包,请下载官方源码并通过编译安装,请参考编译安装PyTorch

  2. 安装PyTorch插件torch_npu。

    master分支暂不提供对应的torch_npu预编译安装包,请参考编译安装PyTorch

  3. 安装对应框架版本的torchvision。

    # PyTorch master需安装最新的torchvision,当前最新的为0.15.1
    pip3 install torchvision==0.15.1 --no-deps

安装APEX混合精度模块

混合精度训练是在训练时混合使用单精度(float32)与半精度(float16)数据类型,将两者结合在一起,并使用相同的超参数实现了与float32几乎相同的精度。在迁移完成、训练开始之前,基于NPU芯片的架构特性,用户需要开启混合精度,可以提升模型的性能。APEX混合精度模块是一个集优化性能、精度收敛于一身的综合优化库,可以提供不同场景下的混合精度训练支持。APEX模块的使用介绍可参考《PyTorch 网络模型迁移和训练指南》中的“混合精度说明“章节。

请参见apex: Ascend apex adapter - Gitee.com安装混合精度模块。

建议与交流

热忱希望各位在用户社区加入讨论,并贡献您的建议,我们会尽快给您回复。

分支维护策略

Ascend PyTorch的版本分支有以下几种维护阶段:

状态 持续时间 说明
Planning 1 - 3 months 特性规划。
Development 3 months 特性开发。
Maintained 6 - 12 months 允许所有问题修复的合入,并发布版本。
Unmaintained 0 - 3 months 允许所有问题修复的合入,无专人维护,不再发布版本。
End Of Life (EOL) N/A 不再接受修改合入该分支。

现有分支维护状态

分支名 当前状态 上线时间 后续状态 EOL 日期
v2.0.2 EOL 2021/7/29 N/A
v2.0.3 EOL 2021/10/15 N/A
v2.0.4 EOL 2022/1/15 N/A
v3.0.rc1 EOL 2022/4/10 N/A
v3.0.rc2 UnMaintained 2022/7/15 EOL 2023-10-15 estimated
v3.0.rc3 Maintained 2022/10/20 Unmaintained 2023-10-20 estimated
v3.0.0 Maintained 2023/1/18 Unmaintained 2024-1-18 estimated
v5.0.rc1 Maintained 2023/4/19 Unmaintained 2024-4-19 estimated
v5.0.rc2 Maintained 2023/7/19 Unmaintained 2024-7-19 estimated

FAQ

使用PyTorch原生框架在ARM CPU上算子计算结果异常

当前使用的PyTorch官方原生框架在ARM CPU上运行时,算子计算结果会出现异常,此问题为原生框架社区的已知问题,详细内容可参考PyTorch官方社区ISSUE

可通过以下方式解决:

  • 修改算子输入数据类型,使用float64数据类型进行运算。
  • 升级编译arm版本PyTorch使用的gcc编译器至9.4版本及以上,并使用相同编译器重新编译torch_npu、apex、mmcv等其他配套软件(避免因编译器版本不匹配导致兼容性问题)。

使用源码编译安装PyTorch框架。

安装依赖

选择编译安装方式安装时需要安装系统依赖。此处以CentOS与Ubuntu操作系统为例目前支持CentOS与Ubuntu操作系统。

EulerOS、OpenEuler、BCLinux、Kylin、UOS20 1020e系统可参考CentOS进行安装。

Debian、UOS20、UOS20 SP1、Linx系统可参考Ubuntu进行安装。

  • CentOS

    yum install -y patch zlib-devel libffi-devel openssl-devel libjpeg-turbo-devel gcc-c++ sqlite-devel dos2unix openblas git 
    yum install -y gcc==7.5.0 cmake==3.18.0 # gcc7.5.0版本及以上,cmake3.18.0版本及以上。
  • Ubuntu

    apt-get install -y patch 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 dos2unix libopenblas-dev git 
    apt-get install -y gcc==7.5.0 cmake==3.18.0 # gcc7.5.0版本及以上,cmake3.18.0版本及以上。

安装

以下操作步骤以安装PyTorch master分支为例。

  1. 安装官方torch包。

    • 请通过源码进行编译安装
      1. 下载PyTorch master源码包。

        git clone https://github.com/pytorch/pytorch.git --depth=1 pytorch_master
      2. 进入源码包获取被动依赖代码。

        cd pytorch_master
        git submodule sync
        git submodule update --init --recursive
      3. 在aarch64架构下需要配置环境变量。

        export USE_XNNPACK=0
      4. 执行编译安装。

        python3 setup.py install

安装torch_npu

  1. 编译生成PyTorch插件的二进制安装包。

    # 下载对应PyTorch版本分支代码,进入插件根目录
    git clone https://gitee.com/ascend/pytorch.git 
    cd pytorch
    # 指定Python版本编包方式,以Python3.8为例,其他Python版本请使用 --python=3.9
    bash ci/build.sh --python=3.8
  2. 安装pytorch/dist目录下生成的插件torch_npu包,如果使用非root用户安装,需要在命令后加**--user**。

    pip3 install --upgrade dist/torch_npu-2.1.0-cp38-cp38m-linux_aarch64.whl
    # 若用户在x86架构下安装插件,请替换为对应的whl包。
  3. 安装对应框架版本的torchvision。

    # PyTorch master分支需安装最新的torchvision,当前最新的为0.15.1
    pip3 install torchvision==0.15.1 --no-deps
  4. 配置环境变量,验证是否安装成功。

    1. 配置CANN环境变量脚本。

      source <CANN软件安装目录>/<CANN软件路径>/set_env.sh

      环境变量脚本的默认路径一般为:/usr/local/Ascend/ascend-toolkit/set_env.sh,其中ascend-toolkit路径取决于安装的CANN软件名称。

    2. 执行如下命令,验证PyTorch是否安装成功。

      python3 -c "import torch;import torch_npu; a = torch.randn(3, 4).npu(); print(a + a);"

      显示以下内容证明PyTorch框架与插件安装成功。

      tensor([[-0.6066, 6.3385,  0.0379, 3.3356],
              [ 2.9243, 3.3134, -1.5465, 0.1916],
              [-2.1807, 0.2008, -1.1431, 2.1523]], device='npu:0')

在PIP设置为华为源时,安装requirements.txt中的typing依赖后,会导致python环境错误。

在PIP设置为华为源时,需打开requirements.txt文件,删除typing依赖,再执行命令。

pip3 install -r requirements.txt

编译过程执行bash build.sh报错no module named yaml/typing_extensions.

pytorch编译依赖 yaml库和typing_extensions库,需要手动安装。

pip3 install pyyaml

pip3 install typing_extensions

安装成功后,注意需要执行make clean在执行bash build.sh进行编译,否则可能因缓存出现未知编译错误。

运行遇到找不到te问题

开发态:

cd /urs/local/Ascend/ascend-toolkit/latest/{arch}-linux/lib64  #{arch}为架构名称
pip3 install --upgrade te-0.4.0-py3-none-any.whl

用户态:

cd /urs/local/Ascend/nnae/latest/{arch}-linux/lib64  #{arch}为架构名称
pip3 install --upgrade te-0.4.0-py3-none-any.whl

命令行安装cmake依赖时提示找不到包、编译cmake报错版本过低,可使用安装脚本或源码编译安装。

方法一:下载安装脚本安装cmake。(参考cmake官网)

​ X86_64环境脚本安装:cmake-3.18.0-Linux-x86_64.sh

​ aarch64环境脚本安装:cmake-3.18.0-Linux-aarch64.sh

  1. 执行命令。

    ./cmake-3.18.0-Linux-{arch}.sh # {arch}为架构名称
  2. 设置软连接。

    ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake
  3. 执行如下命令验证是否安装成功。

    cmake --version

    如显示“cmake version 3.18.0”则表示安装成功。

方法二:使用源码编译安装。

  1. 获取cmake软件包。

    wget https://cmake.org/files/v3.18/cmake-3.18.0.tar.gz --no-check-certificate
  2. 解压并进入软件包目录。

    tar -xf cmake-3.18.0.tar.gz
    cd cmake-3.18.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.18.0”则表示安装成功。

命令行安装gcc依赖时提示找不到包、编译时gcc报错问题

部分源下载gcc时会提示无法找到包,需要使用源码编译安装。

以下步骤请在root用户下执行。

  1. 下载gcc-7.5.0.tar.gz,下载地址为https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-7.5.0/gcc-7.5.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.5.0.tar.gz源码包所在目录,解压源码包,命令为:

      tar -zxvf gcc-7.5.0.tar.gz
    2. 进入解压后的文件夹,执行如下命令下载gcc依赖包:

      cd gcc-7.5.0
      ./contrib/download_prerequisites

      如果执行上述命令报错,需要执行如下命令在“gcc-7.5.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

      下载好上述依赖包后,重新执行以下命令:

      ./contrib/download_prerequisites

      如果命令校验失败,需要确认上述依赖包在文件夹中的唯一性,无重复下载,若存在重复的依赖包,需删除。

    3. 执行配置、编译和安装命令:

      ./configure --enable-languages=c,c++ --disable-multilib --with-system-zlib --prefix=/usr/local/linux_gcc7.5.0
      make -j15    # 通过grep -w processor /proc/cpuinfo|wc -l查看cpu数,示例为15,用户可自行设置相应参数。
      make install    

      须知: 其中“--prefix“参数用于指定linux_gcc7.5.0安装路径,用户可自行配置,但注意不要配置为“/usr/local“及“/usr“,因为会与系统使用软件源默认安装的gcc相冲突,导致系统原始gcc编译环境被破坏。示例指定为“/usr/local/linux_gcc7.5.0“。

    4. 修改软连接。

      ln -s ${install_path}/gcc-7.5.0/bin/gcc /usr/bin/gcc
      ln -s ${install_path}/gcc-7.5.0/bin/g++ /usr/bin/g++
      ln -s ${install_path}/gcc-7.5.0/bin/c++ /usr/bin/c++

    5.配置环境变量。

    当用户执行训练时,需要用到gcc升级后的编译环境,因此要在训练脚本中配置环境变量,通过如下命令配置。

    export LD_LIBRARY_PATH=${install_path}/lib64:${LD_LIBRARY_PATH}

    其中${install_path}为3.中配置的gcc7.5.0安装路径,本示例为“/usr/local/gcc7.5.0/“。

    说明: 本步骤为用户在需要用到gcc升级后的编译环境时才配置环境变量。

若存在pytorch编译不过,请检查软连接的库是否正确。

libstdc++->libstdc++.so.6.0.24(7.5.0)

找不到libblas.so问题

环境缺少openblas库,需要安装openblas库

Centos,EulerOS环境

yum -y install openblas

Ubuntu环境

apt install libopenblas-dev

容器中未挂载device问题

在容器中运行脚本出现NPU相关ERROR。由于启动容器实例时,未挂载device参数,导致无法正常启动实例。

请用户参考以下命令,重启容器。

docker run -it --ipc=host \
--device=/dev/davinciX \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/Ascend/driver \
-v /usr/local/dcmi \
-v /usr/local/bin/npu-smi \
${镜像名称}:{tag} \
/bin/bash

参数说明:

/dev/davinciX:NPU设配,X是芯片物理ID号例如davinci0。

/dev/davinci_manager:管理设备。

/dev/devmm_svm:管理设备。

/dev/hisi_hdc:管理设备。

/usr/local/Ascend/driver:驱动目录。

/usr/local/dcmi:DCMI目录。

/usr/local/bin/npu-smi:npu-smi工具。

${镜像名称}:{tag}:镜像名称与版本号。

安装-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"。

安装torch时,会自动触发torchvision进行依赖版本检查,环境中安装的torchvision版本为0.6.0,检查时发现我们安装的torch-*.whl的版本号与要求的1.5.0不一致,所以提示报错,但实际安装成功 。

对实际结果无影响,无需处理。

import torch_npu 显示_has_compatible_shallow_copy_type重复注册warning问题

warning如下图所示,由Tensor.set_data浅拷贝操作触发。主要原因是PyTorch插件化解耦后,_has_compatible_shallow_copy_type缺乏对NPU Tensor的浅拷贝判断支持,因此需要重新注册_has_compatible_shallow_copy_type

该warning不影响模型的精度和性能,可以忽略。

待NPU 设备号合入社区或者后续PyTorch版本_has_compatible_shallow_copy_type注册方式发生变动,该warning会被解决。

输入图片说明

在编译torch_npu的目录进入python引用torch_npu报错问题

验证torch_npu的引入,请切换至其他目录进行,在编译目录执行会提示如下错误。

在执行import torch_npu时出现ModuleNotFooundError: NO module named '_lzma'报错问题

在python命令行下,执行import torch_npu测试时,出现ModuleNotFooundError: NO module named '_lzma'问题,可能由于Python环境失效,重装Python即可。

编译过程中出现XNNPACK相关的Make Error报错

编译原生pytorch时,未配置相关环境变量,导致编译不成功。

  1. 执行命令设置环境变量

    export USE_XNNPACK=0
  2. 执行命令清除当前编译内容

    make clean
  3. 重新编译

编译时出现Breakpad error: field 'regs' has incomplete type 'google_breakpad::user_regs_struct'报错

编译原生pytorch时,未配置相关环境变量,导致编译不成功。

  1. 执行命令配置环境变量

    export BUILD_BREAKPAD=0
  2. 执行命令清除当前编译内容

    make clean
  3. 重新编译

多卡训练初始化阶段卡顿至超时

init_process_group 函数中使用了IPV6地址,例如::1(注意localhost 可能指向IPv6的地址),使用IPv4可以避免这个问题

版本说明

版本说明请参阅ReleseNote

BSD 3-Clause License Copyright (c) 2020, Huawei Technologies Co., Ltd Copyright (c) 2019, Facebook CORPORATION. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

Ascend PyTorch adapter 展开 收起
Python
BSD-3-Clause
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/ckirchhoff/pytorch.git
git@gitee.com:ckirchhoff/pytorch.git
ckirchhoff
pytorch
pytorch
master

搜索帮助