只是提前说出来,我知道所有需要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(我的处理器支持两者)但是我无法在任何地方找到任何指令如何在虚拟环境中编译tensorflow,以便从头开始支持SSE和AVX。它甚至没有在common installation problems部分中列出。
顺便说一下。我使用的系统是Ubuntu 14.04而且我没有nvidia显卡(所以现在没有cuda),但是我计划将来买一个。
我有点失望的是,在编译之前,tensorflow没有检测到CPU功能。
编辑:不真实,后来我发现它实际上是
PS:我已经设置了两个虚拟环境,一个用于python 2.7,另一个用于python 3.0。理想情况下,我希望解决方案适用于两者,因为我还没有决定我最终会使用哪个python版本。
答案 0 :(得分: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的人也应该添加" - config = cuda"这个bazel构建命令。如果你有gcc> 5您还需要添加' - cxxopt =" -D_GLIBCXX_USE_CXX11_ABI = 0'。
' - config = mkl' part激活了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功能的警告。至少在我的情况下它起作用了。