安装过程
目前较为稳定的版本为 0.12,本文以此为例。其他版本请读者自行甄别安装步骤是否需要根据实际情况修改。
TensorFlow 支持以下几种安装方式:
- PIP 安装
- 源码编译安装
- Docker 镜像安装
PIP 安装
PIP 是一种包管理系统,用于安装和管理用 Python 写的软件包。 —— [ Python PIP ]
安装 PIP
# Ubuntu/Linux 64-bit $ sudo apt-get install python-pip python-dev # CentOS, Fedora, RHEL $ sudo yum install python-pip python-devel # Mac OS X $ sudo easy_install pip
安装 TensorFlow
# Python 2 $ sudo pip install --upgrade $TF_BINARY_URL # Python 3 $ sudo pip3 install --upgrade $TF_BINARY_URL 其中环境变量 TF_BINARY_URL 根据你的环境进行设置,典型选项如下: # Ubuntu/Linux 64-bit, CPU only, Python 2.7 $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.12.1-cp27-none-linux_x86_64.whl # Ubuntu/Linux 64-bit, GPU enabled, Python 2.7 # 需要 CUDA toolkit 8.0 和 CuDNN v5. 其他版本只能用源码方式安装 $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.1-cp27-none-linux_x86_64.whl # Mac OS X, CPU only, Python 2.7: $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.12.1-py2-none-any.whl # Mac OS X, GPU enabled, Python 2.7: $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow_gpu-0.12.1-py2-none-any.whl # Ubuntu/Linux 64-bit, CPU only, Python 3.4 $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.12.1-cp34-cp34m-linux_x86_64.whl # Ubuntu/Linux 64-bit, GPU enabled, Python 3.4 # 需要 CUDA toolkit 8.0 和 CuDNN v5. 其他版本只能用源码方式安装 $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.1-cp34-cp34m-linux_x86_64.whl # Ubuntu/Linux 64-bit, CPU only, Python 3.5 $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.12.1-cp35-cp35m-linux_x86_64.whl # Ubuntu/Linux 64-bit, GPU enabled, Python 3.5 # Requires CUDA toolkit 8.0 and CuDNN v5. For other versions, see "Installing from sources" below. $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.1-cp35-cp35m-linux_x86_64.whl # Mac OS X, CPU only, Python 3.4 or 3.5: $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.12.1-py3-none-any.whl # Mac OS X, GPU enabled, Python 3.4 or 3.5: $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow_gpu-0.12.1-py3-none-any.whl
我的做法是先把 whl 文件下载到本地,然后拷贝到其他机器上安装。
运行记录如下:
# pip install tensorflow_gpu-0.12.1-cp27-none-linux_x86_64.whl You are using pip version 7.1.0, however version 9.0.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command. Processing ./tensorflow_gpu-0.12.1-cp27-none-linux_x86_64.whl Collecting mock>=2.0.0 (from tensorflow-gpu==0.12.1) Using cached mock-2.0.0-py2.py3-none-any.whl Collecting protobuf>=3.1.0 (from tensorflow-gpu==0.12.1) Downloading protobuf-3.1.0.post1-py2.py3-none-any.whl (347kB) 100% |████████████████████████████████| 348kB 164kB/s Collecting numpy>=1.11.0 (from tensorflow-gpu==0.12.1) Downloading numpy-1.11.3.zip (4.7MB) 100% |████████████████████████████████| 4.7MB 34kB/s Collecting wheel (from tensorflow-gpu==0.12.1) Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB) 100% |████████████████████████████████| 69kB 58kB/s Collecting six>=1.10.0 (from tensorflow-gpu==0.12.1) Downloading six-1.10.0-py2.py3-none-any.whl Collecting funcsigs>=1 (from mock>=2.0.0->tensorflow-gpu==0.12.1) Downloading funcsigs-1.0.2-py2.py3-none-any.whl Collecting pbr>=0.11 (from mock>=2.0.0->tensorflow-gpu==0.12.1) Downloading pbr-1.10.0-py2.py3-none-any.whl (96kB) 100% |████████████████████████████████| 98kB 93kB/s Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/lib/python2.7/site-packages (from protobuf>=3.1.0->tensorflow-gpu==0.12.1) Installing collected packages: funcsigs, six, pbr, mock, protobuf, numpy, wheel, tensorflow-gpu Found existing installation: six 1.9.0 Uninstalling six-1.9.0: Successfully uninstalled six-1.9.0 Running setup.py install for numpy Successfully installed funcsigs-1.0.2 mock-2.0.0 numpy-1.11.3 pbr-1.10.0 protobuf-3.1.0.post1 six-1.10.0 tensorflow-gpu-0.12.1 wheel-0.29.0
从运行记录可以看到 pip 安装 TensorFlow 时会自动将依赖安装。如果你需要在另一台没有网络的机器上安装 TensorFlow,需要将依赖打包拷过去才能正常运行。
PIP 安装的优缺点
优点:应该是几种安装方法中最快的一种
缺点:不能灵活定制,操作系统、GPU 硬件、CUDA 版本、cuDNN 版本必须与官方标称一致
pip安装过程中遇到的问题
(1)
raise SSLError(e, request=request) SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:765)
解决方案
pip install certifi==2015.04.28
(2)
本人已开始安装的版本是https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl
导致,只在某个目录下可以执行TensorFlow,其他目录 import tensorflow as tf 时,会提示:段错误 吐核。注意在pycharm中不会提示任何错误,但是就是不执行。
最后删除0.8版本,安装 https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.12.1-cp27-none-linux_x86_64.whl版本,问题解决。不知道是什么原因
源码编译安装
本小节的安装方法适合对 TensorFlow 做定制的场景。
下载源码
$ Git clone --recurse-submodules https://github.com/tensorflow/tensorflow
安装 Bazel
参考 http://bazel.io/docs/install.html
配置
$ ./configure
根据你的实际情况如实回答一系列问题。回答之后 bazel 会对环境进行配置,此时需要机器可以访问外网,便于获取一些编译依赖包。
编译
仅 CPU 支持,无 GPU 支持: $ bazel build -c opt //tensorflow/tools/pip_package:build_pip_package
有 GPU 支持: $ bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
– 生成 pip 安装包 $ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
– 使用 PIP 工具安装 $ pip install /tmp/tensorflow_pkg/tensorflow-x.x.x-py2-none-linux_x86_64.whl
源码安装的优缺点
优点:灵活定制,可按需增加新特性
缺点:门槛高,配置编译环境耗时较长
Docker 镜像安装
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 —— [ Docker ]
当你通过 Docker 安装和运行 TensorFlow 时,它与你机器上之前已安装的软件包完全隔离。
官方镜像
官方提供了 4 个 Docker 镜像可供使用:
- 仅 CPU 版,无开发环境:
gcr.io/tensorflow/tensorflow
- 仅 CPU 版,有开发环境:
gcr.io/tensorflow/tensorflow:latest-devel
- 支持 GPU,无开发环境:
gcr.io/tensorflow/tensorflow:latest-gpu
- 支持 GPU,有开发环境:
gcr.io/tensorflow/tensorflow:latest-devel-gpu
另外提供了对应某个发布版本的镜像,只需将上面 tag 中 latest 替换为发布版本号。安装详细步骤如下:
创建 Docker 用户组
允许普通用户无需 sudo 即可启动容器。
usermod -a -G docker YOURNAME
启动 Docker 容器
选择上述 4 个镜像中的一个,创建容器。第一次执行该命令时会自动下载镜像,以后不需要再次下载。
docker run -it gcr.io/tensorflow/tensorflow
如果你使用了支持 GPU 的容器,在运行该命令时需要增加额外参数,目的是将宿主机上的 GPU 设备暴露给容器。使用 TensorFlow 源码中提供的脚本可以实现该功能
$ cd $TENSORFLOW_ROOT/tensorflow/tools/docker/ $ ./docker_run_gpu.sh gcr.io/tensorflow/tensorflow:gpu
好奇心驱使我们查看该脚本的具体细节:
#!/usr/bin/env bash set -e export CUDA_HOME=${CUDA_HOME:-/usr/local/cuda} if [ ! -d ${CUDA_HOME}/lib64 ]; then echo "Failed to locate CUDA libs at ${CUDA_HOME}/lib64." exit 1 fi export CUDA_SO=$(\ls /usr/lib/x86_64-linux-gnu/libcuda.* | \ xargs -I{} echo '-v {}:{}') export DEVICES=$(\ls /dev/nvidia* | \ xargs -I{} echo '--device {}:{}') if [[ "${DEVICES}" = "" ]]; then echo "Failed to locate NVidia device(s). Did you want the non-GPU container?" exit 1 fi docker run -it $CUDA_SO $DEVICES "$@"
主要做了几件事:
- 暴露宿主机的 CUDA_HOME 环境变量给容器使用;
- 暴露宿主机的 libcuda.* 动态链接库给容器访问;
- 暴露宿主机的 /dev/nvidia* 设备给容器访问;
Docker 镜像安装的优缺点
优点:适合在大量相同环境机器构成的集群上批量部署
缺点:有墙的孩子像根草,增加了 Docker 学习成本