Ihre CPU unterstützt Anweisungen, für die diese TensorFlow-Binärdatei nicht kompiliert wurde: AVX AVX2

655

Ich bin neu bei TensorFlow. Ich habe es kürzlich installiert (Windows-CPU-Version) und die folgende Meldung erhalten:

Tensorflow-1.4.0 Tensorflow-Tensorboard-0.4.0rc2 erfolgreich installiert

Dann, als ich versuchte zu rennen

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()

(was ich über https://github.com/tensorflow/tensorflow gefunden habe )

Ich habe folgende Nachricht erhalten:

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] Ihre CPU unterstützt Anweisungen dazu TensorFlow-Binärdatei wurde nicht für die Verwendung kompiliert: AVX AVX2

Aber als ich rannte

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

Es lief wie es sollte und gab aus Hello, TensorFlow!, was darauf hinweist, dass die Installation tatsächlich erfolgreich war, aber es gibt noch etwas, das nicht stimmt.

Wissen Sie, wo das Problem liegt und wie Sie es beheben können?

csg
quelle
33
Wenn dies funktioniert, bedeutet die Information, dass es nicht so schnell ist, wie es sein könnte. Um es loszuwerden, können Sie es von der Quelle installieren, siehe hier
Ben
Ich habe auch das gleiche Problem mit den Befehlen, die Sie erfolgreich ausführen konnten. >>> 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 also ist es nur eine Warnung, aber alles wird gut funktionieren? (zumindest aus der Sicht eines Anfängers)
Bvdb
1
Um Tensorflow mit AVX-Anweisungen zu kompilieren, siehe diese Antwort
Sreeragh AR
2
Ich habe eine sehr ähnliche Nachricht in der gleichen Situation erhalten, die Nachricht ist Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2.
Hamid Heydarian

Antworten:

817

Worum geht es in dieser Warnung?

Moderne CPUs bieten neben der üblichen Arithmetik und Logik, die als Erweiterungen bezeichnet werden, viele einfache Anweisungen, z. B. SSE2, SSE4, AVX usw. Aus der Wikipedia :

Advanced Vector Extensions ( AVX ) sind Erweiterungen der x86-Befehlssatzarchitektur für Mikroprozessoren von Intel und AMD, die von Intel im März 2008 vorgeschlagen und zuerst von Intel mit dem Sandy Bridge-Prozessor im ersten Quartal 2011 und später von AMD mit dem Bulldozer-Prozessor ausgeliefert wurden im dritten Quartal 2011. AVX bietet neue Funktionen, neue Anweisungen und ein neues Codierungsschema.

Insbesondere führt AVX FMA-Operationen ( Fused Multiply-Accumulate ) ein, die die Berechnung der linearen Algebra beschleunigen, nämlich Punktprodukt, Matrixmultiplikation, Faltung usw. Fast jedes maschinelle Lerntraining beinhaltet daher einen großen Teil dieser Operationen schneller auf einer CPU, die AVX und FMA unterstützt (bis zu 300%). Die Warnung besagt, dass Ihre CPU AVX unterstützt (Hurra!).

Ich möchte hier betonen: Es geht nur um CPU .

Warum wird es dann nicht verwendet?

Da die Tensorflow-Standardverteilung ohne CPU-Erweiterungen wie SSE4.1, SSE4.2, AVX, AVX2, FMA usw. erstellt wird, sollen die Standard-Builds (diejenigen von pip install tensorflow) mit so vielen CPUs wie möglich kompatibel sein. Ein weiteres Argument ist, dass die CPU selbst mit diesen Erweiterungen viel langsamer als eine GPU ist und dass mittel- und groß angelegte maschinelle Lernschulungen auf einer GPU durchgeführt werden sollen.

Was sollte man tun?

Wenn Sie eine GPU haben , sollten Sie sich nicht um die AVX-Unterstützung kümmern, da die teuersten Operationen auf einem GPU-Gerät ausgeführt werden (es sei denn, dies ist ausdrücklich nicht festgelegt). In diesem Fall können Sie diese Warnung einfach ignorieren, indem Sie

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

... oder durch Festlegen, export TF_CPP_MIN_LOG_LEVEL=2ob Sie unter Unix arbeiten. Tensorflow funktioniert sowieso einwandfrei, aber Sie werden diese nervigen Warnungen nicht sehen.


Wenn Sie keine GPU haben und die CPU so weit wie möglich nutzen möchten, sollten Sie einen Tensorflow aus der für Ihre CPU optimierten Quelle mit aktiviertem AVX, AVX2 und FMA erstellen, wenn Ihre CPU diese unterstützt. Es wurde in dieser Frage und auch in diesem GitHub-Problem besprochen . Tensorflow verwendet ein Ad-hoc-Build-System namens bazel, und das Erstellen ist nicht so trivial, aber durchaus machbar. Danach verschwindet nicht nur die Warnung, sondern auch die Tensorflow-Leistung sollte verbessert werden.

