2018-12-26 21:56:23

编译和移植tensorflow的C/C++源码时,用到bazel这一构建工具。本篇blog记录遇到的安装、配置问题。

吐槽

构建工具,从make/ant/cmake/gradle一路用下来,各有优劣,只能说用的越熟练越容易上手

编译安装bazel时用到java。为啥不全用C++写?

bazel命名是有补全的,但是ubuntu + zsh + oh-my-zsh + apt的组合下,bazel的补全需要自行安装

为什么编译tensorflow而不是pip install tensorflow-gpu?这也许就是framework dev和普通训模师的区别吧。

安装bazel

我这里下载bazel 0.19,因为tf r1.13版不支持bazel 0.18(但是tf master分支的一些文件的commit message里又说了这个bug,tf和bazel的组合看起来有点脑残)

然后chmod +x , 以及放到PATH中的某个路径下。需要的话设置个软链接。

实际测试发现,这种方法装的0.19版本bazel,编译tf r1.13时,出现一些错误:比如TMP目录不存在、cpu被设定为了k8s,导致没进入编译。

方法2:添加google的bazel源然后apt安装bazel

来吧,从官方文章抄一段,反正确实管用:

Step 1: Install the JDK

Install JDK 8:

sudo apt-get install openjdk-8-jdk

On Ubuntu 14.04 LTS you must use a PPA:

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update && sudo apt-get install oracle-java8-installer

Step 2: Add Bazel distribution URI as a package source

Note: This is a one-time setup step.

echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list

curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -

If you want to install the testing version of Bazel, replace stable with testing.

Step 3: Install and update Bazel

sudo apt-get update && sudo apt-get install bazel

Once installed, you can upgrade to a newer version of Bazel with the following command:

sudo apt-get install --only-upgrade bazel

这种方法是在家里面的1080Ti机器上配置的,测试后发现可以运行。不知道是不是因为半年前编译过一次tf有关。

查看bazel版本

bazel version

配置bazel自动补全

如果是Mac OSX上的zsh+oh-my-zsh+brew的组合,默认就可以bazel补全。

如果是ubuntu上的zsh+oh-my-zsh+apt的组合,需要手动添加_bazel文件:

mkdir -p ~/.zsh/completion/

vim ~/.zsh/completion/_bazel

然后配置~/.zshrc,追加内容为:

fpath[1,0]=~/.zsh/completion/

compinit

现在执行source ~/.zshrc,或重新登录shell,bazel相关的命令就有补全了。

注意:bazel的tab提示,不提示(仍然需要手动输入)冒号:。比如整个工程根本没有子目录的情况,输入bazel build后输入tab,半天没有反应,此时手动应该输入":",否则直接执行的话所有target都被忽略的。(说的就是你,abseil的hello-world程序。。)

bazel基本命令

#查看bazel版本

bazel version

#执行构建

bazel build

#构建清除

bazel clean

mac上第一次使用bazel就报错

报错提示说Xcode SDK版本啥的有问题,需要这么搞一下:

bazel clean --expunge

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

sudo xcodebuild -license

bazel clean --expunge

bazel官方cpp对应的构建教程过一遍

下载代码:

mkdir -p ~/work/bazel_examples

cd $_

git clone https://github.com/bazelbuild/examples .

就像tensorflow喜欢造很多新概念一样,bazel也造新概念。

WORKSPACE

存放名为WORKSPACE的文件的目录,是整个工程的根目录。换言之,整个工程的根目录由WORKSPACE来标识。整个工程的根目录也被叫做workspace。

WORKSPACE文件为空即可

BUILD

在workspace下,考虑每一个子目录:如果存放了名为BUILD的文件,那么这个目录就是一个package,意思是一个包。

BUILD文件内容:它的内容包括你设定的编译target,比如cc_binary表示一个可执行,cc_library表示一个库;每个target里又包括name等字段:

cc_library(

name = "hello-greet",

srcs = ["hello-greet.cc"],

hdrs = ["hello-greet.h"],

)

cc_binary(

name = "hello-world",

srcs = ["hello-world.cc"],

deps = [

":hello-greet",

],

)

执行bazel构建

在工程根目录,也就是包含WORKSPACE文件的那个目录,执行:

bazel build //main:hello-library

表示让bazel去构建main这个package下的hello-library这一target。

随后,会在当前_workspace_下,生成bazel-bin bazel-genfiles bazel-out bazel-stage2 bazel-testlogs这几个文件。它们是~/.cache/bazel/_bazel_XXX下的目录的软链接。

编译tensorflow

平台:ubuntu16.04, NVidia 1080Ti, cuda9.0, cudnn7, gcc5-4, i7 CPU。

步骤:

./configure #根据情况,每一交互问题做回答,或选择no

bazel shutdown # 可选,因为直接bazel build提示让我stop server,所以执行了这一步

bazel build tensorflow:all # 执行构建,让机器怒吼吧!

结果:

