目录
1、软件下载
(1)tensorflow-1.13.1源码(tensorflow 1.13.1)
(2)bazel-0.19.2-installer-linux-x86_64.sh(bazel-0.19.2-installer-linux-x86_64.sh)
(3)Anaconda3-4.3.1-Linux-x86_64.sh(Anaconda3-4.3.1-Linux-x86_64.sh)
(4)protobuf-2.6.1.tar.gz(protobuf-2.6.1.tar.gz)
2、不同平台版本对应要求
注意:TensorFlow C++ API的编译对于bazel等工具的对应版本有要求,版本需要匹配,不然会有很多想不到的错误。
(1)Windows-CPU
版本 | Python 版本 | 编译器 | 编译工具 |
---|---|---|---|
tensorflow-1.13.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.12.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.11.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.10.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.9.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.8.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.7.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.6.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.5.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.4.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.3.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.2.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.1.0 | 3.5 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.0.0 | 3.5 | MSVC 2015 update 3 | Cmake v3.6.3 |
(2)Linux-CPU
版本 | Python 版本 | 编译器 | 编译工具 |
---|---|---|---|
tensorflow-1.13.1 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.19.2 |
tensorflow-1.12.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.15.0 |
tensorflow-1.11.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.15.0 |
tensorflow-1.10.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.15.0 |
tensorflow-1.9.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.11.0 |
tensorflow-1.8.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.10.0 |
tensorflow-1.7.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.10.0 |
tensorflow-1.6.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.9.0 |
tensorflow-1.5.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.8.0 |
tensorflow-1.4.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.5.4 |
tensorflow-1.3.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.4.5 |
tensorflow-1.2.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.4.5 |
tensorflow-1.1.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.4.2 |
tensorflow-1.0.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.4.2 |
(3)MacOS-CPU
版本 | Python 版本 | 编译器 | 编译工具 |
---|---|---|---|
tensorflow-1.13.1 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.19.2 |
tensorflow-1.12.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.15.0 |
tensorflow-1.11.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.15.0 |
tensorflow-1.10.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.15.0 |
tensorflow-1.9.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.11.0 |
tensorflow-1.8.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.10.1 |
tensorflow-1.7.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.10.1 |
tensorflow-1.6.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.8.1 |
tensorflow-1.5.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.8.1 |
tensorflow-1.4.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.5.4 |
tensorflow-1.3.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.4.5 |
tensorflow-1.2.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.4.5 |
tensorflow-1.1.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.4.2 |
tensorflow-1.0.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.4.2 |
(4) Windows-GPU
版本 | Python 版本 | 编译器 | 编译工具 | cuDNN | CUDA |
---|---|---|---|---|---|
tensorflow_gpu-1.13.0 | 3.5-3.6 | MSVC 2015 update 3 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.12.0 | 3.5-3.6 | MSVC 2015 update 3 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.11.0 | 3.5-3.6 | MSVC 2015 update 3 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.10.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.9.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.8.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.7.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.6.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.5.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.4.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 6 | 8 |
tensorflow_gpu-1.3.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 6 | 8 |
tensorflow_gpu-1.2.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 5.1 | 8 |
tensorflow_gpu-1.1.0 | 3.5 | MSVC 2015 update 3 | Cmake v3.6.3 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 3.5 | MSVC 2015 update 3 | Cmake v3.6.3 | 5.1 | 8 |
(5)Linux-GPU
版本 | Python 版本 | 编译器 | 编译工具 | cuDNN | CUDA |
---|---|---|---|---|---|
tensorflow_gpu-1.13.1 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.19.2 | 7.4 | 10.0 |
tensorflow_gpu-1.12.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.11.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.10.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.9.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.11.0 | 7 | 9 |
tensorflow_gpu-1.8.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.10.0 | 7 | 9 |
tensorflow_gpu-1.7.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.9.0 | 7 | 9 |
tensorflow_gpu-1.6.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.9.0 | 7 | 9 |
tensorflow_gpu-1.5.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.8.0 | 7 | 9 |
tensorflow_gpu-1.4.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.5.4 | 6 | 8 |
tensorflow_gpu-1.3.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.4.5 | 6 | 8 |
tensorflow_gpu-1.2.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.4.5 | 5.1 | 8 |
tensorflow_gpu-1.1.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.4.2 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 2.7、3.3-3.6 | GCC 4.8 | Bazel 0.4.2 | 5.1 | 8 |
(6)MacOS-GPU
版本 | Python 版本 | 编译器 | 编译工具 | cuDNN | CUDA |
---|---|---|---|---|---|
tensorflow_gpu-1.1.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.4.2 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 2.7、3.3-3.6 | XCode 中的 Clang | Bazel 0.4.2 | 5.1 | 8 |
3、环境配置
(1)安装Anaconda
/mnt/f/linux$ ./Anaconda3-4.3.1-Linux-x86_64.sh
方法一: 将Anaconda添加环境变量(该方法退出Linux重启后无效)
$ export PATH=/home/asialee/anaconda3/bin:$PATH
$ source ~/.bashrc
方法二:将Anaconda永久添加环境变量(该方法退出Linux重启后仍有效,配置稍微麻烦点)
$sudo vim /etc/profile
然后在打开的profile文本最后一行添加:export PATH=~/anaconda3/bin:$PATH
最后注入环境变量,让其立即生效,重启也有效
source /etc/profile
添加环境变量完成后,输入python后得到显示,即配置完成。
(2)安装部分软件
安装bazel或者以下编译操作可能需要安装的部分软件如下:
$ sudo apt install unzip
$ sudo apt install make
$ sudo apt install g++
$ sudo apt install gcc
$ sudo apt install cmake
如果安装不成功,则需要更新sudo后再尝试安装,即:sudo apt update。
(3)安装bazel
$ ./bazel-0.19.2-installer-linux-x86_64.sh --user
(4)安装protobuf
protobuf是最重要的一个,对版本要求非常严格,版本不对应会出现很多问题;本次使用的版本是protobuf 2.6.1,比较稳定。
解压protobuf-2.6.1.tar.gz
/mnt/f/linux$ tar -zxvf protobuf-2.6.1.tar.gz
进入解压后的protobuf-2.6.1文件目录,执行以下命令
/mnt/f/linux/protobuf-2.6.1$ ./configure
/mnt/f/linux/protobuf-2.6.1$ make
/mnt/f/linux/protobuf-2.6.1$ make install
注意:如果输入make install 时会出现make: *** [install-recursive] Error 1问题,则输入sudo make install 即可解决。
方法一:将protobuf加入环境变量(该方法重启后无效)
$ export LD_LIBRARY_PATH=/usr/local/lib
方法二: 将protobuf永久加入环境变量(重启后仍有效)
- $sudo vim /etc/profile
- 然后在打开的profile文本最后一行添加:export LD_LIBRARY_PATH=/usr/local/lib
- 最后注入环境变量,让其立即生效,重启也有效:source /etc/profile
查看版本以验证安装
$ protoc --version
4、配置TensorFlow安装选项
进入源码根目录,运行 ./configure 进行配置。可参考 官网 -> Build from source -> View sample configuration session 设置,如果只需要配置cpu环境就一直回车。
/mnt/f/linux/tensorflow-1.13.1$ ./configure
5、使用bazel进行编译生成动态库
#编译C++ API,生成.so文件,Tensorflow调用CUDA
/mnt/f/linux/tensorflow-1.13.1$ bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so
#编译C++ API,生成.so文件,Tensorflow不调用CUDA
/mnt/f/linux/tensorflow-1.13.1$ bazel build --config=opt //tensorflow:libtensorflow_cc.so
等待编译大约半个多小时,就成功编译:
编译成功后,tensorflow-1.13.1目录下会出现 bazel-xxx 的几个文件,在tensorflow-1.13.1/bazel-bin/tensorflow文件下会出现 libtensorflow_cc.so 和 libtensorflow_framework.so 动态库文件。(动态库文件下载)
6、编译其他依赖
cd /mnt/f/linux/tensorflow-1.13.1/tensorflow/contrib/makefile$ ./build_all_linux.sh
执行成功后,在tensorflow-1.13.1/tensorflow/contrib/makefile目录下:downloads文件夹下存放第三方依赖的一些头文件和静态库,比如nsync、Eigen、protobuf等。
说明:Eigen 是一个高层次的C ++库,有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法;Protocol Buffers (简称 Protobuf)是 Google 开源的一款跨语言,跨平台,扩展性好的序列化工具,相比于 XML 和 JSON 等流行的编码格式,这种数据结构化语言需要使用protoc进行编译。
转载:https://blog.csdn.net/asialee_bird/article/details/100990483