DJI ManiFold-2G(Nvidia Jetson TX2)源码安装Tensorflow-1.12.0

Dji ManiFold-2G(Nivida Jetson TX2)源码安装Tensorflow-1.12.0

  1. Cuda 9.0
  2. Jetpack 3.3
  3. Python 3.5
  4. cuDNN 7.4.1(严格匹配!其他版本会出现问题!)

1. 使用背景:

使用TensortRt在DJI MANIFOLD-2G 部署加速目标检测模型。Nivida 提供了一些版本的tensorflow wheel安装。

由于Dji ManiFold-2G内置的Jetpack 3.3,Cuda9.0,Jetpack和Cuda版本不可随便变更,所以在安装tensorflow时需要注意按照版本进行匹配。在TX2上安装tensorflow-0.8.0经过测试是可以正常使用的,但是在转换和加载目标检测模型是会出现一些问题,因此尝试更高版本的tensoflow。

2. 准备工作:

2.1 创建虚拟内存空间

由于MANIFOLD-2G 的内存只有8G,在源码编译tensorflow这种大型项目时需要足够的内存,因此建议在硬盘上创建8G虚拟内存(按照自己实际需求创建虚拟内存)。

$ sudo fallocate -l 8G /swapPath/8GB.swap
$ sudo mkswap /swapPath/8GB.swap
$ sudo swapon /swapPath/8GB.swap

此时可以使用free-m看到已经新建了8GB的虚拟内存,为了保证该虚拟内存在计算机重启后仍有效,需要将下面语句添加到/etc/fstab后并重启计算机:

$ /swapPath/8GB.swap none swap sw 0 0

注: 在TX-2这种开发板上创建虚拟内存空间十分重要,这保证一些大型程序的编译有足够的内存空间,如果不建立这样的内存空间在编译TF时会出现内存不足的错误。

3. 安装步骤:

作者在安装学习的过程中主要参考JK Jung blog,该博客给作者的工作提供了极大的帮助,因此这里也主要借鉴JK Jung所提供的相关内容。

  1. 如果你已经安装了tensorflow、tensorboard,需要先讲其卸载

     $ sudo pip3 uninstall -y tensorflow tensorboard
    
  2. 从Github上下载安装源码,这里直接使用JK Jung的Github的jetson_nano仓库

    $ cd /project
    $ git clone https://github.com/jkjung-avt/jetson_nano.git
    $ cd jetson_nano 
    
  3. 安装libprotobuf-3.6.1,安装该版本的libprotobuf主要是由于在使用TensorRt加速模型时大幅度提升对模型文件(xx.pd)载入的时间。

    $ ./install_protobuf-3.6.1.sh
    

    在安装protobuf过程中比较顺利没有出现问题,但是编译时间较长。如编译中遇到问题可以交流。

  4. 安装bazel-0.15.2,bazel主要是tensorflow的源码编译工具。

    ./install_bazel-0.15.2.sh
    

    bazel编译中出现的问题:

    Q1. 无法解压tensorflow/third_party/asm/asm-6.0.jar
    在这里插入图片描述

    该问题主要是由于使用unzip对.jar文件解压失败造成的,笔者没有找到更合适的方法解决这个问题,但是尝试了一种比较笨拙的方式解决了该问题。

    首先,进入到出现问题的文件夹:
    cd /src/tensorflow/third_party/asm

    其次,将asm中.jar文件加上.zip后缀后变成xxx.jar.zip,再使用unzip解压时发现是正确的,按照此方法可以解决该问题。

    Q2. 解压正确,但是后面运行时仍提示无xxx.jar文件

    出现这个问题很迷惑,笔者尝试解压完文件后将原来的xxx.jar文件又放回到 /src/tensorflow/third_party/asm目录中,编译正确执行。(上述问题的出现用着两种方法可以解决,但是笔者总觉得这不是最合适的方法,没有从根本解决这个问题,如果大家有更好的解决方法,欢迎交流!!)

  5. 源码安装tensorflow-1.12.2,执行安装脚本,包括下载tensorflow所依赖的环境。

    ./install_tensorflow-1.12.2.sh
    

    编译中出现的问题:

    Q3. bazel构建文件出现的release-62-1.tar.gz错误解决

    该问题主要是由于下载release-62-1.tar.gz的错误,搭建一个本地的http服务,自己下载release-62-1.tar.gz并将其放到相应的位置。具体步骤如下:

    ① 搭建本地http服务:

    $ sudo apt-get install httpd
    $ sudo apt-get install apache2
    $ sudo apt-get install apache2-dev 
    

    安装成功后使用sudo systemctl status apache2查看状态,在浏览器中输入localhost出现下面界面即为成功。

    ② 安装release-62-1.tar.gz

    下载地址,将下载好的文件复制到/var/www/html目录下,并将https://localhost/release-62-1.tar.gz添加到tensorflow/third_party/icu/workspace.bzl的url中。继续执行会出现下面的问题,需要在进行一处修改:
    在这里插入图片描述tensorflow/third_party/icu/workspace.bzl中的Checksum改成报错内容中出现的序列,即86b85…这一行序列

    ③ 注意

    在完成上述步骤后,记得要copy一个workspace.bzl文件,因为在编译tensorflow是会更新这个文件,注意当编译时更新文件之后,迅速将更新的文件改成重新写好的workspace.bzl,这里源码编译会让你确认cuda版本,在确认版本之前更改这个文件即可。

  1. 源码编译结束后安装wheel文件即可。脚本中已写好,无需自己安装。这里给大家提供一下我编译安装好的wheel文件。

tensorflow-1.12.2-cp35-cp35m-linux_arrach64.whl

4. 常见问题

  1. 在成功安装tensoflow-1.12.2后,在测试程序的时候出现如下问题

    Error : Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.

    查阅了一些解决办法,最后发现是因为我的cuDnn版本不匹配导致的,之前我将Manifold-2G的cuDNN版本更新了一次,更改成了7.6.5版本,但是这个版本与编译的tensoflow不匹配,所以导致该错误发生。建议读者严格按照文章开始提到的环境安装。

    问题解决来源 https://github.com/tensorflow/tensorflow/issues/24828

才疏学浅,如有问题请多指教!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值