Votre CPU prend en charge les instructions que ce binaire TensorFlow n'a pas été compilé pour utiliser: AVX AVX2

656

Je suis nouveau sur TensorFlow. Je l'ai récemment installé (version CPU 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é sur https://github.com/tensorflow/tensorflow )

J'ai reçu le message suivant:

2017-11-02 01: 56: 21.698935: IC: \ tf_jenkins \ home \ workspace \ rel-win \ M \ windows \ PY \ 36 \ tensorflow \ core \ platform \ cpu_feature_guard.cc: 137] Votre CPU prend en charge les instructions que ce Le binaire TensorFlow n'a pas été compilé pour utiliser: AVX AVX2

Mais quand j'ai couru

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

il s'est déroulé comme il se doit et a généré une sortie Hello, TensorFlow!, ce qui indique que l'installation a réussi, mais il y a autre chose qui ne va pas.

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

csg
la source
33
tf fonctionne, l'information qu'il crache signifie simplement qu'elle n'est pas aussi rapide qu'elle pourrait l'être. Pour vous en débarrasser, vous pouvez l'installer à partir de la source voir ici
Ben
Je suis également confronté au même problème avec les commandes que vous pourriez exécuter avec succès. >>> sess = tf.Session() 2017-11-05 18:02:44.670825: I C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\ 35\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instruct ions that this TensorFlow binary was not compiled to use: AVX AVX2
M. Oguz Ozcan
@Ben c'est donc juste un avertissement, mais tout fonctionnera très bien? (au moins du point de vue d'un débutant)
bvdb
1
Pour compiler Tensorflow avec les instructions AVX, voir cette réponse
Sreeragh AR
2
J'ai reçu un message très similaire dans la même situation, le message est Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2.
Hamid Heydarian

Réponses:

821

Quel est cet avertissement?

Les processeurs modernes offrent un grand nombre d'instructions de bas niveau, en plus de l'arithmétique et la logique habituelle, connue sous le nom des extensions, par exemple SSE2, SSE4, AVX, etc. Du Wikipédia :

