web-dev-qa-db-fra.com

Votre CPU supporte les instructions que ce binaire TensorFlow n'a pas été compilé pour être utilisé: AVX AVX2

Je suis nouveau sur TensorFlow. Je l'ai récemment installé (version du processeur Windows) et j'ai reçu le message suivant:

Tensorflow-1.4.0 tensorflow-tensorboard-0.4.0rc2 installé avec succès

Puis quand j'ai essayé de courir

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
sess.run(hello)
'Hello, TensorFlow!'
a = tf.constant(10)
b = tf.constant(32)
sess.run(a + b)
42
sess.close()

(que j'ai trouvé par https://github.com/tensorflow/tensorflow )

J'ai reçu le message suivant:

2017-11-02 01: 56: 21.698935: IC:\tf_jenkins\home\espace de travail\rel-win\M\fenêtres\PY\36\tensorflow\core\platform\cpu_feature_guard.cc: 137] Votre CPU supporte les instructions que cela Le fichier binaire TensorFlow n’a pas été compilé pour être utilisé: AVX AVX2

Mais quand j'ai couru

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

il a fonctionné comme il se doit et a sorti Hello, TensorFlow!, ce qui indique que l'installation a bien abouti, mais qu'il y a autre chose qui ne va pas.

Savez-vous quel est le problème et comment le résoudre? Merci.

533
csg

De quoi parle cet avertissement?

Les processeurs modernes fournissent un grand nombre d’instructions de bas niveau, en plus de l’arithmétique et de la logique habituelles, appelées extensions, par exemple. SSE2, SSE4, AVX, etc. À partir de la Wikipedia :

Les extensions vectorielles avancées (AVX) sont des extensions de l'instruction x86. Définir l'architecture des microprocesseurs d'Intel et d'AMD proposée par Intel en mars 2008 et prise en charge pour la première fois par Intel avec le processeur Sandy Bridge expédié au premier trimestre 2011 et ultérieurement par AMD avec le processeur Bulldozer expédiée au troisième trimestre 2011. AVX fournit de nouvelles fonctionnalités, de nouvelles instructions et un nouveau schéma de codage.

En particulier, AVX introduit les opérations FMA (multiplie-accumuler-fusionnées) (FMA), qui accélèrent le calcul algébrique linéaire, à savoir produit-produit, multiplication de matrice, convolution, etc. de ces opérations, sera donc plus rapide sur un processeur prenant en charge AVX et FMA (jusqu’à 300%). L'avertissement indique que votre processeur prend en charge AVX (hourra!).

Je tiens à souligner ici: il s’agit uniquement de CPU .

Pourquoi n'est-il pas utilisé alors?

La distribution par défaut de tensorflow étant construite sans extensions de processeur , telle que SSE4.1, SSE4.2, AVX, AVX2, FMA, etc. Les versions par défaut (celles de pip install tensorflow) sont destinées à être compatible avec autant de processeurs que possible. Un autre argument est que même avec ces extensions, le processeur est beaucoup plus lent que le GPU et on s'attend à ce que la formation en apprentissage machine à moyenne et grande échelle soit effectuée sur un GPU.

Que devrais tu faire?

Si vous avez un GPU , ne vous souciez pas de la prise en charge d'AVX, car les opérations les plus chères seront distribuées sur un périphérique GPU (à moins que explicitement défini ) Dans ce cas, vous pouvez simplement ignorer cet avertissement en

# Just disables the warning, doesn't enable AVX/FMA
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

... ou en réglant export TF_CPP_MIN_LOG_LEVEL=2 si vous êtes sous Unix. Tensorflow fonctionne bien de toute façon, mais vous ne verrez pas ces avertissements gênants.


Si vous n'avez pas de processeur graphique et souhaitez utiliser le plus possible le processeur, , vous devez créer tensorflow à partir de la source optimisée pour votre CPU avec AVX, AVX2 et FMA activé si votre CPU les prend en charge. Cela a été discuté dans cette question et aussi ce problème de GitHub . Tensorflow utilise un système de construction ad-hoc appelé bazel et sa construction n’est pas si simple, mais elle est certainement faisable. Après cela, non seulement l'avertissement disparaîtra, mais les performances du tensorflow devraient également s'améliorer.

679
Maxim

Mettez à jour le binaire tensorflow pour votre processeur et votre système d'exploitation à l'aide de cette commande

pip install --ignore-installed --upgrade "Download URL"

L'URL de téléchargement du fichier whl peut être trouvé ici

https://github.com/lakshayg/tensorflow-build

135
HimalayanCoder

Optimisation du processeur avec GPU

Il existe des gains de performances que vous pouvez obtenir en installant TensorFlow à partir de la source, même si vous avez un GPU et que vous l’utilisez pour la formation et la déduction. La raison en est que certaines opérations TF ont uniquement une implémentation de processeur et ne peuvent pas s'exécuter sur votre GPU.

De plus, certains conseils d’amélioration des performances permettent de bien utiliser votre processeur. Guide de performance de TensorFlow recommande ce qui suit:

Le fait de placer des opérations de pipeline d’entrée sur la CPU peut améliorer considérablement les performances. L'utilisation du processeur pour le pipeline d'entrée permet au GPU de se concentrer sur la formation.

Pour des performances optimales, vous devez écrire votre code pour utiliser votre processeur et votre processeur graphique en parallèle, et ne pas tout vider sur votre processeur graphique si vous en avez un. Le fait d’optimiser vos fichiers binaires TensorFlow pour votre processeur peut vous permettre de gagner du temps d’exécution, et vous devez le faire une fois.

22
Wesam

Pour Windows, vous pouvez vérifier les optimisation officielle d'Intel MKL pour TensorFlow compilées avec AVX2. Cette solution accélère mon inférence ~ x3.

conda install tensorflow-mkl
10
Flayn

Pour Windows (Merci au propriétaire f040225), allez ici: https://github.com/fo40225/tensorflow-windows-wheel pour récupérer l'URL de votre environnement en combinant "tf + python + cpu_instruction_extension ". Ensuite, utilisez cette cmd pour installer:

pip install --ignore-installed --upgrade "URL"

Si vous rencontrez l'erreur "Le fichier n'est pas un fichier Zip", téléchargez le fichier .whl sur votre ordinateur local et utilisez cette cmd pour installer:

pip install --ignore-installed --upgrade /path/target.whl
6
Z.Wei

Si vous utilisez la version pip de tensorflow, cela signifie qu'elle est déjà compilée et que vous ne faites que l'installer. En gros, vous installez tensorflow-gpu, mais lorsque vous le téléchargez depuis le référentiel et essayez de le construire, vous devez le construire avec le support CPU AVX. Si vous l'ignorez, vous recevrez un avertissement à chaque fois que vous exécuterez sur cpu.

2
Hazarapet Tunanyan