首页 文章

内部virtualenv:如何获得tensorflow来支持sse 4.2和avx

提问于
浏览
0

只是提前说出来,我知道所有需要bazel的答案,但它们对我不起作用 . 我正在使用virtualenv作为tensorflow网站的建议 .

(tensorflow27)name@computersname:~$ bazel build --linkopt='-lrt' -c opt --copt=-mavx --copt=-msse4.2 --copt=-msse4.1 --copt=-msse3-k //tensorflow/tools/pip_package:build_pip_package

将输出

ERROR: The 'build' command is only supported from within a workspace.

基本上我遵循here的所有步骤但是当我运行this验证时,我得到了

2017-09-02 11:46:52.613368:W tensorflow / core / platform / cpu_feature_guard.cc:45] TensorFlow库未编译为使用SSE4.1指令,但这些指令可在您的计算机上使用并且可以加速CPU计算 . 2017-09-02 11:46:52.613396:W tensorflow / core / platform / cpu_feature_guard.cc:45] TensorFlow库未编译为使用SSE4.2指令,但这些指令可在您的计算机上使用并可加速CPU计算 . 2017-09-02 11:46:52.613416:W tensorflow / core / platform / cpu_feature_guard.cc:45] TensorFlow库未编译为使用AVX指令,但这些指令可在您的计算机上使用,并可加速CPU计算 .

我不想压抑警告,我实际上想要使用SSE 4.2和AVX(我的处理器支持两者)但是我还没有't able to find any instructions anywhere how to compile tensorflow inside a virutal environment such that the support for SSE and AVX is enabled from scratch. It'甚至没有列在他们的common installation problems部分 .

顺便说一句 . 我使用的系统是Ubuntu 14.04,我没有nvidia显卡(所以现在没有cuda),但我打算在将来获得一个 .

我有点失望,在编译之前,tensorflow没有检测到CPU能力 .

编辑:不真实,后来我发现它确实如此

PS:我已经设置了两个虚拟环境,一个用于python 2.7,另一个用于python 3.0 . 理想情况下,我希望解决方案适用于两者,因为我还没有决定我最终将使用哪个python版本 .

1 回答

  • 2

    好的,事实证明我的问题几乎与我选择的虚拟环境无关 . bazel构建失败只是因为我在错误的目录中 . 我需要从git中拉出tensorflow然后cd进入它 . 然后我可以使用默认构建选项-march = native来构建,它已经检测到了我的CPU功能 .

    预先为两个不同的python版本设置两个不同的虚拟环境很有用 . 我使用这些环境直接在它们内部编译 . 这导致自动python版本检测 . 因此在2.7环境中构建将导致python 2.7等的构建 .

    更详细一点:

    首先我installed bazel . 然后我安装了tensorflow页面上提到的依赖项,如下所示:

    sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel  
    sudo apt-get install python-numpy python-dev python-pip python-wheel
    

    为了在以后的构建中使用OpenCL,我必须下载(并且如果我没记错的话可以编译)ComputeCpp-CE-0.3.1-Ubuntu.14.04-64bit.tar.gz(对于ubuntu 16,它将是ComputeCpp-CE- 0.3.1-Ubuntu.16.04-64bit.tar.gz) . 编译后,我不得不将构建结果移动到/ usr / local / computecpp:

    sudo mkdir /usr/local/computecpp
    sudo cp -r ./Downloads/ComputeCpp*/* /usr/local/computecpp
    

    如果我在这一点上没记错的话,那么我用我想要编译的python版本激活了我的虚拟环境,因此./configure会识别所需的python版本 .

    然后我从git中拉出tensorflow并配置它:

    git clone https://github.com/tensorflow/tensorflow 
    cd tensorflow
    ./configure
    

    在配置例程中,我只对jemalloc和OpenCL回答是,因为我现在没有CUDA卡 . 当对OpenCL说“是”时,我被提示输入ComputeCpp路径,该路径位于我在/ usr / local / computecpp下创建的位置

    然后,当我停留在tensorflow目录中时,我做了

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

    在./configure期间激活cuda的人也应该在这个bazel build命令中添加“--config = cuda” . 如果你有gcc> 5,你还需要添加'--cxxopt =“ - D_GLIBCXX_USE_CXX11_ABI = 0' .

    ' - config = mkl'部分激活了intel提供的一些额外的库,专门用于加速其处理器上的一些计算,因此tensorflow可以利用它们 . 如果您没有英特尔处理器,删除该选项可能是明智之举 .

    顺便说一下,起初我还手工编写了mkl,但事实证明这并不是必要的 . 如果缺少bazel构建将自动从在线源获取mkl .

    然后我在/ tmp / tensorflow_pkg创建了最终包:

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

    根据环境中的python版本,您将看到反映它的文件名:

    /tmp/tensorflow_pkg/tensorflow-1.3.0-cp27-cp27mu-linux_x86_64.whl
    /tmp/tensorflow_pkg/tensorflow-1.3.0-cp36-cp36m-linux_x86_64.whl
    

    现在我可以转到适当的环境并使用pip安装它 . 如果您使用conda,tensorflow网站仍建议使用“pip install”而不是“conda install” . 所以如果我在python 2.7的虚拟环境中(无论是否conda)我会输入:

    pip install --ignore-installed --upgrade /tmp/tensorflow_pkg/tensorflow-1.3.0-cp27-cp27mu-linux_x86_64.whl
    

    如果我在python 3.6下,我会输入:

    pip install --ignore-installed --upgrade /tmp/tensorflow_pkg/tensorflow-1.3.0-cp36-cp36m-linux_x86_64.whl
    

    我需要跳过一个最后一个箍:如果你留在tensorflow目录(你从git中提取)然后启动python,你将无法导入tensorflow . 我认为这是一种错误 . 因此在启动python之前逃离tensorflow目录很重要 .

    cd ..
    

    现在,您可以在虚拟环境中启动python并导入tensorflow . 希望没有进一步的错误或任何有关不使用处理器的SSE或AVX功能的警告 . 至少在我的情况下它起作用了 .

相关问题