在 Ubuntu 上运行 tensorflow 时出现 AVX 错误 [重复]

青葱年少 tensorflow 720

原文标题AVX error while running tensorflow on Ubuntu [duplicate]

我正在尝试在我的 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。This is sort of a duplicate ofTensorFlow error using AVX instructions on Linux while working on Windows on the same machinebut not entirely。Plus I can’t comment because I don’t have 50 reputation.

P.P.S。I looked atHow to compile Tensorflow with SSE4.2 and AVX instructions?and got scared

原文链接:https://stackoverflow.com//questions/71461529/avx-error-while-running-tensorflow-on-ubuntu

回复

我来回复
  • Chris的头像
    Chris 评论

    通过发出以下命令,peter-cordesis 建议了一种最佳实践方法,以查看 gcc 将对您的“您的 cpu 具有哪些功能”产生什么影响:

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

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

    这什么时候出现?当程序提供为您的 cpu 定制自己时。当。我对我的 CPU 了解多少。好吧,上面的行会告诉你所有你需要知道的。

    也就是说,一般来说,推广基于 cpu 的功能的人/开发人员会陈述或建议一个列表,如果你的 cpu 有 * 的话会更快/更好/更强。上面会给你 *。仔细阅读你看到的内容。如果你没有它,你不想要它,即

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

    Mikael Fernandez Simalangofor Ubuntu 16.04 LTS 提供了在旧 cpu 上安装 CPU 能力的一个很好的概述。它假设一个 python2.7 环境,但很容易转换为 python3。问题的核心是提取哪些 cpu 指令扩展可用除了 -march=native 通过 /proc/cpuinfo 之外,您的特定 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 很重要,而 Nephanthvery 非常有用地解决了这个问题:

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

    生产

    -march=                             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 支持(或不)哪些指令,并明确说明这些指令。

    2年前 0条评论
  • FooBar167的头像
    FooBar167 评论

    试试水蟒。它应该具有适用于旧 CPU 的 TensorFlow 分发版。 TensorFlow 的编译很困难。

    2年前 0条评论
  • BrigaDella的头像
    BrigaDella 评论

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

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

    2年前 0条评论