找回密码
 立即注册
Qt开源社区 门户 查看内容

如何在 Ubuntu Linux 和macOS 上构建 TensorFlow

2019-2-9 09:26| 发布者: admin| 查看: 1732| 评论: 0

摘要: 作者:TensorFlow 从源代码构建 TensorFlow pip 包,并将其安装在 Ubuntu Linux 和 macOS 上。 虽然这些说明可能适用于其他系统,但它仅针对 Ubuntu 和 macOS 进行测试和支持。注意:我们已经为 Linux 和 macOS 系 ...
作者:TensorFlow

从源代码构建 TensorFlow pip 包,并将其安装在 Ubuntu Linux 和 macOS 上。 虽然这些说明可能适用于其他系统,但它仅针对 Ubuntu 和 macOS 进行测试和支持。

注意:我们已经为 Linux 和 macOS 系统提供了经充分测试的预构建 TensorFlow 软件包。

Linux 和 macOS 的安装程序

安装以下构建工具,来配置开发环境。

安装 Python 和 TensorFlow 包依赖项

UBUNTU

$ sudo apt install python-dev python-pip  # or python3-dev python3-pip



MAC OS

需要 Xcode 8.3 或更高版本。

使用 Homebrew 包管理器安装:

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
$ brew install python@2  # or python (Python 3)


安装 TensorFlow pip 包依赖项(如果使用虚拟环境,则省略-- user 参数):

$ pip install -U --user pip six numpy wheel mock
$ pip install -U --user keras_applications==1.0.5 --no-deps
$ pip install -U --user keras_preprocessing==1.0.3 --no-deps


在 REQUIRED_PACKAGES 下的 setup.py 文件中查看依赖项。(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/pip_package/setup.py)

安装 Bazel

安装 Bazel,用于编译 TensorFlow 的构建工具。将 Bazel 可执行文件的位置添加到 PATH 环境变量中。

安装 GPU 支持(可选,仅限 Linux)

macOS 无 GPU 支持。

阅读 GPU 支持指南,将运行 TensorFlow 所需的驱动程序和其他软件安装在 GPU 上。

注意:设置一个 TensorFlow 支持 GPU 的 Docker 镜像会更容易一些。

下载 TensorFlow 源代码

使用 Git 克隆 TensorFlow 存储库:

$ git clone https://github.com/tensorflow/tensorflow.git

$ cd tensorflow



repo 默认为 master 开发分支。 您还可以检验需要构建的发布分支:

$ git checkout branch_name  # r1.9, r1.10, etc.



要测试 source tree 的副本,请运行以下测试(这可能需要一段时间):

$ bazel test -c opt -- //tensorflow/... -//tensorflow/compiler/... -//tensorflow/contrib/lite/...



关键点:如果您在最新的开发分支上遇到构建问题,请尝试一个已知可用的发布分支。

配置构建

通过在 TensorFlow 源代码树的根目录下运行以下命令来配置系统构建:

$ ./configure



此脚本会提示您输入 TensorFlow 依赖项的位置,并询问其他构建配置选项(例如,编译器标志)。 以下内容向我们展示了./configure 的示例运行(会话可能会有所不同):

查看示例配置会话

对于 GPU 支持,请指定 CUDA 和 cuDNN 的版本。 如果您的系统安装了多个版本的 CUDA 或 cuDNN,请显式设置版本,不要依赖于默认版本。 ./configure 创建指向系统 CUDA 库的符号链接 - 因此,如果更新 CUDA 库路径,必须在构建之前再次运行此配置步骤。

对于编译优化标志,缺省值(-march = native)优化为适应您的计算机 CPU 类型而生成的代码。 但是,如果为不同的 CPU 类型构建 TensorFlow,请考虑更具体的优化标志。 有关示例,请参阅 GCC 手册。

有一些预先配置的构建配置可以添加到 bazel 构建命令中,例如:

  • --config=mk1 —支持英特尔 ®MKL-DNN

  • --config=monolithic —Configuration 用于大多数静态的单片构建


注意:从 TensorFlow 1.6 开始,二进制文件使用 AVX 指令,这些指令可能无法在较老的 CPU 上运行。

构建 pip 包

Bazel 构建 仅 CPU

使用 bazel 让 TensorFlow 包构建器仅支持 CPU:

$ bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package



GPU 支持

要使 TensorFlow 包构建器具有 GPU 支持:

$ bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package



Bazel 构建选项

从源代码构建 TensorFlow 会使用大量的 RAM。 如果您的系统受内存限制,请使用以下命令限制 Bazel 的 RAM 使用情况:--local_resources 2048,.5,1.0.

官方 TensorFlow 软件包使用 GCC 4 构建,并使用较老的 ABI。对于 GCC 5 及更高版本,使用以下命令使您的构建与老的 ABI 兼容: - cxxopt =“ - D_GLIBCXX_USE_CXX11_ABI = 0”。 ABI 兼容性确保针对官方 TensorFlow 包构建的自定义操作继续与 GCC 5 构建的包一起使用。

构建包

