nifengz

Jetson Nano 编译安装tensorflow C++库

2019-08-22

Jetson Nano 编译安装tensorflow C++库

上半年玩了Jetson Nano,把之前PC上的项目移植了过来。因为使用了C++版本的tensorflow,编译安装耗费了大量的时间,这里总结一下留个备份。 首先我们的目标版本是tensorflow 1.12,因为tensorflow的版本众多,不同版本可以使用的编译环境(bazel)的版本也不尽相同。所以请按照下面给出的版本去操作,否则可能会报错。

编译安装bazel

bazel是编译tensorflow的工具(why not cmake?),这里要注意bazel的版本必须是0.19.2!0.2和0.19.1都会报错,对!就是这么辣鸡。

这里下载 *-dist.zip的版本,包含了从0启动bazel编译的所有文件。

然后准备下编译bazel的环境:

sudo apt-get install build-essential openjdk-8-jdk python zip unzip

编译bazel会消耗大量内存,默认设置下JetsonNano内存会爆掉。我们需要挂载虚拟内存。下面去github上下载 这个项目,然后:

./installSwapfile.sh #默认挂载6G交换文件 不然编译bazel内存就爆炸 对! 就是这么任性

然后就可以开始编译bazel了:

env EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk" bash ./compile.sh

编译产生一个几百M的bazel二进制文件 在output目录下。

编译 tensorflow

版本选择 tensorflow1.12.x 先./configure 会提示一些设置信息。我们关掉大多数选项,打开cuda,版本输入10.0, 然后后面有个库的版本提示选择2.0或者1.3,这里我们选择1.3,然后就开始编译了:

export TMP=/tmp
bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so

漫长的等待后编译完了,报一个aws链接的错误!莫慌,像下面这样改一下再编译一次即可:

In file:
/home/<user_name>/.cache/bazel/_bazel_<user_name>/<hash>/external/aws/BUILD.bazel
(where <user_name> - user current linux user name,
<hash> is hash like de4a7858eac0c7de37e543fdc903ef12)

In section (cc_library) in my case line 27 replace:
"//conditions:default": []"
with
"//conditions:default": glob(["aws-cpp-sdk-core/source/platform/linux-shared/*.cpp",]),

Then it will successfully build on Jetson.

enjoy it.

扫描二维码,分享此文章