在 Ubuntu 上安装 TensorFlow
这篇指南描述了如何在 Ubuntu 上安装 TensorFlow。这些实例也可能在其他 Linux 版本生效,但我们只在 Ubuntu 14.04 及更高的版本上测试过。
确定 TensorFlow 版本
如下之中选择一种来安装:
- 只支持 CPU 的 TensorFlow。如果你的系统不支持 NVIDIA® GPU, 你必须安装这个版本。这个版本的 TensorFlow 通常安装起来比较简单(一般 5 到 10分钟),所以即使你拥有 NVIDIA GPU,我们也推荐首先安装这个版本。
- 支持 GPU 的 TensorFlow. TensorFlow 在 GPU 上通常比在 CPU 上的执行的更快。所以如果你有符合如下要求的 NVIDIA® GPU 并且需要注重性能,可以随后安装这个版本。
GPU support TensorFlow 的 NVIDIA 需求
需要事先安装如下 NVIDIA 软件。
- CUDA® Toolkit 8.0. 详见 NVIDIA's documentation。确保按照文档中描述的将 Cuda 相关路径加入到
LD_LIBRARY_PATH
环境变量中。 - CUDA Toolkit 8.0 相关的 NVIDIA 驱动。
- cuDNN v5.1。详见 NVIDIA's documentation。确保创建了
CUDA_HOME
环境变量。 - CUDA Compute Capability 3.0 或更高的 GPU 芯片。支持的 GPU 芯片详见 NVIDIA documentation 。
libcupti-dev 库, 该库提供了高级的性能支持,按如下命令安装:
$ sudo apt-get install libcupti-dev
如果含有上述库但版本较老,先升级。如果不能升级,操作如下:
- 从源码安装 TensorFlow
- 安装或升级至少如下版本:
- CUDA toolkit 7.0 或更高
- cuDNN v3 或更高
- CUDA Compute Capability 3.0 或更高的 GPU 芯片。
确定如何安装 TensorFlow
有如下选择:
推荐 virtualenv 安装 (略过四种方法的说明,自行查找)
virtualenv 安装
步骤如下:
安装 pip 及 virtualenv:
$ sudo apt-get install python-pip python-dev python-virtualenv
建立 virtualenv 环境:
$ virtualenv --system-site-packages targetDirectory
targetDirectory
指明了 virtualenv 的位置。激活 virtualenv 环境:
$ source ~/tensorflow/bin/activate # bash, sh, ksh, or zsh $ source ~/tensorflow/bin/activate.csh # csh or tcsh
如上操作会将提示符更改为如下:
(tensorflow)$
如下命令中选取一个安装 TensorFlow:
(tensorflow)$ pip install --upgrade tensorflow # for Python 2.7 (tensorflow)$ pip3 install --upgrade tensorflow # for Python 3.n (tensorflow)$ pip install --upgrade tensorflow-gpu # for Python 2.7 and GPU (tensorflow)$ pip3 install --upgrade tensorflow-gpu # for Python 3.n and GPU
上述命令成功则跳过步骤5,否则执行步骤5。(可选) 如果步骤4失败 (通常因为 pip 版本小于 8.1):
(tensorflow)$ pip install --upgrade TF_PYTHON_URL # Python 2.7 (tensorflow)$ pip3 install --upgrade TF_PYTHON_URL # Python 3.N
TF_PYTHON_URL
指定了 python tensorflow 的包的地址。TF_PYTHON_URL
依赖于操作系统、Python 版本、GPU 支持,从 这里 找到合适的URL。如,安装 TensorFlow for Linux, Python 2.7、CPU-only,使用如下命令:(tensorflow)$ pip3 install --upgrade \ https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp34-cp34m-linux_x86_64.whl
如果遇到安装问题,详见 常见安装问题.
下一步
安装完毕之后: 验证安装结果。
注意,每次使用 TensorFlow 前需要先激活 virtualenv 环境,使用如下命令:
$ source ~/tensorflow/bin/activate # bash, sh, ksh, or zsh $ source ~/tensorflow/bin/activate.csh # csh or tcsh
激活之后可从当前 shell 执行命令,此时提示符变成如下:
(tensorflow)$
使用完毕 TensorFlow 可用 deactivate
命令退出当前 virtualenv 环境:
(tensorflow)$ deactivate
此时提示符将会返回到默认提示符 (在 PS1
环境变量中定义)。
卸载 TensorFlow
卸载 TensorFlow,删除相关目录即可:
$ rm -r targetDirectory
原生 pip 安装
注意: setup.py 的 REQUIRED_PACKAGES 部分 列出了 pip 将会安装或者升级的 TensorFlow 包。
前提:Python 及 Pip
Python 已经在 Ubuntu 中自动安装了。花谢时间确定(python -v
)你的操作系统中含有如下 Python 版本中的一个:
- Python 2.7
- Python 3.3+
Pip 或 pip3 通常已经在 Ubuntu 中安装。花些时间确定(pip -V
或pip3 -V
)已经安装。强烈建议使用 8.1 或更高的版本。如果 8.1 或更高的版本没有安装,使用如下命令安装或升级到最新 pip 版本:
$ sudo apt-get install python-pip python-dev
安装 TensorFlow
假定已经安装了如上必要软件,如下步骤安装 TensorFlow:
如下命令之一安装:
$ pip install tensorflow # Python 2.7; CPU support (no GPU support) $ pip3 install tensorflow # Python 3.n; CPU support (no GPU support) $ pip install tensorflow-gpu # Python 2.7; GPU support $ pip3 install tensorflow-gpu # Python 3.n; GPU support
如上命令执行完毕,可验证安装结果.
(可选) 如果步骤1失败,使用如下命令安装:
$ sudo pip install --upgrade TF_PYTHON_URL # Python 2.7 $ sudo pip3 install --upgrade TF_PYTHON_URL # Python 3.N
TF_PYTHON_URL
指定了 python tensorflow 的包的地址。TF_PYTHON_URL
依赖于操作系统、Python 版本、GPU 支持,从 这里 找到合适的URL。 例如,安装 TensorFlow for Linux, Python 3.4、CPU-only,使用如下命令:$ sudo pip3 install --upgrade \ https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp34-cp34m-linux_x86_64.whl
该步骤失败查询 常见安装问题.
下一步
安装完毕之后: 验证安装结果。
卸载 TensorFlow
如下命令卸载:
$ sudo pip uninstall tensorflow # for Python 2.7 $ sudo pip3 uninstall tensorflow # for Python 3.n
Docker 安装
如下步骤通过 Docker 安装 TensorFlow:
- 按描述在你的机器上安装 Docker Docker documentation.
- 可选,建立名为
docker
的用户组以便不通过 sudo 来登陆 container, Docker documentation. (如果省略该步骤,每次启动 Docker 都需要使用 sudo。) - 为安装支持 GPU 的 TensorFlow 版本,需要首先 安装 nvidia-docker
- 启动含有 TensorFlow binary images. 之一的 Docker 容器。
本章节的其余部分描述了如何启动一个 Docker 容器。
CPU-only
使用如下命令启动一个 CPU-only Docker 容器:
$ docker run -it -p hostPort:containerPort TensorFlowCPUImage
其中:
- -p hostPort:containerPort 可选。
如果计划从 shell 执行 TensorFlow 程序,忽略该选项。
如果计划作为
Jupyter notebooks
执行 TensorFlow 程序,设定 hostPort 及 containerPort 均为 8888。如果计划在容器中启动 TensorBoard, 添加第二个-p
参数, 设定 hostPort 及 containerPort 均为 6006. TensorFlowCPUImage 是必须的. 它指定了使用的容器,如下选项中选取一个:
- gcr.io/tensorflow/tensorflow, TensorFlow CPU 镜像。
- gcr.io/tensorflow/tensorflow:latest-devel, 最新的 TensorFlow CPU 镜像外加源代码。
- gcr.io/tensorflow/tensorflow:version,指定版本(如1.0.1)。
- gcr.io/tensorflow/tensorflow:version-devel,指定版本外加源代码。
gcr.io 是 Google 的容器仓库。注意一些镜像同样可从 dockerhub获取。
例如,如下命令在一个容器中启动最新的 TensorFlow CPU 镜像,你可以在 shell 中执行 TensorFlow 程序:
$ docker run -it gcr.io/tensorflow/tensorflow bash
如下命令同样在一个容器中启动最新的 TensorFlow CPU 镜像。
但是在该容器中,你可以在Jupyter notebook
中执行 TensorFlow 程序:
$ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow
Docker 会在你第一次启动 TensorFlow 镜像时下载它。
GPU support
安装支持 GPU 的 TensorFlow 之前,确保你的系统满足 NVIDIA software requirements。To launch a Docker container 通过如下命令,启动一个支持 GPU 的 TensorFlow 的 Docker 容器
$ nvidia-docker run -it -p hostPort:containerPort TensorFlowGPUImage
其中:
- -p hostPort:containerPort 可选。
如果计划从 shell 执行 TensorFlow 程序,忽略该选项。
如果计划作为
Jupyter notebooks
执行 TensorFlow 程序,设定 hostPort 及 containerPort 均为 8888。 - TensorFlowCPUImage 是必须的. 它指定了使用的容器,如下选项中选取一个:
- gcr.io/tensorflow/tensorflow:latest-gpu,最新 TensorFlow GPU 镜像。
- gcr.io/tensorflow/tensorflow:latest-devel-gpu,最新 TensorFlow GPU 镜像外加源代码。
- gcr.io/tensorflow/tensorflow:version-gpu,指定版本的 TensorFlow GPU 镜像。
- gcr.io/tensorflow/tensorflow:version-devel-gpu,指定版本的 TensorFlow GPU 镜像外加源代码。
我们推荐安装一个最新
版。如下命令可以在 Docker 容器中启动一个最新版本 TensorFlow GPU 镜像,
你可以在其 shell 中执行TensorFlow 程序:
$ nvidia-docker run -it gcr.io/tensorflow/tensorflow:latest-gpu bash
如下命令同样在一个容器中启动最新的 TensorFlow GPU 镜像。
但是在该容器中,你可以在Jupyter notebook
中执行 TensorFlow 程序:
$ nvidia-docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow:latest-gpu
如下命令启动一个老版本的 TensorFlow:
$ nvidia-docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow:0.12.1-gpu
Docker 会在你第一次启动 TensorFlow 镜像时下载它。详情 TensorFlow docker readme.
下一步
安装完毕之后: 验证安装结果。
Anaconda 安装
按照如下步骤在 Anaconda 环境中安装 TensorFlow:
按说明下载并安装 Anaconda: Anaconda download site
建立一个 conda 环境,命名为 tensorflow,以便运行某个 Python 版本:
$ conda create -n tensorflow
激活 anaconda 环境:
$ source activate tensorflow (tensorflow)$ # 你的提示符应变化
在你的 conda 环境中安装 TensorFlow:
(tensorflow)$ pip install --ignore-installed --upgrade TF_PYTHON_URL
其中
TF_PYTHON_URL
是 TensorFlow Python 包地址. 比如:如下命令可以为 Python 3.4 安装 CPU-only 版本的 TensorFlow:(tensorflow)$ pip install --ignore-installed --upgrade \ https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp34-cp34m-linux_x86_64.whl
验证安装结果
按如下操作验证 TensorFlow 安装结果:
- 确保准备环境完备
- 执行一个简短的 TensorFlow 程序
准备环境
If you installed on native pip, virtualenv, or Anaconda, then do the following: 如果通过原生 pip、virtualenv、Anaconda 安装,做如下操作:
- 启动一个 terminal
- 如果通过 virtualenv 或 Anaconda 安装,激活容器
- 如果你安装了 TensorFlow 源码,定位到不含源码的任一目录中
如果通过 Docker 安装,启动一个可以通过 bash 操作的 Docker 容器:
$ docker run -it gcr.io/tensorflow/tensorflow bash
执行一个简短的 TensorFlow 程序
在 shell 中调用 Python:
$ python
在 Python 交互式环境中输入如下命令:
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
如果系统输出如下,则安装成功:
Hello, TensorFlow!
如果你新接触 TensorFlow,参考初识 TensorFlow进行下一步学习。
如果系统输出错误信息而非欢迎信息,查看常见安装问题。
常见安装问题
我们依靠 Stack Overflow 来编写 TensorFlow 安装问题及解决方案的文档。
如下表格包含了 Stack Overflow 上比较常见的安装问题的连接。
如果你遇到了不在列表中的新的错误信息或者其他安装问题,请在 Stack Overflow 上搜索。
如果搜索不到,请在 Stack Overflow 上提出一个新的问题,并打上 tensorflow
的标签。
Stack Overflow Link | Error Message |
---|---|
36159194 | ImportError: libcudart.so.Version: cannot open shared object file: No such file or directory |
41991101 | ImportError: libcudnn.Version: cannot open shared object file: No such file or directory |
36371137 and here | libprotobuf ERROR google/protobuf/src/google/protobuf/io/coded_stream.cc:207] A protocol message was rejected because it was too big (more than 67108864 bytes). To increase the limit (or to disable these warnings), see CodedInputStream::SetTotalBytesLimit() in google/protobuf/io/coded_stream.h. |
35252888 | Error importing tensorflow. Unless you are using bazel, you should not try to import tensorflow from its source directory; please exit the tensorflow source tree, and relaunch your python interpreter from there. |
33623453 | IOError: [Errno 2] No such file or directory: '/tmp/pip-o6Tpui-build/setup.py' |
42006320 | ImportError: Traceback (most recent call last): File ".../tensorflow/core/framework/graph_pb2.py", line 6, in |
35190574 | SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed |
42009190 | Installing collected packages: setuptools, protobuf, wheel, numpy, tensorflow Found existing installation: setuptools 1.1.6 Uninstalling setuptools-1.1.6: Exception: ... [Errno 1] Operation not permitted: '/tmp/pip-a1DXRT-uninstall/.../lib/python/_markerlib' |
36933958 | ... Installing collected packages: setuptools, protobuf, wheel, numpy, tensorflow Found existing installation: setuptools 1.1.6 Uninstalling setuptools-1.1.6: Exception: ... [Errno 1] Operation not permitted: '/tmp/pip-a1DXRT-uninstall/System/Library/Frameworks/Python.framework/ Versions/2.7/Extras/lib/python/_markerlib' |
TensorFlow Python 包地址(TF_PYTHON_URL
)
一些安装方法需要 TensorFlow Python 包,它的地址依赖于几个方面:
- 操作系统
- Python 版本
- CPU-only 还是 GPU support
Python 2.7
CPU only:
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp27-none-linux_x86_64.whl
GPU support:
https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.1.0-cp27-none-linux_x86_64.whl
注意 GPU 支持需要满足 NVIDIA 硬件需求以及在 GPU support TensorFlow 的 NVIDIA 需求 中描述的软件。
Python 3.4
CPU only:
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp34-cp34m-linux_x86_64.whl
GPU support:
https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.1.0-cp34-cp34m-linux_x86_64.whl
注意 GPU 支持需要满足 NVIDIA 硬件需求以及在 GPU support TensorFlow 的 NVIDIA 需求 中描述的软件。
Python 3.5
CPU only:
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp35-cp35m-linux_x86_64.whl
GPU support:
https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.1.0-cp35-cp35m-linux_x86_64.whl
注意 GPU 支持需要满足 NVIDIA 硬件需求以及在 GPU support TensorFlow 的 NVIDIA 需求 中描述的软件。
Python 3.6
CPU only:
https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp36-cp36m-linux_x86_64.whl
GPU support:
https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.1.0-cp36-cp36m-linux_x86_64.whl
注意 GPU 支持需要满足 NVIDIA 硬件需求以及在 GPU support TensorFlow 的 NVIDIA 需求 中描述的软件。
Protobuf pip 包 3.1
如果没有遇到和 protobuf pip 包相关的问题,你可以跳过这个部分。
注意: 如果你的 TensorFlow 运行缓慢,你可能遇到了一个 protobuf pip 包相关的问题。
TensorFlow pip 包依赖于 protobuf pip 包 3.1。 从 PyPI 下载的 protobuf 是 proto 序列化/反序列化的纯 Python 实现的库, 其速度比 C++ 实现慢10-50倍。Protobuf 支持二进制扩展,速度更快,基于 C++。 但该扩展无法在纯Python实现的 pip 包中获取。我们制作了包含该二进制扩展的protobuf pip 包。 如下命令可安装该自定义的 protobuf pip 包:
for Python 2.7:
$ pip install --upgrade \ https://storage.googleapis.com/tensorflow/linux/cpu/protobuf-3.1.0-cp27-none-linux_x86_64.whl
for Python 3.5:
$ pip3 install --upgrade \ https://storage.googleapis.com/tensorflow/linux/cpu/protobuf-3.1.0-cp35-none-linux_x86_64.whl
安装这个 protobuf 包会覆盖已经存在的 protobuf 包。 注意该二进制 pip 包已经支持大于 64MB 的问题,修复了如下问题:
[libprotobuf ERROR google/protobuf/src/google/protobuf/io/coded_stream.cc:207] Protocol message 被拒绝,因为太大(大于 67108864 字节)。 为增大限制或禁用报警, 在 google/protobuf/io/coded_stream.h 中查看 CodedInputStream::SetTotalBytesLimit()