Maxime
quelle
29
Es ist erwähnenswert, dass TensorFlow Serving separate Installationen für nicht optimierte CPU und optimierte CPU (AVX, SSE4.1 usw.) hat. Die Details sind hier: github.com/tensorflow/serving/blob/…
Chris Fregly
9
Laut einer gelöschten Antwort auf diese Frage erzielt AVX512F auf einem i9-7900x (Skylake-AVX512) mit GPU (GTX1080Ti) "bei CIFAR10 1000-Iterationen einen Gewinn von 28% 68s-> 48s". Sind Sie sicher, dass es ein guter Rat ist, die Warnung bei Verwendung einer GPU zu ignorieren? Sofern dieser Kommentar nicht falsch ist, scheint es zumindest in einigen Fällen etwas zu geben, das von CPU-Befehlssätzen profitiert.
Peter Cordes
1
@PeterCordes Wenn das so ist, werde ich es auf jeden Fall in meine Antwort aufnehmen. Die Aussage "Mein Modell beschleunigt um 30%" klingt jedoch genauso wie "Mein C ++ - Programm beschleunigt um 30%". Welches Modell genau? Gibt es eine manuelle CPU-Platzierung? Wie werden Daten übertragen? Zum Beispiel könnte es eine Menge Arbeit in Numpy geben. Natürlich ist es möglich, die CPU zu einem Engpass zu machen, und es gibt viele Fragen dazu auf SO. Es wird normalerweise als Fehler angesehen.
Maxim
2
@Maxim: Der gesamte Text der gelöschten Antwort lautet " In meinem Test erzielt die Anweisung AVX512F auf der I9 (7900x) GPU (GTX1080Ti) einen 28% igen Gewinn von 68-> 48s auf CIFAR10 1000-Iterationen ". Daher gibt es leider keine Details (oder Interpunktion, Grammatik oder Formatierung).
Peter Cordes
2
Anscheinend, wenn Sie auf einem Mac sind, wird es keine GPU verwenden, stackoverflow.com/questions/46364917/…
Dent Arthur Dent
156

Aktualisieren Sie die Tensorflow-Binärdatei für Ihre CPU und Ihr Betriebssystem mit diesem Befehl

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

Die Download-URL der whl-Datei finden Sie hier

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

HimalayanCoder
quelle
1
Ich habe Windows 10 mit der URL stackoverflow.com/questions/47068709/… ausprobiert . Ich erhalte die Fehlermeldung zipfile.BadZipFile: Datei ist keine Zip-Datei
Thusitha Thilina Dayaratne
1
Es hat funktioniert, als ich die heruntergeladene Version heruntergeladen und verwendet habe
Thusitha Thilina Dayaratne
1
Jeder, der "Fehler beim Aussprechen von zipfile.BadZipFile: Datei ist keine Zip-Datei" erhält, sollte den unformatierten Link wie bei cuda9.2avx2 erhalten. Der Link lautet github.com/fo40225/tensorflow-windows-wheel/raw/master/1.9.0/…
Yeasin Ar Rahman
5
Für Windows habe ich das versucht. Deinstallieren Sie den vorhandenen Tensorflow mit "pip uninstall tensorflow" und installieren Sie ihn anschließend mit "pip install <Pfad zur heruntergeladenen WHL-Datei>" neu. Laden Sie diese WHL-Datei auf Ihren Computer herunter - github.com/fo40225/tensorflow-windows-wheel/blob/master/1.10.0/… , wenn Sie ein 3.6-Python- und ein 64-Bit-Fenster haben (ignorieren Sie das angezeigte AMD). Andernfalls navigieren Sie in Github einen Schritt zurück und suchen Sie nach der richtigen WHL. Es funktioniert
König
3
Hat für mich gearbeitet. Ubuntu 16.04.4, Python 3.5.2, gcc 5.4.0 - hat die whl heruntergeladen und installiert. Derzeit wird eine p2.xLarge aws-Instanz verwendet. Die Leistung wurde von 16 Sekunden pro Iteration auf 9 Sekunden für eine benutzerdefinierte Objekterkennungsübung mit 230 Klassen verbessert, die auf Faster R-CNN ausgeführt werden.
Aprikose
27

CPU-Optimierung mit GPU

Es gibt Leistungssteigerungen, die Sie erzielen können, wenn Sie TensorFlow von der Quelle installieren, selbst wenn Sie eine GPU haben und diese für Training und Inferenz verwenden. Der Grund dafür ist, dass einige TF-Vorgänge nur eine CPU-Implementierung haben und nicht auf Ihrer GPU ausgeführt werden können.