Les extensions vectorielles avancées ( AVX ) sont des extensions de l'architecture du jeu d'instructions x86 pour les microprocesseurs d'Intel et d'AMD proposées par Intel en mars 2008 et d'abord prises en charge par Intel avec la livraison du processeur Sandy Bridge au T1 2011 et plus tard par AMD avec la livraison du processeur Bulldozer 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 des opérations de multiplication-accumulation (FMA) fusionnées , qui accélèrent le calcul d'algèbre linéaire, à savoir le produit scalaire, la multiplication matricielle, la convolution, etc. Presque chaque formation en machine-learning implique une grande partie de ces opérations, donc sera plus rapide sur un processeur prenant en charge AVX et FMA (jusqu'à 300%). L'avertissement indique que votre CPU prend en charge AVX (hourra!).

Je voudrais souligner ici: il s'agit uniquement de CPU .

Pourquoi n'est-il pas utilisé alors?

Parce que la distribution par défaut tensorflow est construite sans extensions CPU , telles que SSE4.1, SSE4.2, AVX, AVX2, FMA, etc. Les versions par défaut (celles de pip install tensorflow) sont conçues pour être compatibles avec autant de CPU que possible. Un autre argument est que, même avec ces extensions, le processeur est beaucoup plus lent qu'un GPU, et il est prévu que la formation d'apprentissage machine à moyenne et grande échelle soit effectuée sur un GPU.

Que devrais tu faire?

Si vous avez un GPU , vous ne devriez pas vous soucier de la prise en charge d'AVX, car les opérations les plus chères seront expédiées sur un périphérique GPU (sauf si elles sont explicitement définies comme non). 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 définissant export TF_CPP_MIN_LOG_LEVEL=2si vous êtes sous Unix. Tensorflow fonctionne bien de toute façon, mais vous ne verrez pas ces avertissements ennuyeux.


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

Maxime
la source
29
Il convient de mentionner que TensorFlow Serving a des installations distinctes pour le processeur non optimisé et le processeur optimisé (AVX, SSE4.1, etc.). les détails sont ici: github.com/tensorflow/serving/blob/…
Chris Fregly
9
Selon une réponse supprimée à cette question, AVX512F sur un i9-7900x (Skylake-AVX512) avec GPU (GTX1080Ti) "fait un gain de 28% 68s-> 48s sur les itérations CIFAR10 1000". Êtes-vous sûr que c'est un bon conseil d'ignorer l'avertissement lors de l'utilisation d'un GPU? À moins que ce commentaire ne soit faux, il semble qu'il y ait quelque chose à gagner des jeux d'instructions CPU dans au moins certains cas.
Peter Cordes
1
@PeterCordes Si tel est le cas, je vais certainement l'inclure dans ma réponse. Mais l'énoncé "mon modèle accélère de 30%" sonne comme "mon programme C ++ accélère de 30%". Quel modèle exactement? Y a-t-il un placement manuel du CPU? Comment les données sont-elles transférées? Par exemple, il pourrait y avoir beaucoup de travail dans numpy. Bien sûr, il est possible de faire du CPU un goulot d'étranglement et il y a beaucoup de questions à ce sujet sur SO. Il est généralement considéré comme un bug.
Maxim
2
@Maxim: Le texte entier de la réponse supprimée est " Dans mon test, l'instruction AVX512F sur GPU I9 (7900x) (GTX1080Ti) fait un gain de 28% 68s-> 48s sur les itérations CIFAR10 1000 ". Il n'y a donc malheureusement pas de détails (ni ponctuation, grammaire ou mise en forme).
Peter Cordes
2
Apparemment, si vous êtes sur un Mac, il n'utilisera pas de GPU, stackoverflow.com/questions/46364917/…
Dent Arthur Dent
156

Mettez à jour le binaire tensorflow pour votre CPU 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 se trouve ici

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

HimalayanCoder
la source
1
J'ai essayé sur Windows 10 avec url stackoverflow.com/questions/47068709/… . Je reçois une erreur disant zipfile.BadZipFile: Le fichier n'est pas un fichier zip
Thusitha Thilina Dayaratne
1
Cela a fonctionné lorsque je télécharge et utilise la version téléchargée
Thusitha Thilina Dayaratne
1
toute personne obtenant "erreur disant zipfile.BadZipFile: le fichier n'est pas un fichier zip" devrait obtenir le lien brut comme pour cuda9.2avx2 le lien est github.com/fo40225/tensorflow-windows-wheel/raw/master/1.9.0/…
Yeasin Ar Rahman
5
Pour Windows, j'ai essayé cela. Désinstallez le tensorflow existant à l'aide de "pip uninstall tensorflow", puis réinstallez-le à l'aide de "pip install <Chemin vers le fichier WHL téléchargé>". Téléchargez ce fichier WHL sur votre ordinateur - github.com/fo40225/tensorflow-windows-wheel/blob/master/1.10.0/… , si vous avez un Python 3.6 et une fenêtre 64 bits (ignorez l'amd que vous voyez). Sinon, revenez en arrière dans github et recherchez le WHL correct. Cela fonctionne
King
3
A travaillé pour moi. Ubuntu 16.04.4, Python 3.5.2, gcc 5.4.0 - téléchargé le whl et installé. Utilise actuellement une instance aws p2.xLarge. Les performances sont passées de 16 secondes par itération à 9 secondes pour un exercice de détection d'objet personnalisé avec 230 classes exécutées sur Faster R-CNN.
Apricot
27

Optimisation CPU avec GPU

Il y a 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 l'inférence. La raison en est que certaines opérations TF n'ont qu'une implémentation CPU et ne peuvent pas s'exécuter sur votre GPU.

En outre, il existe des conseils d'amélioration des performances qui font bon usage de votre processeur. Le guide des performances de TensorFlow recommande ce qui suit:

