银河麒麟(Kylin) - V4 移植Tensorflow-1.10.1版本 + Bazel编译工具编译

原因

项目需求:需要用到Tensorflow工具处理数据,在网络上搜索发现ARM平台没有可以直接安装的安装包,想要用这个工具只能编译源码。在此期间测试了Tensorflow其他版本都是因为编译中报各种错误,导致编译失败。项目需求指定操作系统只能用银河麒麟系统V4版本,Tensorflow版本也是指定只能是1.X版本,不能用最新的2.X版本。还好不指定Tensorflow-1.X后面的小版本号。经过长达一个星期的测试编译各种Tensorflow1.X版本,终于在测试编译Tensorflow-1.10.1版本编译成功了!!! 在此记录、方便以后查看。

测试环境

电脑配置

主板 :联想KaiTian M740JCPU:飞腾 D2000/8(64位,8核)内存:16G硬盘:256GB系统:银河麒麟桌面操作系统V4平台架构:ARM

准备工作

1、编译Tensorflow有对应的编译工具如图:

注意:

我编译的版本为CPU版本

如果需要GPU版本:点击查看构建工具与Tensorflow对应的版本

下载Tensorflow-1.10.1 源码 https://github.com/tensorflow/tensorflow/tree/r1.10 下载 Bazel-0.15.0 源码 https://github.com/bazelbuild/bazel/tree/0.15.0

2、TensorFlow 软件适配

安装编译需要的依赖包

Java 8 (e.g. openjdk-8-jre) installedPythonPipNumPypython-virtualenvBazel 0.15.0

$ apt-get install python-dev

$ sudo apt update

$ sudo apt install python-pip

$ pip install --upgrade pip

$ pip install setuptools six numpy wheel mock

$ pip install keras_preprocessing

$ apt-get install python-enum34

我的系统自带JDK8版本

没有的话自己下载一个安装: Install OpenJDK 8

$ wget http://openjdk.linaro.org/releases/jdk8u-server-release-1708.tar.xz

$ tar xvf jdk8u-server-release-1708.tar.xz

$ cd jdk8u-server-release-1708

$ export JAVA_HOME=$PWD

$ cd jre/lib/security/

$ rm cacerts

(for CentOS 7) $ ln --symbolic /etc/pki/java/cacerts .

(for Debian Jessie) $ ln --symbolic /etc/ssl/certs/java/cacerts .

$ cd jdk8u-server-release-1708/bin

$ export PATH=$PWD:$PATH

编译

1、编译安装Bazel

先创建一个bazel-0.15.0文件夹,在解压bazel-0.15.0-dist.zip文件指向这个创建的bazel-0.15.0文件夹。(不指向文件夹的话解压的所有文件都在当前目录下) 进入bazel-0.15.0文件夹

$ mkdir bazel-0.15.0

$ unzip bazel-0.15.0-dist.zip -d bazel-0.15.0

$ cd bazel-0.15.0

执行编译

$ ./compile.sh

#Copy bazel to $PATH

$ sudo cp output/bazel /usr/bin/

如图:出现这行代表编译完成

编译完成bazel在bazel-0.15.0文件夹的output文件夹里

最后打开output文件夹执行:./bazel会有个初始化的过程,如果正常打印,没有异常抛出那么恭喜你成功了。

把bazel文件拷贝到/usr/bin/下

$ bazel

安装完成

注意:

bazel和tensorflow有版本依赖关系,如果使用bazel编译tensorflow源代码切记版本不要搞错了。

RAM>=4GB,ROM>=16GB,编译整个过程RAM占用一度大于2GB,可能会内存溢出

CPU整个过程都几乎满载,编译过程中注意散热问题,不要编译到一半机器死掉

2、编译安装Tensorflow

编译选项和以及平台相关修改针对飞腾平台,需要对部分源码进行少量修改,具体如下:

tensorflow/BUILD 文件: 添加:

config_setting(

name = "linux_aarch64",

values = {"cpu": "aarch64"},

visibility = ["//visibility:public"],

)

tensorflow/contrib/lite/kernels/internal/BUILD 文件: 注释掉所有 mfpu 相关的编译选项。 编译选项

$ ./configure

Python 版本路径选择填写:/usr/bin/python

jemalloc的相关选项 Y。

其余选项均选择 N 或 n。

编译及安装 进行编译:

$ bazel build -c opt --copt="-funsafe-math-optimizations"

--copt="-ftree-vectorize" --copt="-fomit-frame-pointer" --verbose_failures

tensorflow/tools/pip_package:build_pip_package

如图:出现这行代表编译完成

$ bazel-bin/tensorflow/tools/pip_package/build_pip_package

/tmp/tensorflow_pkg

如图:Build pip package

得到:tensorflow-1.10.1-cp27-cp27mu-linux_aarch64.whl

编译完成后,tensorflow 包位于:/tmp/tensorflow_pkg/下。安装 TensorFlow:

$ pip install /tmp/tensorflow_pkg/tensorflow-1.10.1-cp27-cp27mu-linux_aarch64.whl

查看TensorFlow

$ pip show tensorflow

TensorFlow 软件功能验证 4.1 验证 TensorFlow 安装 在 python 交互式环境下验证 TensorFlow 是否正确安装。

看到以上输出,说明 TensorFlow 已经安装完成。

测试demo

#!/usr/bin/env python

import os

import tensorflow as tf

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([

tf.keras.layers.Flatten(input_shape=(28, 28)),

tf.keras.layers.Dense(128, activation='relu'),

tf.keras.layers.Dropout(0.2),

tf.keras.layers.Dense(10, activation='softmax')

])

model.compile(optimizer='adam',

loss='sparse_categorical_crossentropy',

metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)

model.evaluate(x_test, y_test)

执行结果如下

安装完成

编译成功:Kylin-4.0.2-desktop-sp4-arm64 编译完成 bazel-0.15.0

编译成功:Kylin-4.0.2-desktop-sp4-arm64 编译完成tensorflow-1.10.1-cp27-Linux

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: