只是提前说出来,我知道所有需要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 回答
好的,事实证明我的问题几乎与我选择的虚拟环境无关 . bazel构建失败只是因为我在错误的目录中 . 我需要从git中拉出tensorflow然后cd进入它 . 然后我可以使用默认构建选项-march = native来构建,它已经检测到了我的CPU功能 .
预先为两个不同的python版本设置两个不同的虚拟环境很有用 . 我使用这些环境直接在它们内部编译 . 这导致自动python版本检测 . 因此在2.7环境中构建将导致python 2.7等的构建 .
更详细一点:
首先我installed bazel . 然后我安装了tensorflow页面上提到的依赖项,如下所示:
为了在以后的构建中使用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:
如果我在这一点上没记错的话,那么我用我想要编译的python版本激活了我的虚拟环境,因此./configure会识别所需的python版本 .
然后我从git中拉出tensorflow并配置它:
在配置例程中,我只对jemalloc和OpenCL回答是,因为我现在没有CUDA卡 . 当对OpenCL说“是”时,我被提示输入ComputeCpp路径,该路径位于我在/ usr / local / computecpp下创建的位置
然后,当我停留在tensorflow目录中时,我做了
在./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创建了最终包:
根据环境中的python版本,您将看到反映它的文件名:
现在我可以转到适当的环境并使用pip安装它 . 如果您使用conda,tensorflow网站仍建议使用“pip install”而不是“conda install” . 所以如果我在python 2.7的虚拟环境中(无论是否conda)我会输入:
如果我在python 3.6下,我会输入:
我需要跳过一个最后一个箍:如果你留在tensorflow目录(你从git中提取)然后启动python,你将无法导入tensorflow . 我认为这是一种错误 . 因此在启动python之前逃离tensorflow目录很重要 .
现在,您可以在虚拟环境中启动python并导入tensorflow . 希望没有进一步的错误或任何有关不使用处理器的SSE或AVX功能的警告 . 至少在我的情况下它起作用了 .