bazel build 命令创建一个名为 build_pip_package 的可执行文件 - 这是一个构建 pip 包的程序。 例如,以下内容在  /tmp/tensorflow_pkg 目录中构建 .whl 包:

$ ./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg



虽然可以在同一 source tree 下构建 CUDA 和非 CUDA 配置,但推荐在同一 source tree 中切换这两种配置时运行 bazel clean。

安装包

生成的 .whl 文件的文件名取决于 TensorFlow 版本和您的平台。 使用 pip install 来安装软件包,例如:

$ pip install /tmp/tensorflow_pkg/tensorflow-version-cp27-cp27mu-linux_x86_64.whl



成功:现在已安装 TensorFlow。

Docker Linux 构建

TensorFlow 的 Docker 开发镜像是一种设置环境以从源代码构建 Linux 包的简单方法。 这些镜像已包含构建 TensorFlow 所需的源代码和依赖项。 请参阅 TensorFlow Docker 指南以获取安装和可用镜像标记列表(https://tensorflow.google.cn/install/docker?hl=zh-CN)

仅 CPU

以下示例使用 the :nightly-devel 镜像从最新的 TensorFlow 源代码构建仅 CPU 的 Python 2 包。 有关可用的 TensorFlow -devel 标记,请参阅 Docker 指南。

下载最新的开发镜像并启动我们将用于构建 pip 包的 Docker 容器:

$ docker pull tensorflow/tensorflow:nightly-devel
$ docker run -it -w /tensorflow -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \
    tensorflow/tensorflow:nightly-devel bash

# git pull  # within the container, download the latest source code


上面的 docker run 命令在 / tensorflow 目录中启动一个 shell – source tree 的根目录。 它将主机的当前目录安装在容器的 / mnt 目录中,并通过环境变量将主机用户的信息传递给容器(用于设置权限 - Docker 可以使这一点变得棘手)。

或者,要在容器中构建 TensorFlow 的主机副本,请将主机 source tree 挂载到容器的 / tensorflow 目录:

$ docker run -it -w /tensorflow -v /path/to/tensorflow:/tensorflow -v $PWD:/mnt \
    -e HOST_PERMS="$(id -u):$(id -g)" tensorflow/tensorflow:nightly-devel bash


设置 source tree 后,在容器的虚拟环境中构建 TensorFlow 包:

1. 配置构建 - 这会提示用户回答构建配置问题。

2. 构建用于创建 pip 包的工具。

3. 运行该工具以创建 pip 包。

4. 调整容器外部文件的所有权。


# ./configure  # answer prompts or use defaults

# bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

# ./bazel-bin/tensorflow/tools/pip_package/build_pip_package /mnt  # create package

# chown $HOST_PERMS /mnt/tensorflow-version-cp27-cp27mu-linux_x86_64.whl


安装并验证容器中的包:

# pip uninstall tensorflow  # remove current version

# pip install /mnt/tensorflow-version-cp27-cp27mu-linux_x86_64.whl
# cd /tmp  # don't import from source directory
# python -c "import tensorflow as tf; print(tf.__version__)"


成功:现已安装 TensorFlow。

在主机上,TensorFlow pip 包位于当前目录中(具有主机用户权限):./tensorflow-version-cy27-cp27mu-linux_x86_64.whl

GPU 支持

Docker 是为 TensorFlow 构建 GPU 支持的最简单方法,因为主机只需要 NVIDIA® 驱动程序(不必安装 NVIDIA® CUDA® Toolkit)。 请参阅 GPU 支持指南和 TensorFlow  Docker 指南, 来设置 nvidia-docker(仅限 Linux)。

以下示例加载 TensorFlow :nightly-devel-gpu-py3 镜像,并使用 nvidia-docker 运行启用 GPU 的容器。 此开发镜像配置为构建支持 GPU 的 Python 3 pip 包:

$ docker pull tensorflow/tensorflow:nightly-devel-gpu-py3
$ docker run --runtime=nvidia -it -w /tensorflow -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \
    tensorflow/tensorflow:nightly-devel-gpu-py3 bash


之后,在容器的虚拟环境中, 在 GPU 支持下构建 TensorFlow 包:

# ./configure  # answer prompts or use defaults

# bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

# ./bazel-bin/tensorflow/tools/pip_package/build_pip_package /mnt  # create package

# chown $HOST_PERMS /mnt/tensorflow-version-cp35-cp35m-linux_x86_64.whl


安装并验证容器中的包,并检查 GPU:

# pip uninstall tensorflow  # remove current version

# pip install /mnt/tensorflow-version-cp27-cp27mu-linux_x86_64.whl
# cd /tmp  # don't import from source directory
# python -c "import tensorflow as tf; print(tf.contrib.eager.num_gpus())"


成功:现已安装 TensorFlow。

经过测试的构建配置

Linux



点击图片,放大查看



点击图片,放大查看

macOS

CPU





点击图片,放大查看

GPU





点击图片,放大查看




-------------------------------------------------------------------------
我们尊重原创,也注重分享,如若侵权请联系qter@qter.org。
-------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了