web-dev-qa-db-fra.com

Existe-t-il une version de TensorFlow non compilée pour les instructions AVX?

J'essaie de mettre TensorFlow sur mon Chromebook. Ce n'est pas le meilleur endroit, je sais, mais je veux juste avoir une idée de ce qu'il en est. Je n'ai pas beaucoup travaillé dans l'environnement de développement Python, ni dans aucun autre environnement de développement, alors supportez-moi. Après avoir découvert pip, j'ai installé TensorFlow et essayé de l'importer, recevoir cette erreur:

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)

Après quelques recherches, j'ai découvert que mon processeur (un Intel Celeron N2840 (architecture Bay Trail-M)) ne prend pas en charge les instructions AVX. Je me demandais donc s'il existait un moyen d'utiliser une version compilée pour un autre jeu d'instructions. Cog me dit que je peux utiliser MMX et divers SSE (quoi que ça puisse dire).

P.S. Ceci est en quelque sorte une copie de erreur TensorFlow utilisant les instructions AVX sous Linux tout en travaillant sous Windows sur le même ordinateur mais pas entièrement. De plus, je ne peux pas commenter car je n’ai pas 50 ans de réputation.

P.P.S. J'ai regardé Comment compiler Tensorflow avec les instructions SSE4.2 et AVX? et j'ai eu peur

22
applesarefum-bobe

Une approche de meilleures pratiques suggérée par peter-cordes est de voir ce que gcc va faire de votre "quelles capacités votre processeur a-t-il" en publiant ce qui suit:

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

Cette commande fournira des informations (toutes) sur vos capacités de processeur, du point de vue de gcc, du responsable de la compilation, de sorte que la vue de gcc compte.

Quand cela arrive-t-il? Quand un programme propose de s’adapter à votre processeur. Dang. Que sais-je de mon cpu? Eh bien, la ligne ci-dessus vous dira tout ce que vous devez savoir.

Cela dit, en règle générale, les personnes/développeurs qui font la promotion des capacités basées sur un processeur vont énoncer ou suggérer une liste de choses qui vont plus vite/mieux/plus fort si votre processeur a *. Et ce qui précède vous donnera *. Lisez attentivement ce que vous voyez. Si vous ne l'avez pas, vous ne le voulez pas, c'est-à-dire.

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

Mikael Fernandez Simalango pour Ubuntu 16.04 LTS fournit un bon aperçu de l’installation du processeur compatible sur les processeurs plus anciens. Il suppose un environnement python2.7 mais se traduit facilement en python3. Le cœur du problème consiste à extraire les extensions d’instructions cpu disponibles sur votre cpu, qui seront utilisées en plus de -march = native via/proc/cpuinfo, mieux lire les instructions ci-dessus et réfléchir)

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"; }

En cours d'exécution sur mon ancienne sortie de boîte:

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

Cela fait partie du chemin. Ce qui n'est pas clair, c'est comment dire, "pas ceci" et "pas cela", ce qui serait probablement, pour les anciens processeurs, -mno-avx.

Pour un ancien processeur, ce qui est important et Nephanth répond très utilement à ceci:

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

produit

-march=                             westmere

ce qui signifie que ma réponse à la question ./compile devrait être ou pourrait être, et notez les guillemets 'westmere' qui figurent également dans la documentation gcc, de sorte que le '' doit exister pour une raison

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

mais c'est probablement beaucoup mieux (voir discussion ci-dessous):

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

-Mno-avx est une option pour gcc et aboutit, après de nombreuses heures, à

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'

qui ressemble à du succès.

Repris: Dans l’un ou l’autre des ordres, déterminez quelles instructions sont (ou non) prises en charge par votre processeur, et énoncez-les explicitement.

2
Chris

Essayez Anaconda . Il devrait avoir une distribution TensorFlow pour les anciens processeurs. Compilation de TensorFlow est difficile .

0
foo bar