基于香橙派 KunpengPro学习CANN(2)——Ascend Extension for PyTorch 配置与安装

发布于:2025-03-19 ⋅ 阅读:(17) ⋅ 点赞:(0)

将 PyTorch 网络迁移到昇腾平台并执行训练或推理,直接使用昇腾提供的构图接口构图。Ascend Extension for PyTorch插件用于适配PyTorch框架,可以使用昇腾AI处理器的算力。

1 pip 安装

# 下载PyTorch安装包
wget https://download.pytorch.org/whl/cpu/torch-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
# 下载torch_npu插件包
wget https://gitee.com/ascend/pytorch/releases/download/v6.0.rc3-pytorch2.1.0/torch_npu-2.1.0.post8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

# 安装命令
pip3 install torch-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
pip3 install torch_npu-2.1.0.post8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

注:

  • 如果下载whl包时出现ERROR: cannot verify gitee.com's certificate报错,可在下载命令后加上--no-check-certificate参数避免此问题
  • 执行如下命令,若返回True则说明安装成功
python3 -c "import torch;import torch_npu;print(torch_npu.npu.is_available())"
  • 若Pytorch版本为2.1.0,出现找不到google或者protobuf或者protobuf版本过高报错时,需执行如下命令:
pip install protobuf==3.20

2 源码安装

2.1 源码编译安装 PyTorch 框架
  • Get the PyTorch Source
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
# if you are updating an existing checkout
git submodule sync
git submodule update --init --recursive
  • Install Dependencies
conda install cmake ninja
# Run this command from the PyTorch directory after cloning the source code using the “Get the PyTorch Source“ section below
pip install -r requirements.txt

pip install mkl-static mkl-include
# CUDA only: Add LAPACK support for the GPU if needed
conda install -c pytorch magma-cuda121  # or the magma-cuda* that matches your CUDA version from https://anaconda.org/pytorch/repo

# (optional) If using torch.compile with inductor/triton, install the matching version of triton
# Run from the pytorch directory after cloning
# For Intel GPU support, please explicitly `export USE_XPU=1` before running command.
make triton
  • Install PyTorch
export _GLIBCXX_USE_CXX11_ABI=1
# Only run this if you're compiling for ROCm
python tools/amd_build/build_amd.py

export CMAKE_PREFIX_PATH="${CONDA_PREFIX:-'$(dirname $(which conda))/../'}:${CMAKE_PREFIX_PATH}"
python setup.py develop
2.2 源码编译安装 torch_npu 插件

源码物理机编译

编译安装适用于进行算子适配开发、CANN版本与PyTorch兼容适配场景,PyTorch 2.1.0

  • 安装依赖
apt-get install -y patch build-essential libbz2-dev libreadline-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev liblzma-dev m4 dos2unix libopenblas-dev git 
apt-get install -y gcc==10.2.0 cmake==3.18.0
  • 编译生成torch_npu插件的二进制安装包
# 下载对应PyTorch版本分支代码
git clone -b v2.1.0-6.0.rc3 https://gitee.com/ascend/pytorch.git 
cd pytorch

# 编译生成二进制安装包
# 指定Python版本编包方式,以Python3.9为例,其他Python版本请使用--python=3.8、--python3.10或--python3.11
bash ci/build.sh --python=3.9

在编译过程中报错:

在这里插入图片描述

这个报错在v6.0.rc1.alpha002-pytorch2.0.1版本中就存在:

在这里插入图片描述

在 issue 中看到:gcc 版本需要使用10.2.010.5.0 也可

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install -y gcc-10 g++-10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10
sudo update-alternatives --config gcc

遇到新的报错:

在这里插入图片描述

看来只能用 docker 了

  • 安装pytorch/dist目录下生成的插件torch_npu包,如果使用非root用户安装,需要在命令后加--user
# 用户根据实际情况更改命令中的torch_npu包名
pip3 install --upgrade 

docker

  • 下载torch_npu源码
git clone https://gitee.com/ascend/pytorch.git -b v2.1.0-6.0.rc3 --depth 1  
  • 构建镜像
cd pytorch/ci/docker/ARM
docker build -t manylinux-builder:v1 .
  • 进入Docker容器,并将torch_npu源代码挂载至容器内
docker run -it -v /home/HwHiAiUser/code/pytorch:/home/HwHiAiUser/code/pytorch manylinux-builder:v1 bash
  • 编译生成二进制安装包
cd /home/HwHiAiUser/code/pytorch 
bash ci/build.sh --python=3.8
  • 在运行环境中安装生成的插件torch_npu包,如果使用非root用户安装,需要在命令后加–user
# 请用户根据实际情况更改命令中的torch_npu包名
pip3 install --upgrade dist/torch_npu-2.1.0.post8-cp39-cp39-linux_aarch64.whl
2.3 验证成功安装

验证是否安装成功,可执行如下命令:

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')