鲲鹏社区首页
中文
注册
PyTorch迁移并使能毕昇编译器、KML和ACL加速库

PyTorch迁移并使能毕昇编译器、KML和ACL加速库

软件迁移

发表于 2025/07/05

0

作者 | 李璐

本文介绍如何在鲲鹏920编译安装PyTorch 2.3.1 CPU版,并使能毕昇编译器、KML和ACL加速库

安装配置环境

本文所使用的环境信息如下:



编译安装PyTorch

鲲鹏社区已上架PyTorch2.1.2版本官方安装教程 PyTorch2.1.2 CPU版本安装教程,PyTorch2.3版本安装步骤与其基本一致。

下载源码PyTorch源码

git clone -b v2.3.1 https://github.com/PyTorch/PyTorch.git --depth 1
cd PyTorch
git submodule sync git submodule update --init –recursive

设置环境变量

export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
export USE_CUDA=0 USE_CUDNN=0 USE_ROCM=0 USE_GLOO=0 USE_FBGEMM=0
export USE_NUMPY=1 USE_NUMA=0
export USE_OPENMP=1
export USE_NNPACK=1

编译并安装PyTorch

pip install -r requirements.txt
python setup.py bdist_wheel
pip install dist/*.whl

编译torchvision

#下载torchvision v0.18.0 源码
git clone https://github.com/PyTorch/vision.git -b v0.18.0 --depth 1
#安装torchvision
python setup.py bdist_wheel
pip install dist/torchvision*.whl

验证安装

pip list | grep torch
python
import torchvision
print(torchvision.__version__)


使用毕昇编译器编译PyTorch

毕昇编译器是华为编译器实验室针对鲲鹏等通用处理器架构场景,打造的一款高性能、高可信及易扩展的编译器工具链,增强和引入了多种编译优化技术,支持C/C++/Fortran等编程语言及对应编程语言的OpenMP扩展。

安装毕昇编译器

参考官方介绍与指导安装BiShengCompiler-4.2.0.1-aarch64-linux版本

设置环境变量

export CC=clang
export CXX=clang++
export CMAKE_C_FLAGS="--gcc-toolchain=/opt/gcc-10.3.1-2022.12-aarch64-linux/ -O3 -mcpu=tsv110 -ljemalloc -fGNU-compatibility -fGNU-warning-compatibility -fGNU-error-compatibility"
export CMAKE_CXX_FLAGS="$CMAKE_C_FLAGS"
export CMAKE_LD_FLAGS="$CMAKE_C_FLAGS"
export PATH=/opt/gcc-10.3.1-2022.12-aarch64-linux/bin:$PATH
export LD_LIBRARY_PATH=/opt/gcc-10.3.1-2022.12-aarch64-linux/lib64:$LD_LIBRARY_PATH

如果要使能LTO,额外添加环境变量

export CMAKE_C_FLAGS="-flto=thin -fuse-ld=lld"
export CMAKE_CXX_FLAGS="-flto=thin -fuse-ld=lld"
export OMP_PROC_BIND=false

如果要使能jemalloc,额外添加环境变量

export CMAKE_C_FLAGS="clang -O3 -ljemalloc”

编译并安装PyTorch,步骤同上。

使能ACL

ACL(Arm Compute Library)是为Arm架构处理器设计的开源计算库,并支持新的Arm技术和架构特性,包括SVE2和SME2。

安装ACL

参考安装教程安装ACL,注意acl与PyTorch的版本匹配:PyTorch 2.3.1对应ACl版本为23.08;PyTorch2.6可以尝试acl24版本以上;
for PyTorch 2.3.0 the version of ideep is set to https://github.com/intel/ideep/tree/8a6cc4e09dc509f04f83c085e38786b1fb44e14d which is using oneDNN 3.3.6 where it only allows for version of ACL to be used to be between versions 23.02.1 and 23.08 due to changes in ACL API post 23.08.

设置环境变量

export ACL_ROOT_DIR=/path/to/acl
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/acl/build/
export USE_MKLDNN=1 USE_MKLDNN_ACL=1

编译并安装PyTorch

步骤同上,验证如下。

ldd /path/python3.12/pytorch/libarm_compute.so
显示如下信息:
libarm_compute.so => /path/to/ComputeLibrary-23.08/build/libarm_compute.so (0x0000ffff9ca99000)
libarm_compute_graph.so => /path/to/ComputeLibrary-23.08/build/libarm_compute_graph.so (0x0000ffff9c9b7000)
libarm_compute_core.so => /path/to/ComputeLibrary-23.08/build/libarm_compute_core.so (0x0000ffff9c996000)


使能KML

鲲鹏数学库KML(Kunpeng Math Library)是华为提供的基于鲲鹏平台优化的高性能数学函数库,主要完成标量,矢量,矩阵上的数学计算,包括基本的四则运算、三角函数、对数函数、指数函数、线性代数计算等。

安装kml并设置环境变量

参考KML介绍与安装指南安装KML,并设置环境变量。

export USE_BLAS=1 BLAS=OpenBLAS USE_LAPACK=0 USE_MKLDNN_CBLAS=1
# 调试模式,可进入torch源码进行debug
export DEBUG=1

编译并安装PyTorch

修改PyTorch/cmake/Modules/ FindOpenBLAS.cmake,指定kblas为openblas配置,设置include和lib路径,以及lib名称和头文件名称,并且在include中将kblas.h拷贝一份cblas.h。


python setup.py develop
# 编译构建wheel包
python setup.py bdist_wheel

验证安装

若成功使能KML,编译过程中会出现如下信息:


编译完成,验证:

ldd anaconda3/envs/python312/lib/python3.12/site-packages/torch/lib/libtorch.so


常见问题与解决方法


报错filesystem file not found

解决方式:gcc编译器版本过低,或者没有配置gcc相关的环境变量,可在/etc/profile文件添加:

export PATH=/opt/gcc-10.3.1-2022.12-aarch64-linux/bin:$PATH
export LD_LIBRARY_PATH=/opt/gcc-10.3.1-2022.12-aarch64-linux/lib64:$LD_LIBRARY_PATH


报错libomp.so: cannot open shared object file

如下例:

import torch

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "/home/anaconda3/envs/python312/lib/python3.12/site-packages/torch/__init__.py", line 239, in <module>

    from torch._C import *  # noqa: F403

    ^^^^^^^^^^^^^^^^^^^^^^

ImportError: libomp.so: cannot open shared object file: No such file or director

解决方式:

设置毕昇编译器的环境变量

export LD_LIBRARY_PATH=/home/lilu/BiShengCompiler-4.2.0-aarch64-linux/lib:$LD_LIBRARY_PATH


验证torchvision报错nms_kernel重复定义

解决方式:
torch与torchvision版本要对应,且编译环境要完全一样,比如:手动编译<-->手动编译;conda<--->conda下载;pip下载<---->pip下载
torch与torchvision的版本对应关系 https://github.com/PyTorch/vision#installation
安装后验证import torchvision 如果提示RuntimeError:operator torchvision::nms does not exist,不要在vision目录下import,退出来就正常了。


使能jemalloc后安装torchvision报错

/opt/compiler/BiShengCompiler-4.2.0-aarch64-linux/lib/libjemalloc.so.2: cannot allocate memory in static TLS block

内存分配或静态 TLS(线程局部存储)初始化存在问题,安装torchvision时禁用jemalloc

export LD_PRELOAD=/usr/lib/libjemalloc.so.2





本页内容