app*_*obe 22 python avx tensorflow
我试图在我的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)
Run Code Online (Sandbox Code Playgroud)
经过一些研究,我发现我的处理器(Intel Celeron N2840(Bay Trail-M架构))不支持AVX指令,所以我想知道是否有办法使用为其他指令集编译的版本.Cog告诉我,我可以使用MMX和各种SSE(无论这意味着什么).
PS这是在Linux上使用AVX指令时TensorFlow错误的重复,而在同一台机器上运行Windows但不完全.另外我不能发表评论,因为我没有50个声望.
PPS我看了如何使用SSE4.2和AVX指令编译Tensorflow?并且害怕
peter-cordes建议的最佳实践方法是通过发出以下命令来查看 gcc 将对您的“您的 cpu 具有哪些功能”产生什么影响:
gcc -O3 -fverbose-asm -march=native -xc /dev/null -S -o- | less
Run Code Online (Sandbox Code Playgroud)
此命令将从 gcc 的角度提供有关您的 cpu 能力的信息(全部),gcc 将进行构建,因此 gcc 的视图很重要。
这什么时候出现?当程序提供根据您的 CPU 进行定制时。党。我对我的 CPU 了解多少。好吧,上面的行会告诉你所有你需要知道的。
也就是说,通常,如果您的 cpu 具有 *. 以上将为您提供 *. 仔细阅读你所看到的。如果你没有它,你不想要它,即
-mno-avx(whatever you don't want;in my case it was avx)
Run Code Online (Sandbox Code Playgroud)
Mikael Fernandez Simalango为 Ubuntu 16.04 LTS提供了关于在旧 CPU 上安装 CPU 能力的良好概述 。它假设一个 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"; }
Run Code Online (Sandbox Code Playgroud)
在我的旧盒子输出上运行这个:
-march=native -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt
Run Code Online (Sandbox Code Playgroud)
它在那里得到了一部分。不清楚的是如何说“不是这个”和“不是那个”,对于旧 CPU,最有可能是 -mno-avx。
对于旧的 CPU, -march很重要,而Nephanth非常有用地解决了这个问题:
gcc -march=native -Q --help=target|grep march
Run Code Online (Sandbox Code Playgroud)
产生
-march= westmere
Run Code Online (Sandbox Code Playgroud)
这意味着我对 ./compile 问题的回答应该是或可能是,并注意引号 'westmere' 也在 gcc 文档中,所以 ' ' 必须存在是有原因的
-march='westmere' -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt -mno-avx
Run Code Online (Sandbox Code Playgroud)
但这可能要好得多(见下面的讨论):
-march=native -mssse3 -mcx16 -msse4.1 -msse4.2 -mpopcnt -mno-avx
Run Code Online (Sandbox Code Playgroud)
-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'
Run Code Online (Sandbox Code Playgroud)
看起来很成功。
重述:按任一顺序,找出您的 CPU 支持(或不支持)哪些指令,并明确说明这些指令。