使用 Docker 从源代码编译 TensorFlow 以提高 CPU 速度

Posted

技术标签:

【中文标题】使用 Docker 从源代码编译 TensorFlow 以提高 CPU 速度【英文标题】:Compile Tensorflow from source with Docker to get CPU speed up 【发布时间】:2017-08-22 00:05:46 【问题描述】:

我正在寻找一种方法来设置或修改现有 Docker 映像以安装 tensorflow,该映像将安装它,以便可以利用 SSE4、AVX、AVX2 和 FMA 指令来提高 CPU 速度。到目前为止,我已经找到了如何使用 bazel How to Compile Tensorflow... 和 CPU instructions not compiled... 从源代码安装。这些都没有解释如何在 Docker 中执行此操作。所以我认为我正在寻找的是您需要添加到没有这些选项安装的现有 docker 映像中的内容,以便您可以获得启用 CPU 选项的 tensorflow 编译版本。现有的 docker 镜像不这样做,因为他们希望镜像在尽可能多的机器上运行。我在 Linux PC 上使用 Ubuntu 14.04。我是 docker 新手,但已经安装了 tensorflow,并且在使用 docker 映像时不会收到 CPU 警告。我可能不需要这个来提高速度,但我看到一些帖子声称加速可能很重要。我搜索了执行此操作的现有 docker 图像,但找不到任何东西。我需要它才能与 gpu 一起使用,因此需要与 nvidia-docker 兼容。

我刚刚找到了这个docker support for bazel,它可能会提供答案,但是我对它的理解还不够好,无法确定。我相信这是说您不能在 Dockerfile 中使用 bazel 构建 tensorflow。您必须使用 bazel 构建 Dockerfile。我的理解是否正确,这是从源代码编译的 tensorflow 获取 docker 映像的唯一方法吗?如果是这样,我仍然可以使用帮助来了解如何做到这一点,并且仍然可以获得其他依赖项,如果将现有的 docker 映像用于 tensorflow。

【问题讨论】:

devel Dockerfile 包含一个 bazel 构建步骤。 谢谢。我看是可以的。这很有帮助。看起来 gpu 版本在这里:devel-gpu。我需要更改第一行以在 Ubuntu 14.04 上运行吗? FROM 使用FROM nvidia/cuda:8.0-cudnn5-devel-ubuntu16.04 @ZakKeirn 你能创建那个 dockerfile 吗?我正在寻找完全相同的。 对不起,没有。忙于其他事情,但仍然对它感兴趣。如果您取得进展,请在此处发布。 @Matt 您的评论回答了我的问题。你能把它写成答案吗? 【参考方案1】:

可以在here找到使用 CPU 支持构建的 Dockerfile。

希望对您有所帮助!在 Stack Overflow 和 Github 问题和其他东西上花了很多个深夜。现在轮到我回馈了! :)

尤其是 GPU 的东西真的很麻烦 - 尤其是在启用 XLA/JIT/AOT 的东西以及图形转换工具时。

我的 Dockerfile 中嵌入了很多 hack。随时查看并向我提问!

【讨论】:

谢谢。 @matt 的第一反应似乎将我引向了我想去的地方。我希望只稍微修改来自 tensorflow 站点的现有维护的 dockerfile。您是否发现只需将编译标志添加到 devel-gpu 有任何问题?【参考方案2】:

contributing guidelines 提到使用 Docker 从源代码构建 TensorFlow 以运行单元测试:

请参阅 CPU-only developer Dockerfile 和 GPU developer Dockerfile 对于所需的软件包。或者,使用上述 Docker images,例如, tensorflow/tensorflow:nightly-develtensorflow/tensorflow:nightly-devel-gpu 用于开发以避免将软件包直接安装在您的系统上。

【讨论】:

以上是关于使用 Docker 从源代码编译 TensorFlow 以提高 CPU 速度的主要内容,如果未能解决你的问题,请参考以下文章

在 docker 的不同内核中编译代码会受到啥影响?

使用 python 3 和 numpy、scipy、pillow 和 matplotlib 在 Raspberry Pi 3B+ 上构建 docker 映像失败

[Docker][ansible-playbook]3 持续集成环境初探

使用指南用Docker编译和测试PaddlePaddle

Docker最全教程——从理论到实战(十七)

tensorflow:使用docker进行源代码编译tensorflow,镜像里面的环境都配置好了,只要执行编译,设置好内存,cpu参数就行了。