Außerdem gibt es einige Tipps zur Leistungssteigerung, mit denen Sie Ihre CPU optimal nutzen können. Der Leistungsleitfaden von TensorFlow empfiehlt Folgendes:

Durch das Platzieren von Eingabepipeline-Vorgängen auf der CPU kann die Leistung erheblich verbessert werden. Durch die Verwendung der CPU für die Eingabepipeline kann sich die GPU auf das Training konzentrieren.

Um eine optimale Leistung zu erzielen, sollten Sie Ihren Code so schreiben, dass Ihre CPU und GPU zusammenarbeiten, und nicht alles auf Ihrer GPU speichern, wenn Sie eine haben. Wenn Sie Ihre TensorFlow-Binärdateien für Ihre CPU optimieren, kann sich die eingesparte Laufzeit stundenlang auszahlen, und Sie müssen dies einmal tun.

Wesam
quelle
13

Für Windows können Sie die offizielle Intel MKL-Optimierung für TensorFlow- Räder überprüfen , die mit AVX2 kompiliert wurden. Diese Lösung beschleunigt meine Schlussfolgerung ~ x3.

conda install tensorflow-mkl
Flayn
quelle
12

Für Windows (dank des Besitzers f040225) gehen Sie hier: https://github.com/fo40225/tensorflow-windows-wheel , um die URL für Ihre Umgebung basierend auf der Kombination von "tf + python + cpu_instruction_extension" abzurufen. Verwenden Sie dann dieses cmd, um Folgendes zu installieren:

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

Wenn der Fehler "Datei ist keine Zip-Datei" auftritt, laden Sie die .whl-Datei auf Ihren lokalen Computer herunter und installieren Sie sie mit diesem Cmd:

pip install --ignore-installed --upgrade /path/target.whl
Z.Wei
quelle
Die GPUs sind in Teile aufgeteilt und als .7z-Dateien gekennzeichnet. Wie setzt man sie zusammen?
user3496060
@ user3496060 Ich habe winrar verwendet, um die geteilten Dateien zu dekomprimieren
Alan Dursun
8

Wenn Sie die Pip- Version von Tensorflow verwenden, bedeutet dies, dass diese bereits kompiliert ist und Sie sie nur installieren. Grundsätzlich installieren Sie tensorflow-gpu, aber wenn Sie es aus dem Repository herunterladen und versuchen zu erstellen, sollten Sie es mit CPU AVX-Unterstützung erstellen. Wenn Sie es ignorieren, erhalten Sie die Warnung jedes Mal, wenn Sie auf CPU laufen.

Hazarapet Tunanyan
quelle
Wie kann ich diesen Fehler vermeiden? Was muss ich beachten?
jitsm555
2
Dies ist kein Fehler. Es ist eine Warnung, dass der Sensor AVX für CPU nicht unterstützt. Wenn Sie es nicht sehen möchten, schalten Sie es einfach aus, indem Sie os.environ ['TF_CPP_MIN_LOG_LEVEL'] = '2'
Hazarapet Tunanyan
4

Der einfachste Weg, dies zu beheben, besteht darin, alles zu deinstallieren und dann eine bestimmte Version von tensorflow-gpu zu installieren:

  1. Tensorflow deinstallieren:
    pip uninstall tensorflow
  1. deinstallieren tensorflow-gpu: (stellen Sie sicher, dass Sie dies ausführen, auch wenn Sie nicht sicher sind, ob Sie es installiert haben)
    pip uninstall tensorflow-gpu
  1. Installieren Sie eine bestimmte Tensorflow-GPU-Version:
    pip install tensorflow-gpu==2.0.0
    pip install tensorflow_hub
    pip install tensorflow_datasets

Sie können überprüfen, ob dies funktioniert hat, indem Sie den folgenden Code in eine Python-Datei einfügen:

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")

Führen Sie die Datei aus, und die Ausgabe sollte ungefähr so ​​aussehen:

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

Hoffe das hilft

James Brett
quelle
ModuleNotFoundError: Kein Modul mit dem Namen 'tensorflow_hub'
D Adams
ModuleNotFoundError: Kein Modul mit dem Namen 'tensorflow_datasets'
D Adams
Versuchen Sie, die Module separat zu installieren: pip install tensorflow_hubundpip install tensorflow_datasets
James Brett
yup -> versuche nur, bei der Vollständigkeit deiner Antwort hilfreich zu sein.
D Adams
Oh, ich erinnere mich nicht, dass ich diese separat installieren musste. Vielen Dank!
James Brett