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?
quelle
>>> 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
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
.Antworten:
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 :
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
... oder durch Festlegen,
export TF_CPP_MIN_LOG_LEVEL=2
ob 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.
quelle
Aktualisieren Sie die Tensorflow-Binärdatei für Ihre CPU und Ihr Betriebssystem mit diesem Befehl
Die Download-URL der whl-Datei finden Sie hier
https://github.com/lakshayg/tensorflow-build
quelle
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:
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.
quelle
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.
quelle
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:
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:
quelle
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.
quelle
Der einfachste Weg, dies zu beheben, besteht darin, alles zu deinstallieren und dann eine bestimmte Version von tensorflow-gpu zu installieren:
Sie können überprüfen, ob dies funktioniert hat, indem Sie den folgenden Code in eine Python-Datei einfügen:
Führen Sie die Datei aus, und die Ausgabe sollte ungefähr so aussehen:
Hoffe das hilft
quelle
pip install tensorflow_hub
undpip install tensorflow_datasets