前言
最近工作有点忙,终于抽出时间记录一下开发的点滴。由于工作原因,需要采用Tensorflow进行模型推断(inference), 同时又需要修改Tensorflow底层的部分源码,因此记录下Tensorflow的编译过程以及踩过的坑。
环境
- Ubuntu 18.04
- protoc 3.6.1
- anaconda3, python 3.7
- bazel-0.19.2
- tensorflow-1.13.1
- java, jdk-10
目的
- 编译生产tensorflow C++ 动态链接库, .so文件
- 编译生成tensorflow python package, .whl文件
编译过程的坑
- bazel, protobuf 无法下载、下载速度极慢, 解决方法:使用代理,或者用手机WIFI热点
- tensorflow, bazel, protobuf 三者版本一定要对应!!!, 否者编译出错或者编译好了无法使用
- 尽量使用openJDK8, 其他版本可能会编译出错
step1: 配置编译环境
- 安装openJDK
- 编译安装protobuf
- 安装bazel
protobuf编译安装
下载: https://github.com/protocolbuffers/protobuf
图片.png
图片.png
unzip protobuf-xxxx
cd protobuf-xxxx
./configure
make
make install
检验protobuf是否安装好:
图片.png
图片.png
安装bazel
https://github.com/bazelbuild/bazel
图片.png
图片.png
bash ./bazel-0.19.2-installer-linux-x86_64.sh
编译Tensorflow
下载对应的Tensorflow版本源码
unzip tensorflow-1.13.1.zip
cd tensorflow-1.13.1
图片.png
下载Tensorflow的依赖库,编译安装Eigen
./tensorflow/contrib/makefile/download_dependencies.sh
cd tensorflow/contrib/makefile/downloads/
cd eigen
mkdir build
cd build
cmake ../
make
sudo make install
图片.png
配置Tensorflow编译选项
在tensorflow-1.13.1目录执行:
./configure
编译Tensorflow C++ 动态链接库:
- CPU Only
bazel build --config=opt //tensorflow:libtensorflow_cc.so
- With GPU
bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so
编译生成Tensorflow python 包
- CPU Only
bazel build //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
- With GPU
bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg











网友评论