Target //tensorflow/tools/pip_package:build_pip_package up-to-date:

bazel-bin/tensorflow/tools/pip_package/build_pip_package

INFO: Elapsed time: 7998.615s, Critical Path: 381.92s

INFO: 15139 processes: 15139 local.

INFO: Build completed successfully, 18985 total actions

一共花了2个多小时。。太慢了。

未完待续

bazel 链接_安装和配置bazel相关推荐

  1. bazel 链接_学习使用bazel

    标签: 编译tensorflow用到bazel,学习一下. 2018-12-26 21:56:23 安装bazel 然后chmod +x , 以及放到PATH中的某个路径下.需要的话设置个软链接. b ...

  2. bazel 链接_[bazel]-bazel的使用

    Change log 目录 一.是什么 二.安装 官网有安装教程.提供了三种安装方式.下面的homebrew是其中一种安装方式. step1: install the JDK Download the ...

  3. insights 磁力_安装和配置Decision Server Insights参考拓扑

    insights 磁力 新的IBM ODM Advanced V8.7 Decision Server Insights产品旨在使企业能够尽早发现并响应风险和机遇. Decision Server I ...

  4. drupal mysql配置文件_安装和配置Drupal 8教程,如何安装和配置Drupal 8?

    Drupal 8是流行的Drupal内容管理系统的最新版本.这个指南演示了如何在运行Debian或Ubuntu的Linode上安装Drupal 8. 准备工作 1.熟悉我们的入门指南,并完成设置您的L ...

  5. mysql配置服务器失败怎么办_安装程序配置服务器失败怎么办?数据库配置失败的解决方法...

    安装程序配置服务器失败怎么办?近期使用数据库SQL Server 2000的用户反应无法使用的现象,在运行的时候出现了"安装程序配置服务器失败"的提示该怎么办呢?该问题是在运行SQ ...

  6. bazel 链接_如何使用bazel build

    展开全部 安装 安装过程请参考: http://bazel.io/docs/install.html 使用工作区(workspace) 所有的Bazel构建都是基于一个 工作区(workspace) ...

  7. CentOS7入门_安装并配置mysql5.7.18

    2019独角兽企业重金招聘Python工程师标准>>> 1.下载mysql5.7 mysql的官方下载地址 打开之后我们选择对应的系统版本进行下载,之后选择nothanks,不登陆直 ...

  8. Windows Driver开发_安装与配置环境

    首先到这个网站里去下载Visual Studio2019,注意目前最新版的WDK仅支持Visual Studio2019,如果要下载2022版本目前推出了预览版,但需要申请下载,所以这里以2019为例 ...

  9. 华为存储iscsi配置_安装与配置Windows平台iSCSI存储环境

    1.启动服务器管理器,选择"添加角色和功能" 2.选择"文件和iscsi服务",并手动勾选"iscsi目标服务器" 3.创建虚拟磁盘 4.I ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task23. 不同的二叉搜索树 II
  2. 在预测心脏病和中风这件事上,AI又超过了人类医生(附论文)
  3. bose耳机信号断续_最便宜的TWS主动降噪耳机 233621 Zen 4400字深度评测
  4. MSM 实现 tomcat session 共享
  5. PHP基础知识--函数
  6. c#sort升序还是降序_c# List的sort排序方法详解
  7. 【学习笔记】第二章——线程与多线程模型
  8. 国家植物标本资源库信息网正式上线
  9. 网警已进入本群代码_“闯黄灯”记3分罚200元?沈阳网警这样回应
  10. linux mysql查看所有表_Linux之系统操作命令
  11. 小莫qq影视机器人-自定义对接影视教程
  12. IIS安装及ASPNet开发环境配置
  13. ucgui界面 vc_【MM32F103试用体验】ucGUI + FreeRTOS +触摸屏图形界面开发
  14. OpenCV计算图像PSNR峰值信噪比
  15. AQL学习笔记(二)--文档的创建
  16. 人脸识别考勤系统安卓APP(手把手教学-手动滑稽)
  17. Kafka 生产者压缩算法是什么?何时压缩和解压?什么压缩性能好?
  18. php7 根据日期算星座,js根据日期判断星座的示例代码
  19. antV G2plot清除图注removeAnnotation
  20. 2005年乔布斯在斯坦福大学毕业典礼上的演讲

热门文章

  1. 驾驶员蓝牙耳机怎么选?开车可以打电话的蓝牙耳机
  2. js中去掉双引号或者单引号
  3. 什么是锚点?锚点有什么作用?
  4. 关于目标、坚持和系统性成长的一点感悟
  5. 2014.11.20
  6. 那年我头脑发热,选择了自动化,后来我掉入计算机的世界无法自拔
  7. 京东 20190413 Android实习机试
  8. C/C++main函数返回值以及return 0的作用
  9. JPA @Modifying注解 jpql语句更新以及删除
  10. js中单引号与双引号冲突,怎么办