查看: 360|回复: 1

[教程] 如何在 Ubuntu Linux 和 macOS 上构建 TensorFlow

[复制链接]

主题

好友

192

积分

童生

  • TA的每日心情
    擦汗
    2018-10-18 15:28
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2018-11-1 16:46:28 |显示全部楼层
    从源代码构建 TensorFlow pip 包,并将其安装在 Ubuntu Linux 和 macOS 上。 虽然这些说明可能适用于其他系统,但它仅针对 Ubuntu 和 macOS 进行测试和支持。

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

    Linux 和 macOS 的安装程序


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

    安装 Python 和 TensorFlow 包依赖项


    UBUNTU
    1. $ sudo apt install python-dev python-pip  # or python3-dev python3-pip
    复制代码

    MAC OS
    需要 Xcode 8.3 或更高版本。
    使用 Homebrew 包管理器安装:
    1. $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    2. $ export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
    3. $ brew install python@2  # or python (Python 3)
    复制代码

    安装 TensorFlow pip 包依赖项(如果使用虚拟环境,则省略-- user 参数):
    1. $ pip install -U --user pip six numpy wheel mock
    2. $ pip install -U --user keras_applications==1.0.5 --no-deps
    3. $ 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 存储库:
    1. $ git clone https://github.com/tensorflow/tensorflow.git
    2. $ cd tensorflow
    复制代码

    repo 默认为 master 开发分支。 您还可以检验需要构建的发布分支:
    1. $ git checkout branch_name  # r1.9, r1.10, etc.
    复制代码

    要测试 source tree 的副本,请运行以下测试(这可能需要一段时间):
    1. $ bazel test -c opt -- //tensorflow/... -//tensorflow/compiler/... -//tensorflow/contrib/lite/...
    复制代码

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

    配置构建
    通过在 TensorFlow 源代码树的根目录下运行以下命令来配置系统构建:
    1. $ ./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:
    1. $ bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
    复制代码

    GPU 支持
    要使 TensorFlow 包构建器具有 GPU 支持:
    1. $ 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 包:
    1. $ ./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
    复制代码

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

    安装包
    生成的 .whl 文件的文件名取决于 TensorFlow 版本和您的平台。 使用 pip install 来安装软件包,例如:
    1. $ 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 容器:
    1. $ docker pull tensorflow/tensorflow:nightly-devel
    2. $ docker run -it -w /tensorflow -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \
    3.     tensorflow/tensorflow:nightly-devel bash

    4. # git pull  # within the container, download the latest source code
    复制代码

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

    或者,要在容器中构建 TensorFlow 的主机副本,请将主机 source tree 挂载到容器的 / tensorflow 目录:
    1. $ docker run -it -w /tensorflow -v /path/to/tensorflow:/tensorflow -v $PWD:/mnt \
    2.     -e HOST_PERMS="$(id -u):$(id -g)" tensorflow/tensorflow:nightly-devel bash
    复制代码

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

    1. 配置构建 - 这会提示用户回答构建配置问题。
    2. 构建用于创建 pip 包的工具。
    3. 运行该工具以创建 pip 包。
    4. 调整容器外部文件的所有权。

    1. # ./configure  # answer prompts or use defaults

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

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

    4. # chown $HOST_PERMS /mnt/tensorflow-version-cp27-cp27mu-linux_x86_64.whl
    复制代码

    安装并验证容器中的包:
    1. # pip uninstall tensorflow  # remove current version

    2. # pip install /mnt/tensorflow-version-cp27-cp27mu-linux_x86_64.whl
    3. # cd /tmp  # don't import from source directory
    4. # 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 包:
    1. $ docker pull tensorflow/tensorflow:nightly-devel-gpu-py3
    2. $ docker run --runtime=nvidia -it -w /tensorflow -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \
    3.     tensorflow/tensorflow:nightly-devel-gpu-py3 bash
    复制代码

    之后,在容器的虚拟环境中, 在 GPU 支持下构建 TensorFlow 包:
    1. # ./configure  # answer prompts or use defaults

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

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

    4. # chown $HOST_PERMS /mnt/tensorflow-version-cp35-cp35m-linux_x86_64.whl
    复制代码

    安装并验证容器中的包,并检查 GPU:
    1. # pip uninstall tensorflow  # remove current version

    2. # pip install /mnt/tensorflow-version-cp27-cp27mu-linux_x86_64.whl
    3. # cd /tmp  # don't import from source directory
    4. # python -c "import tensorflow as tf; print(tf.contrib.eager.num_gpus())"
    复制代码
    成功:现已安装 TensorFlow。


    经过测试的构建配置
    Linux
    1.jpg


    2.jpg


    macOS
    CPU
    3.jpg


    GPU
    4.jpg



    - THE END -






    回复

    使用道具 举报

    主题

    好友

    795

    积分

    举人

  • TA的每日心情
    开心
    2017-12-29 15:29
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2018-11-2 09:05:00 |显示全部楼层
    谢谢楼主分享
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /3 下一条

    手机版|爱板网

    GMT+8, 2018-11-17 23:55 , Processed in 0.139617 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-5   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001056号

    Powered by Discuz!

    返回顶部