Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SSE4.2和AVX指令编译Tensorflow?_Tensorflow_X86_Compiler Optimization_Simd_Compiler Options - Fatal编程技术网

如何使用SSE4.2和AVX指令编译Tensorflow?

如何使用SSE4.2和AVX指令编译Tensorflow?,tensorflow,x86,compiler-optimization,simd,compiler-options,Tensorflow,X86,Compiler Optimization,Simd,Compiler Options,这是运行脚本检查Tensorflow是否工作时收到的消息: I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally I tensorflo

这是运行脚本检查Tensorflow是否工作时收到的消息:

I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally
W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:910] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
我注意到它提到了SSE4.2和AVX

  • 什么是SSE4.2和AVX
  • 这些SSE4.2和AVX如何改进Tensorflow任务的CPU计算
  • 如何使用这两个库编译Tensorflow
  • 这些是

    对于许多任务,使用矢量指令更快;机器学习就是这样一项任务

    引述:

    为了与尽可能广泛的机器兼容,TensorFlow默认只在x86机器上使用SSE4.1 SIMD指令。大多数现代PC和Mac都支持更高级的指令,因此,如果您正在构建一个只能在您自己的机器上运行的二进制文件,您可以在bazel build命令中使用
    --copt=-march=native
    来启用这些指令

    这些是

    对于许多任务,使用矢量指令更快;机器学习就是这样一项任务

    引述:

    为了与尽可能广泛的机器兼容,TensorFlow默认只在x86机器上使用SSE4.1 SIMD指令。大多数现代PC和Mac都支持更高级的指令,因此,如果您正在构建一个只能在您自己的机器上运行的二进制文件,您可以在bazel build命令中使用
    --copt=-march=native
    来启用这些指令


    我遇到了同样的问题,看起来Yaroslav Bulatov的建议不包括SSE4.2支持,添加
    --copt=-msse4.2
    就足够了。最后,我成功地用

    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
    
    没有得到任何警告或错误

    任何系统的最佳选择可能是:

    bazel build -c opt --copt=-march=native --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package
    
    更新:,可能是因为它包含一个
    =

    -mfpmath=both
    仅适用于gcc,不适用于clang
    -mfpmath=sse
    即使不是更好,也可能同样好,并且是x86-64的默认值。32位构建默认值为
    -mfpmath=387
    ,因此更改该值将有助于32位。(但如果您想要高性能的数字处理,您应该构建64位二进制文件。)

    我不确定TensorFlow对
    -O2
    -O3
    的默认设置是什么
    gcc-O3
    支持包括自动矢量化在内的全面优化,但这有时会降低代码的速度


    此操作:将一个选项直接传递给GCC,用于编译C和C++文件(但不链接,因此需要跨文件链接时间优化的不同选项)

    x86-64 gcc默认仅使用SSE2或更旧的SIMD指令,因此您可以在任何x86-64系统上运行二进制文件。(见附件)。那不是你想要的。您希望生成一个二进制文件,它可以利用CPU可以运行的所有指令,因为您只在构建该二进制文件的系统上运行该二进制文件

    -march=native
    启用CPU支持的所有选项,因此它使
    -mavx512f-mavx2-mavx-mfma-msse4.2
    冗余。(另外,
    -mavx2
    已经启用了
    -mavx
    -msse4.2
    ,因此雅罗斯拉夫的命令应该是正确的)。此外,如果您使用的CPU不支持这些选项之一(如FMA),则使用
    -mfma
    将生成二进制文件,该二进制文件会出现非法指令故障

    ,因此使用它应该避免需要手动指定编译器选项

    -march=native
    启用了
    -mtune=native
    ,因此对于诸如哪种AVX指令序列最适合于未对齐的负载之类的问题


    这一切都适用于gcc、clang或ICC。(对于ICC,您可以使用
    -xHOST
    而不是
    -march=native

    我刚刚遇到了同样的问题,Yaroslav Bulatov的建议似乎不包括SSE4.2支持,添加
    --copt=-msse4.2
    就足够了。最后,我成功地用

    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
    
    没有得到任何警告或错误

    任何系统的最佳选择可能是:

    bazel build -c opt --copt=-march=native --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package
    
    更新:,可能是因为它包含一个
    =

    -mfpmath=both
    仅适用于gcc,不适用于clang
    -mfpmath=sse
    即使不是更好,也可能同样好,并且是x86-64的默认值。32位构建默认值为
    -mfpmath=387
    ,因此更改该值将有助于32位。(但如果您想要高性能的数字处理,您应该构建64位二进制文件。)

    我不确定TensorFlow对
    -O2
    -O3
    的默认设置是什么
    gcc-O3
    支持包括自动矢量化在内的全面优化,但这有时会降低代码的速度


    此操作:将一个选项直接传递给GCC,用于编译C和C++文件(但不链接,因此需要跨文件链接时间优化的不同选项)

    x86-64 gcc默认仅使用SSE2或更旧的SIMD指令,因此您可以在任何x86-64系统上运行二进制文件。(见附件)。那不是你想要的。您希望生成一个二进制文件,它可以利用CPU可以运行的所有指令,因为您只在构建该二进制文件的系统上运行该二进制文件

    -march=native
    启用CPU支持的所有选项,因此它使
    -mavx512f-mavx2-mavx-mfma-msse4.2
    冗余。(另外,
    -mavx2
    已经启用了
    -mavx
    -msse4.2
    ,因此雅罗斯拉夫的命令应该是正确的)。此外,如果您使用的CPU不支持这些选项之一(如FMA),则使用
    -mfma
    将生成二进制文件,该二进制文件会出现非法指令故障

    ,因此使用它应该避免需要手动指定编译器选项

    -march=native
    启用了
    -mtune=native
    ,因此对于诸如哪种AVX指令序列最适合于未对齐的负载之类的问题


    这一切都适用于gcc、clang或ICC。(对于ICC,您可以使用
    -xHOST
    而不是
    -march=native

    让我回答您的第三个问题
    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
    import tensorflow as tf
    
    Using python library path: /usr/local/lib/python2.7/dist-packages
    Do you wish to build TensorFlow with MKL support? [y/N] y
    MKL support will be enabled for TensorFlow
    Do you wish to download MKL LIB from the web? [Y/n] Y
    Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: 
    Do you wish to use jemalloc as the malloc implementation? [Y/n] n
    jemalloc disabled
    Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] N
    No Google Cloud Platform support will be enabled for TensorFlow
    Do you wish to build TensorFlow with Hadoop File System support? [y/N] N
    No Hadoop File System support will be enabled for TensorFlow
    Do you wish to build TensorFlow with the XLA just-in-time compiler (experimental)? [y/N] N
    No XLA JIT support will be enabled for TensorFlow
    Do you wish to build TensorFlow with VERBS support? [y/N] N
    No VERBS support will be enabled for TensorFlow
    Do you wish to build TensorFlow with OpenCL support? [y/N] N
    No OpenCL support will be enabled for TensorFlow
    Do you wish to build TensorFlow with CUDA support? [y/N] N
    No CUDA support will be enabled for TensorFlow
    
    -mavx -mavx2 -mfma -msse4.2
    
    git clone https://github.com/tensorflow/tensorflow.git
    cd tensorflow
    
    #The repo defaults to the master development branch. You can also checkout a release branch to build:
    git checkout r2.0
    
    #Configure the Build => Use the Below line for Windows Machine
    python ./configure.py 
    
    #Configure the Build => Use the Below line for Linux/MacOS Machine
    ./configure
    #This script prompts you for the location of TensorFlow dependencies and asks for additional build configuration options. 
    
    #Build Tensorflow package
    
    #CPU support
    bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package 
    
    #GPU support
    bazel build --config=opt --config=cuda --define=no_tensorflow_py_deps=true //tensorflow/tools/pip_package:build_pip_package