TensorFlow 1.15.4 Installation from Source Code [TensorFlow 1.15.4 源码安装]
TensorFlow 2.x在如火如荼的迭代,1.15.4是TF 1.x的稳定版本。本文介绍在Ubuntu和virtualenv的环境下的tensorflow 1.15.4源码安装过程。源码安装的一个好处是可以自定义cuda和cudnn的次级版本号,比如TF 1.15.4默认支持CUDA 10,但是pip上的预安装的tensorflow 1.15.4是基于10.0,源码安装可以自定义到10.2。
Get TF 1.15.4
直接去TensorFlow Github上,选择tag v1.15.4,然后下载。或者直接通过git clone
然后git checkout
,来获得对应版本。
Install Python
需要python3-dev,python3-pip
,通过下面命令安装,不过这两个应该已经安装好了。
sudo apt install python3-dev python3-pip
Install Bazel
源码安装TF需要使用Bazel编译,不同的TF版本对于Bazel也有要求,具体要求参考TF源代码根目录的configuration.py
,TF 1.15.4的要求是_TF_MIN_BAZEL_VERSION = '0.24.1',_TF_MAX_BAZEL_VERSION = '0.26.1'
。
去Bazel的github页面,找到对应的tag下载文件bazel-<version>-installer-linux-x86_64.sh
,这里版本选择0.26.1
Ubuntu安装Bazel之前,还需要一些其他库
# 参考https://docs.bazel.build/versions/master/install-ubuntu.html
sudo apt install g++ unzip zip
之后就可以进行安装
chmod +x bazel-<version>-installer-linux-x86_64.sh
sudo ./bazel-<version>-installer-linux-x86_64.sh --bin=/usr/local/bin
使用--bin
安装方式,Bazel会被安装在制定路径,我自己喜欢安装在/usr/local/bin
./bazel-<version>-installer-linux-x86_64.sh --user
使用--user
安装方式,Bazel会被安装在$HOME/bin
,所以确保~/.bashrc
文件里有对应的path路径
Build Virtualenv
前文已经介绍了如何安装和建立python virtualenv,这里就不赘述了,直接为TF建立一个专门的virtualenv
virtualenv -p python3 --no-site-packages tf-venv
基本上后续所有操作都要在tf-venv这个虚拟环境下进行
Install Dependencies
在文件tensorflow-1.15.3/tensorflow/tools/pip_package/setup.py
中定义了所有需要的第三方库和对应的要求版本。安装其中的six,numpy,wheel,setuptools,keras_applications,keras_preprocessing
pip install -U six 'numpy<1.19.0' wheel setuptools
pip install -U keras_applications --no-deps
pip install -U keras_preprocessing --no-deps
Install CUDA and CuDNN
考虑到版本兼容问题,这里选择CUDA 10.2,从cuda官网下载安装即可,基本不会出现什么问题
配合CUDA 10.2,选择CUDNN 7.6.5下载安装。其实CUDNN本质就是一堆库文件,所以直接下载解压然后放到对应的文件夹
tar -xzvf cudnn-10.2-linux-x64-v7.6.5.32.tgz
sudo cp cuda/include/cudnn*.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
现在也可以通过Pip3在虚拟环境里安装对应版本的CUDA和CuDNN,隔离性更好,也更方便维护。
Configure TensorFlow
运行源代码根目录下的configure命令,进行命令编译准备
./configure
确认python的路径为tf-venv中的python路径和Python library路径
整个配置过程有一些选项需要选择
# XLA JIT全称Accelerated Linear Algebra Just In Time Compile,好像容易引起一些问题,所以no
Do you wish to build TensorFlow with XLA JIT support? [Y/n]: n
# 为了支持AMD的选项,不过好像还不是很成熟
Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: n
# 为了支持AMD ROCm[Radeon Open Compute]技术
Do you wish to build TensorFlow with ROCm support? [y/N]: n
# TensorRT是一个高性能的深度学习推理优化器,一般的TF并不需要
Do you wish to build TensorFlow with TensorRT support? [y/N]: n
# 不需要使用clang编译
Do you want to use clang as CUDA compiler? [y/N]: n
# 不需要MPI
Do you wish to build TensorFlow with MPI support? [y/N]: n
Install TensorFlow
配置之后就可以使用Bazel编译TF的whl文件了
bazel build --config=v1 --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
--config=v1
表示要编译的是1.x版本,--config=opt
应该是要优化编译过程,似乎是使用全部可用thread,--config=cuda
表示编译的TF支持GPU计算
编译过程中会出错
ERROR: /build/output/external/nccl_archive/BUILD.bazel:53:1: fatbinary external/nccl_archive/device_dlink_hdrs.fatbin failed (Exit 1) fatbinary fatal: Unknown option ‘-bin2c-path’
需要对源代码进行简单的修改
# 修改文件 tensorflow/third_party/nccl/build_defs.bzl.tpl
# 找到函数,删除"--bin2c-path=%s" % bin2c.dirname
def _device_link_impl(ctx):
"--cmdline=--compile-only",
"--link",
"--compress-all",
"--bin2c-path=%s" % bin2c.dirname,
"--create=%s" % tmp_fatbin.path,
"--embedded-fatbin=%s" % fatbin_h.path,
] + images,
编译成功后即可生成whl文件
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
/tmp/tensorflow_pkg
,其实可以是任意路径,此路径下就会生成安装文件tensorflow-<version-info>-linux_x86_64.whl
pip3 install /tmp/tensorflow_pkg/tensorflow-<version-info>-linux_x86_64.whl
至此,成功在虚拟环境里安装了TensorFlow 1.15.4