【问题标题】:TensorFlow GPU compile flags?TensorFlow GPU编译标志?
【发布时间】:2019-03-29 09:28:03
【问题描述】:

我正在寻找有关在 Ubuntu 18.04 上使用 TensorFlow 和 NVIDIA GPU 时编译标志选项的一些说明。我将 TensorFlow 用于 Python(用于训练)和从 C++ 调用(用于在生产中执行)。

由于 Ubuntu 18.04 附带 GCC 7.x,我必须使用 CUDA 9.2,所以我不能使用 Google 提供的 TensorFlow 预编译二进制文件(目前仅适用于不兼容 GCC 7.x 的 CUDA 9.0 )。因此,我必须从源代码编译 TensorFlow 才能同时使用 Python 和 C++

目前我正在使用以下编译标志:

Python 编译:

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

C++ 编译:

bazel build -c opt \
            --copt=-mavx \
            --copt=-mavx2 \
            --copt=-mfma \
            --copt=-mfpmath=both \
            --copt=-msse4.2 \
            --config=cuda //tensorflow:libtensorflow_cc.so

这主要基于互联网上的大众投票,这让我感到不舒服。以下是一些导致我做出这些选择的网站/帖子:

https://www.tensorflow.org/install/source 有:

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

http://www.bitbionic.com/2017/08/18/run-your-keras-models-in-c-tensorflow/ 有:

bazel build --jobs=6 \
            --verbose_failures \
            -c opt \
            --copt=-mavx \
            --copt=-mfpmath=both \
            --copt=-msse4.2 //tensorflow:libtensorflow_cc.so

How to compile Tensorflow with SSE4.2 and AVX instructions? 有:

bazel build -c opt \
            --copt=-mavx \
            --copt=-mavx2 \
            --copt=-mfma \
            --copt=-mfpmath=both \
            --config=cuda -k //tensorflow/tools/pip_package:build_pip_package

Re-build Tensorflow with desired optimization flags 有:

bazel build -c opt \
            --copt=-mavx \
            --copt=-mavx2 \
            --copt=-mfma \
            --copt=-mfpmath=both \
            --copt=-msse4.2 \
            --config=cuda -k //tensorflow/tools/pip_package:build_pip_package

有人能告诉我们这些标志选项吗?具体我有以下问题:

1) mavxmavx2mfmamfpmath 标志是什么?这些应该用于 Python 和 C++ 编译还是仅用于 C++ 编译? Google 演练没有将这些用于 Python 编译的事实使我倾向于相同。

2) 显然--copt=-msse4.2 是为 Intel CPU 启用 SSE 优化,--config=cuda 是为 CUDA GPU 启用,但 CUDA 标志末尾的 -k 选项是什么?请注意,上面的一些示例使用了-k 选项,而有些则没有。

3) 是否有记录这些选项的地方?我想知道是否还有其他可能有益的标志,或者是否应该省略上述某些标志。我检查了 TensorFlow 和 Bazel GitHub,没有找到关于这个主题的任何内容。

【问题讨论】:

    标签: tensorflow gpu nvidia


    【解决方案1】:

    1) bazel 将标志传递给 gcc。有关确切含义,请参阅 GCC 文档。例如,对于 fpmath,请参见 https://gcc.gnu.org/onlinedocs/gcc-4.4.7/gcc/i386-and-x86_002d64-Options.html 之类的内容。当您知道将运行二进制文件的 CPU 支持这些选项时,您应该使用它们。到处使用它们应该不会有什么坏处。

    2) -k 是此处记录的 bazel 标志:https://docs.bazel.build/versions/master/user-manual.html#flag--keep_going

    3) 是的,见上文。

    【讨论】:

      【解决方案2】:

      从 gcc 文档看来,-march=native 的 tensorflow 默认值似乎是利用处理器所有功能所必需的。这可能比手动设置这些优化标志更好,因为您可能会遗漏一些。

      【讨论】:

        猜你喜欢
        • 2022-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-12
        相关资源
        最近更新 更多