硬件环境准备

华为驱动、固件和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上使用可参考华为官方文档。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