首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有为AVX指令编译的TensorFlow版本?

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

Stack Overflow用户
提问于 2018-12-11 19:28:43
回答 3查看 18.4K关注 0票数 30

我正试着在我的Chromebook上安装TensorFlow,我知道这不是最好的地方,但我只是想感受一下它。我在Python开发环境或任何开发环境中都没有做过太多的工作,所以请耐心等待。在弄清楚pip之后,我安装了TensorFlow并尝试导入它,收到了这个错误:

代码语言:javascript
复制
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)

经过研究,我发现我的处理器(英特尔赛扬N2840 (Bay Trail-M架构))不支持AVX指令,所以我想知道是否有办法使用为其他指令集编译的版本。Cog告诉我我可以使用MMX和各种use (不管那意味着什么)。

附言:这在某种程度上是TensorFlow error using AVX instructions on Linux while working on Windows on the same machine的复制品,但不是完全的。另外,我不能评论,因为我没有50个名气。

另外,我看着How to compile Tensorflow with SSE4.2 and AVX instructions?,很害怕

EN

回答 3

Stack Overflow用户

发布于 2019-03-14 22:53:46

peter-cordes建议的一个最佳实践方法是,通过发出以下命令,看看gcc将如何利用你的“你的中央处理器拥有什么功能”:

代码语言:javascript
复制
gcc -O3 -fverbose-asm -march=native -xc /dev/null -S -o- | less

此命令将从将进行构建的gcc的角度提供有关您的cpu功能的(所有)信息,所以gcc的观点很重要。

这是什么时候出现的?当一个程序为你的cpu量身定做时。见鬼。我怎么知道我的cpu。好的,上面的这一行将告诉你所有你需要知道的。

这就是说,一般来说,推广基于cpu的功能的人/开发人员会陈述或建议一系列更快/更好/更强的事情,如果你的cpu有*。上面的代码将会给你*。仔细阅读你所看到的。如果你没有它,你就不想要它。

代码语言:javascript
复制
-mno-avx(whatever you don't want;in my case it was avx)

Ubuntu16.04LTS的Mikael Fernandez Simalango提供了在老的CPU上安装cpu的一个很好的概述。它假定环境为python2.7,但很容易转换为python3。问题的核心是通过/proc/cpuinfo提取哪些cpu指令扩展在您的特定cpu上可用,这些cpu指令扩展将在-march=native之外使用(但请注意,它似乎受限于它接受的标志,所以更好的方法是实际阅读上面的指令并反映出来)。

代码语言:javascript
复制
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"; }

在我的旧机器输出上运行以下代码:

代码语言:javascript
复制
-march=native -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt

它在一定程度上达到了这个目标。不清楚的是如何说“不是这个”和“不是那个”,对于旧的CPU来说,这很可能是-mno-avx。

对于旧的cpu,-march很重要,而Nephanth非常有用地解决了这个问题:

代码语言:javascript
复制
gcc -march=native -Q --help=target|grep march

产生

代码语言:javascript
复制
-march=                             westmere

这意味着我对./compile问题的回答应该是,或者可能是,并注意引号'westmere‘,它也在gcc文档中,所以’肯定是有原因的

代码语言:javascript
复制
-march='westmere' -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt -mno-avx

但这可能要好得多(参见下面的讨论):

代码语言:javascript
复制
-march=native -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt -mno-avx

-mno-avx是gcc的一个选项,几个小时后,结果是

代码语言:javascript
复制
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支持(或不支持)哪些指令,并明确说明这些指令。

票数 5
EN

Stack Overflow用户

发布于 2019-04-16 22:43:58

试试Anaconda。它应该有针对旧CPU的TensorFlow发行版。编译TensorFlow is difficult

票数 1
EN

Stack Overflow用户

发布于 2019-09-28 13:54:49

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

我也有同样的问题,但我把它解决了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53723217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档