web-dev-qa-db-ja.com

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)

いくつかの調査の後、自分のプロセッサ(Intel Celeron N2840(Bay Trail-Mアーキテクチャ))はAVX命令をサポートしていないことを発見しました。 Cogは、MMXとさまざまなSSEを使用できると言っています(それは何を意味するにせよ)。

追伸これは Linux上でAVX命令を使用しているときに同じマシン上のWindows上で作業中にTensorFlowエラー の複製のようなものですが、完全ではありません。加えて、私は50の評判を持っていないのでコメントできません。

P.P.S. SSE4.2とAVX命令でTensorflowをコンパイルする方法? を見て、怖くなった

22

peter-cordes で推奨されるベストプラクティスアプローチは、次を発行することで、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)

古いCPUで使用可能なCPUのインストールの概要は、Ubuntu 16.04 LTSの Mikael Fernandez Simalango で提供されています。 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 docsにもある引用符「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
Chris

Anaconda を試してください。古いCPU用のTensorFlowディストリビューションが必要です。 TensorFlowのコンパイル 難しい

0
foo bar