华为鲲鹏920和昇腾910B从源码配置TensorFlow2.6.5
本文详细记录了在鲲鹏920处理器上编译aarch64架构TensorFlow 2.6.5的全过程。首先创建Python 3.9环境,然后依次完成HDF5、h5py、gcc7.3.0等依赖项的编译安装。重点介绍了TensorFlow源码的修改方法,包括nsync库的适配调整和编译配置优化。通过bazel工具完成TensorFlow的源码编译,并最终生成whl安装包。整个过程涉及多个关键步骤的环境配置
硬件环境准备
华为驱动、固件和cann的安装可参考我的另外一篇博客Pytorch版本的FunASR适配华为昇腾910B(保姆级教程),这里就不再赘述,本篇博客主要记录在鲲鹏920下编译aarch64架构的tensorflow2.6.5
一、创建py3.9环境
conda create -n py39_env python=3.9 -y
conda activate py39_env
二、编译安装HDF5
对于aarch64架构,由于TensorFlow依赖h5py,而h5py依赖HDF5,需要先编译安装HDF5,否则使用pip安装h5py会报错,以下步骤以root用户操作。
访问下载链接下载HDF5源码包,并上传到安装环境的任意目录。进入源码包所在目录,执行如下命令解压源码包。
tar -xzvf hdf5-1.10.5.tar.gz
进入解压后的文件夹,执行配置、编译和安装命令:
cd hdf5-1.10.5/
./configure --prefix=/usr/local/hdf5
make -j16 && make install
然后配置环境变量。
export CPATH=/usr/local/hdf5/include/:/usr/local/hdf5/lib/
export LD_LIBRARY_PATH=/usr/local/hdf5/lib/:$LD_LIBRARY_PATH•
三、安装h5py
首先下执行如下命令安装h5py依赖包。
pip3 install "Cython<3"
pip3 install wheel
然后下执行如下命令安装h5py。
pip3 install h5py==3.1.0
若在线安装h5py 3.1.0失败,可单击下载链接获取源码包,使用源码编译安装:
unzip h5py-3.1.0.zip
cd h5py-3.1.0
python3 setup.py build
python3 setup.py install
四、源码编译安装gcc7.3.0
参考链接:安装7.3.0版本gcc - Atlas 900 A2 PoDc 集群基础单元 24.0.RC3 昇腾软件安装指南 01 - 华为
下载源码包
wget https://repo.huaweicloud.com/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz
tar -xzvf gcc-7.3.0.tar.gz
cd gcc-7.3.0
./contrib/download_prerequisites
mkdir build
cd build
../configure --enable-languages=c,c++ --disable-multilib --prefix=/opt /gcc7.3.0
若在编译GCC 7.3.0时,在libsanitizer阶段出现了错误,禁用libsanitizer继续编译
../configure --enable-languages=c,c++ --disable-multilib --disable-libsanitizer --prefix=/opt /gcc7.3.0
导入环境变量
export PATH=/opt/gcc-7.3.0/bin:$PATH
export LD_LIBRARY_PATH=/opt/gcc-7.3.0/lib64:$LD_LIBRARY_PATH
export CC=/opt/gcc-7.3.0/bin/gcc
export CXX=/opt/gcc-7.3.0/bin/g++
执行gcc –version查看是否安装成功
五、源码编译tensorflow2.6.5
参考链接:
源码编译安装TensorFlow - Atlas 900 A2 PoDc 集群基础单元 24.0.RC3 昇腾软件安装指南 01 - 华为
安装开源框架TensorFlow-TensorFlow商用版8.0.RC3-昇腾社区
从源代码构建 | TensorFlow
上图是tensorflow和python版本、GCC编译器以及构建工具的版本对照表
1、 下载bazel3.7.2工具
到Github - bazelbuild/build/releases上下载对应的版本
2、修改源码
下载tensorflow tag v2.6.5源码
下载nsync-1.22.0.tar.gz源码包
切换到nsync-1.22.0.tar.gz所在路径,解压缩该源码包。解压缩后存在“nsync-1.22.0”文件夹和“pax_global_header”文件,编辑“nsync-1.22.0/platform/c++11/atomic.h”,在NSYNC_CPP_START_内容后添加如下加粗字体内容。
重新压缩“nsync-1.22.0.tar.gz”源码包。
将上个步骤中解压出的内容压缩为一个新的“nsync-1.22.0.tar.gz”源码包,保存(比如,保存在“/tmp/nsync-1.22.0.tar.gz”)。重新生成“nsync-1.22.0.tar.gz”源码包的sha256sum校验码。
执行如下命令后得到sha256sum校验码(一串数字和字母的组合)。
sha256sum /tmp/nsync-1.22.0.tar.gz
进入tensorflow源码目录,打开“tensorflow/workspace2.bzl”文件,找到其中name为nsync的“tf_http_archive”定义,其中“sha256=”后面的数字填写得到的校验码,“urls=”后面的列表第二行,填写存放“nsync-1.22.0.tar.gz”的file://索引。
3、配置编译条件
在tensorflow源码目录,执行python configure.py
重要!!!
执行完./configure之后,需要修改 .tf_configure.bazelrc 配置文件。
添加如下一行build编译选项:
build:opt --cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0
删除以下两行:
build:opt --copt=-march=native
build:opt --host_copt=-march=native
修改后如下:
4、安装相关依赖
安装 Python 和 TensorFlow 软件包依赖项
sudo apt install python3-dev python3-pip
安装 TensorFlow pip 软件包依赖项
pip install -U pip numpy wheel
pip install -U keras_preprocessing --no-deps
重要!!!
Tensorflow2.6.5要求编译的时候需要是~=1.19.2的版本,否则会失败,因此执行
pip install numpy==1.19.2
如果提示没有numpy安装包或者安装失败失败可再提升一个小版本
pip install numpy==1.19.3
5、执行编译命令
bazel build --config=opt --config=mkl_aarch64 --config=nonccl --local_ram_resources=20480 --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" //tensorflow/tools/pip_package:build_pip_package
清除命令:
bazel clean --expunge
--local_ram_resources=20480是限制bazel使用的内存,官方推荐2048,可酌情修改
编译过程中会从github下载大量第三方依赖,需要提前准好良好的网络环境
6、编译完成后进行tensorflow2.6.5 whl安装包的构建
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
生成一个文件tensorflow-2.6.5-cp39-cp39-linux_aarch64.whl
至此tensorflow2.6.5源码编译完成
执行pip install tensorflow-2.6.5-cp39-cp39-linux_aarch64.whl进行安装
7、插件安装
下载TensoFlow2.6.5插件tensorflow 发行版 - Gitee.com
并执行pip install npu_device-2.6.5-py3-none-manylinux2014_aarch64.whl
如果import tensorflow提示numpy错误,可将numpy版本提升至1.23.0
pip install numpy==1.23.0
至此,在aarch64下编译tensorflow2.6.5完成,后续如何在npu上使用可参考华为官方文档。
更多推荐


所有评论(0)