Placer des opérations de pipeline d'entrée sur le processeur peut améliorer considérablement les performances. L'utilisation du CPU pour le pipeline d'entrée libère le GPU pour se concentrer sur la formation.

Pour de meilleures performances, vous devez écrire votre code pour utiliser votre CPU et GPU pour travailler en tandem, et ne pas tout vider sur votre GPU si vous en avez un. L'optimisation de vos binaires TensorFlow pour votre processeur pourrait rapporter des heures de temps de fonctionnement économisées et vous devez le faire une fois.

Wesam
la source
12

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 fonction de la combinaison de "tf + python + cpu_instruction_extension". Utilisez ensuite 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 .whl sur votre ordinateur local et utilisez cette cmd pour installer:

pip install --ignore-installed --upgrade /path/target.whl
Z.Wei
la source
ceux du GPU sont divisés en parties et étiquetés en tant que fichiers .7z. Comment les reconstituer?
user3496060
@ user3496060 J'ai utilisé winrar pour décompresser les fichiers divisés
Alan Dursun
8

Si vous utilisez la version pip de tensorflow, cela signifie qu'il est déjà compilé et que vous ne faites que l'installer. Fondamentalement, vous installez tensorflow-gpu, mais lorsque vous le téléchargez à partir du référentiel et essayez de le construire, vous devez le construire avec le support CPU AVX. Si vous l'ignorez, vous obtiendrez l'avertissement à chaque fois que vous exécutez sur cpu.

Hazarapet Tunanyan
la source
comment puis-je éviter cette erreur, quelles sont les choses que je dois suivre?
jitsm555
2
ce n'est pas une erreur. C'est un avertissement que thensorflow ne prend pas en charge AVX pour cpu. Si vous ne voulez pas le voir, désactivez-le simplement en définissant os.environ ['TF_CPP_MIN_LOG_LEVEL'] = '2'
Hazarapet Tunanyan
5

Le moyen le plus simple que j'ai trouvé pour résoudre ce problème est de tout désinstaller puis d'installer une version spécifique de tensorflow-gpu:

  1. désinstaller tensorflow:
    pip uninstall tensorflow
  1. désinstaller tensorflow-gpu: (assurez-vous de l'exécuter même si vous n'êtes pas sûr de l'avoir installé)
    pip uninstall tensorflow-gpu
  1. Installez une version spécifique de tensorflow-gpu:
    pip install tensorflow-gpu==2.0.0
    pip install tensorflow_hub
    pip install tensorflow_datasets

Vous pouvez vérifier si cela a fonctionné en ajoutant le code suivant dans un fichier python:

from __future__ import absolute_import, division, print_function, unicode_literals

import numpy as np

import tensorflow as tf
import tensorflow_hub as hub
import tensorflow_datasets as tfds

print("Version: ", tf.__version__)
print("Eager mode: ", tf.executing_eagerly())
print("Hub Version: ", hub.__version__)
print("GPU is", "available" if tf.config.experimental.list_physical_devices("GPU") else "NOT AVAILABLE")

Exécutez le fichier et la sortie devrait ressembler à ceci:

Version:  2.0.0
Eager mode:  True
Hub Version:  0.7.0
GPU is available

J'espère que cela t'aides

James Brett
la source
ModuleNotFoundError: Aucun module nommé 'tensorflow_hub'
D Adams
ModuleNotFoundError: Aucun module nommé 'tensorflow_datasets'
D Adams
Essayez d'installer les modules séparément: pip install tensorflow_hubetpip install tensorflow_datasets
James Brett
yup -> juste essayer d'être utile dans l'exhaustivité de votre réponse.
D Adams
Oh, je ne me souviens pas avoir dû les installer séparément. Merci!
James Brett
0

Ce qui a fonctionné pour moi c'est cette bibliothèque https://pypi.org/project/silence-tensorflow/

Installez cette bibliothèque et faites comme indiqué sur la page, cela fonctionne comme un charme!

shivam13juna
la source