使用bazel从源代码编译tensorflow踩坑记录

本文记录了使用bazel从源代码编译tensorflow的完整流程,包括安装bazel,下载tensorflow源代码,配置编译选项,以及遇到的常见问题,如文件下载失败、内存不足、模块找不到、gcc版本过高和GPU版本不匹配等,并提供了相应的解决方案。
摘要由CSDN通过智能技术生成

0.写在前面的话

0.1配置信息

基本配置 版本
CPU Intel® Xeon® CPU E5645 @2.40GHz
GPU GeForce GTX 650 Ti (compute capability 3.0)
操作系统 Ubuntu18.04
openjdk 11.0.3
python 3.6.8
bazel 0.25.2

0.2废话和吐槽

实验室的电脑,由于CPU型号比较老,不支持AVX指令集,所以用tensorflow官方发布的包只能支持到tensorflow1.5。
同时,GPU型号也比较老,compute capacity只有3.0,所以跑网络的时候官方的包也不支持,只能用CPU硬跑。
最后,由于最近需要用tensorflow lite,而tensorflow1.7以下版本的Lite有bug,所以只能考虑从源代码编译一下,顺带给个优化。

1.理想流程

1.1安装bazel

1.1.1安装java的JDK

JDK我之前就安装过了,此处略去。可以参考[2]中的步骤安装。

1.1.2安装bazel包

安装时提示bazel版本不能高于0.25.2,所以安装了bazel0.25.2。
首先下载bazel安装包。网上教程下载.sh文件比较多,我比较懒,直接下载了deb包。用.sh文件法可以参考[1]下载完成后进入文件所在目录(我一般放在~/Downloads

cd ~/Downloads

然后用dpkg安装bazel包

sudo dpkg -i bazel_0.25.2-linux-x86_64.deb

一般这个时候会报错,显示依赖没有安装,所以用apt修复依赖

sudo apt-get -f install

然后继续安装

sudo dpkg -i bazel_0.25.2-linux-x86_64.deb

安装完毕,查看一下有没有安装好

bazel --version

1.2下载tensorflow源代码并选择版本

1.2.1下载安装git

sudo apt-get install git

有条件的可以配置ssh,反正迟早都需要一个github账号的。

1.2.2下载源代码

千万不要用网页上的Download Zip下载的那个zip包,那个没法选择安装的版本。
进入目录,输入

sudo git clone https://github.com/tensorflow/tensorflow

会在当前路径下新建一个名为tensorflow的文件夹,里面是源代码文件。
要是有ssh,可以用

sudo git clone github@github.com:tensorflow/tensorflow.git

1.2.3选择版本

选择想要编译的版本,例如tensorflow1.14

sudo git checkout r1.14

这里要注意bazel版本的问题,实测可以用bazel_0.25.2(不能再高了)编译tensorflow1.14,可以用bazel_0.19.2(0.25.2不能)编译tensorflow1.12。但是具体使用的版本还是建议参考官方配置[5],同时gcc版本不建议高于6.

1.3用bazel编译源代码并生成.whl文件

1.3.1配置编译文件

由于后面的步骤都不能加sudo,所以首先确保我们有权限(是文件的所有者)。

$ ls -l ~/Downloads/ |grep
  • 23
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
在交叉编译ARM的tensorflow时,Bazel是必须的工具。这里提供几个可能导致编译失败的原因和解决方法: 1. 缺少必要的库和工具 在编译tensorflow之前,需要在交叉编译环境中安装一些必要的库和工具,如: - gcc-arm-linux-gnueabihf - g++-arm-linux-gnueabihf - libssl-dev - zlib1g-dev - python-dev - python-numpy 如果缺少这些库和工具,将会导致编译过程中出现各种错误。可以通过以下命令安装这些库和工具: ```bash sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libssl-dev zlib1g-dev python-dev python-numpy ``` 2. Bazel版本不兼容 Bazel的版本可能与tensorflow不兼容,导致编译失败。可以使用以下命令检查当前使用Bazel版本: ```bash bazel version ``` 如果Bazel版本太老或太新,可以使用以下命令安装兼容的Bazel版本: ```bash wget https://github.com/bazelbuild/bazel/releases/download/0.29.1/bazel-0.29.1-installer-linux-x86_64.sh chmod +x bazel-0.29.1-installer-linux-x86_64.sh ./bazel-0.29.1-installer-linux-x86_64.sh --user ``` 3. 缺少TensorFlow的依赖项 在编译TensorFlow之前,需要安装一些依赖项,如protobuf、gast等。可以使用以下命令安装这些依赖项: ```bash sudo apt-get install autoconf automake libtool curl make g++ unzip wget https://github.com/protocolbuffers/protobuf/releases/download/v3.11.4/protobuf-all-3.11.4.tar.gz tar xf protobuf-all-3.11.4.tar.gz cd protobuf-3.11.4 ./configure --prefix=/usr/local make -j8 sudo make install sudo ldconfig pip install gast==0.2.2 ``` 4. TensorFlow的配置问题 在交叉编译tensorflow时,需要进行一些配置。可以使用以下命令配置: ```bash ./configure ``` 在配置过程中,需要注意以下几个问题: - 选择交叉编译器路径 - 选择TensorFlow的构建类型(如C++11 ABI) - 选择Python的路径和版本 - 选择是否支持CUDA 以上是常见的导致编译失败的原因和解决方法。如果以上方法都无法解决问题,可以查看编译过程中的具体错误信息并进行排查。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值