Ubuntu AARCH64使用bazel编译tensorflow C++

bazel编译环境主要依赖java和protobuf,在X86下面我使用的是protobuf和bazel的.sh配合编译,由于bazel没有.sh文件只能依赖源码.zip进行编译,所以我这里使用的是基于java进行编译。

1.下载安装jdk

下载地址:Java Archive | Oraclehttps://www.oracle.com/java/technologies/downloads/archive/

这里需要注册ORACLE,我使用的版本是jdk1.8.0_112,所以下载的是Java SE 8(8u202 and earlier),选择jdk-8u112-linux-arm64-vfp-hflt.tar.gz下载即可,这个版本也与接下来安装有关,版本不匹配后面会报错;

Ubuntu AARCH64使用bazel编译tensorflow C++_第1张图片

解压缩到指定目录(以jdk-8u112-linux-arm64-vfp-hflt.tar.gz为例)

创建目录

sudo mkdir /home/firfly/jvm

解压到该目录

sudo tar -zxvf jdk-8u112-linux-arm64-vfp-hflt.tar.gz -C /home/firefly/jvm

修改环境变量

sudo gedit ~/.bashrc

在文件末尾添加下面内容

#set oracle jdk environment
export JAVA_HOME=/home/firefly/jvm/jdk1.8.0_112  ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH  

是环境变量马上生效

source ~/.bashrc

系统注册此jdk

sudo update-alternatives --install /usr/bin/java java /home/firefly/jvm/jdk1.8.0_112/bin/java 300

查看java版本

java --version

配置完成后建议重启一下;

2.安装编译bazel

bazel版本要和TensorFlow版本对应;

bazel版本查看方法:

TensorFlow源码下文件.bazelversion;

或者打开TensorFlow源码下tensorflow-master/configure.py

搜索可以找到:

_TF_MIN_BAZEL_VERSION = '4.2.2'

_TF_MAX_BAZEL_VERSION = '4.99.0'

 这里我使用的是bazel-4.2.2,tensorflow-2.8.0;

下载:链接 Releases · bazelbuild/bazel · GitHub

Arm需要下载bazel-4.2.2-dist.zip

 解压

mkdir bazel
unzip bazel-4.2.2-dist.zip -d /home/firefly/bazel

编译

进入bazel文件夹中执行

bash ./compile.sh
  • 若直接输入./compile.sh,有可能报错:找不到jdk

安装bazel

cd ./output
./bazel

环境配置

假定编译好的bazel在/home/firefly/bazel/output目录下,则在~/.bashrc文件的末尾添加:

export PATH=/home/firefly/bazel/output:$PATH

使新的环境变量生效

source ~/.bashrc

或者将/home/firefly/bazel/output/bazel复制到/bin下面

sudo cp /home/firefly/bazel/output/bazel /bin

3.编译Tensorflow

安装依赖:numpy,git

sudo apt-get update
sudo apt-get install python3-numpy
sudo apt-get install git

给Tensorflow编译文件夹权限

sudo chown -R firefly /home/firefly/Downloads/tensorflow-2.8.0/tensorflow-2.8.0

 进入tensorflow文件夹中,首先进行项目配置

./configure      # 如果只需要配置cpu环境就一直回车

注:如果选用cpu,只需要一直点确定继续就好,都是选择no;

 使用bazel编译TensorFlow

bazel build --config=monolithic //tensorflow:libtensorflow_cc.so

 注:上面代码一定要完整“//”后面也要加上;

编译完成后,在bazel-bin/tensorflow中会生成两个我们需要的库文件:libtensorflow_cc.so 和 libtensorflow_framework.so 

期间会因为网络了连接不上github,多尝试几次就好。

报错

1.git、numpy依赖问题

src/main/tools/process-wrapper-legacy.cc:"execvp(git, ...)":No such file or directory

原因是没有安装git,参考上面安装依赖;

2.使用bazel编译tensorflow时报错No such file or directory

给Tensorflow编译文件夹权限,参考android:tensorflow_demo issue.. · Issue #1737 · tensorflow/tensorflow · GitHub

sudo chown -R firefly /home/firefly/Downloads/tensorflow-2.8.0/tensorflow-2.8.0

3.内存耗尽问题

gcc:internal compiler error:KIlled (program cclplus)

原因可能是系统没有交换分区, 编译过程中内存耗尽, 导致了编译中断,可以尝试增加swap交换分区来解决,具体可以参考【问题解决】内存不足引起“gcc: internal compiler error: Killed (program cc1plus)”以及解决办法_little_stupid_child的博客-CSDN博客

但是我使用这种方法增加交换分区过程中仍报错,后面就重新编译,也没有继续报gcc的错了,可以继续编译。 

参考博客:Linux之Ubuntu18.04安装Java JDK8的三种方式_软测小生的博客-CSDN博客_ubuntu安装jdk8

Ubuntu安装TensorFlow C++_蓬莱道人的博客-CSDN博客

ubuntu18.04 tensorflow以及tensorflow lite源码编译C++库_上善若水-CSDN博客_ubuntu 编译tensorflowlite

 Ubuntu安装编译TensorFlow C++_MclarenSenna的博客-CSDN博客

你可能感兴趣的:(tensorflow,ubuntu,arm)