是否有没有为AVX指令编译的TensorFlow版本?

时间:2018-12-11 11:28:43

标签: python tensorflow avx

我正在尝试在我的Chromebook上安装TensorFlow,我知道这不是最好的地方,但我只是想对此有所了解。我在Python开发环境中或在任何开发环境中都没有做很多工作,所以请多多包涵。 弄清楚pip之后,我安装了TensorFlow并尝试导入它,收到此错误:

Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
2018-12-11 06:09:54.960546: F tensorflow/core/platform/cpu_feature_guard.cc:37] The TensorFlow library was compiled to use AVX instructions, but these aren't available on your machine.
Aborted (core dumped)

经过一番研究,我发现我的处理器(Intel Celeron N2840(Bay Trail-M架构))不支持AVX指令,因此我想知道是否有办法使用针对其他指令编译的版本组。 Cog告诉我可以使用MMX和各种SSE(无论什么意思)。

P.S。这是TensorFlow error using AVX instructions on Linux while working on Windows on the same machine的重复,但不是全部。另外,我没有评论,因为我没有50个声誉。

P.P.S。我看着How to compile Tensorflow with SSE4.2 and AVX instructions?并感到害怕

3 个答案:

答案 0 :(得分:2)

peter-cordes建议的最佳实践方法是通过发出以下命令来查看gcc将如何使您的“ cpu具有什么功能”:

gcc -O3 -fverbose-asm -march=native -xc /dev/null -S -o- | less

此命令将从gcc的视图(将由谁来进行构建)中提供有关您cpu功能的信息(全部),因此gcc的视图很重要。

什么时候出现?当某个程序根据您的cpu量身定制时。 ang我对我的CPU有什么了解。好吧,以上一行会告诉您所有您需要了解的内容。

也就是说,通常,正在推广基于cpu的功能的人员/开发人员将陈述或建议一系列列表,如果您的cpu具有*,则这些列表将使速度更快/更好/更强。以上将为您提供*。仔细阅读您所看到的内容。如果您没有它,就不要它,即

-mno-avx(whatever you don't want;in my case it was avx)

以下版本提供了有关可在较旧的cpu上安装CPU的良好概述: Mikael Fernandez Simalango(适用于Ubuntu 16.04 LTS)。它假定使用python2.7环境,但可以轻松转换为python3。问题的核心是通过/ proc / cpuinfo提取除-march = native之外将在您的特定cpu上使用的cpu指令扩展,(但请注意,它似乎仅限于它接受的标志,因此可能是更好地阅读上面的说明并进行反思)

grep flags -m1 /proc/cpuinfo | cut -d ":" -f 2 | tr '[:upper:]' 
'[:lower:]' | { read FLAGS; OPT="-march=native"; for flag in $FLAGS; 
do case "$flag" in "sse4_1" | "sse4_2" | "ssse3" | "fma" | "cx16" | 
"popcnt" | "avx" | "avx2") OPT+=" -m$flag";; esac; done; 
MODOPT=${OPT//_/\.}; echo "$MODOPT"; }

在我的旧盒子输出中运行它:

-march=native -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt

它在那里出现了。目前尚不清楚如何说“不是这个”和“不是那个”,对于老CPU,这很可能是-mno-avx。

对于一个老式的CPU,-march很重要,Nephanth非常有用地解决了这个问题:

gcc -march=native -Q --help=target|grep march

产生

-march=                             westmere

这意味着我对./compile问题的回答应该是或可能是,并注意gcc文档中的引号“ westmere”,因此“”必须有原因

-march='westmere' -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt -mno-avx

但这可能更好(请参见下面的讨论):

-march=native -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt -mno-avx

-mno-avx是gcc的选项,许多小时后,结果会在

Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more 
information.
>>> import tensorflow as tf
>>> 
>>> tf.__version__
'2.0.0-alpha0'

看起来很成功。

已重定: 以任一顺序,找出您的CPU支持(或不支持)哪些指令,并明确说明这些指令。

答案 1 :(得分:0)

尝试Anaconda。对于旧的CPU,它应该具有TensorFlow发行版。 TensorFlow is difficult的编译。

答案 2 :(得分:0)

您可以在Github上找到预构建的车轮(支持Windows):https://github.com/fo40225/tensorflow-windows-wheel,也可以构建自己的车轮

我也遇到了同样的问题,但是我解决了。