La tua CPU supporta le istruzioni che questo binario TensorFlow non è stato compilato per l’uso: AVX AVX2

Sono nuovo di TensorFlow. L’ho installato di recente (versione CPU di Windows) e ho ricevuto il seguente messaggio:

Installato con successo tensorflow-1.4.0 tensorflow-tensorboard-0.4.0rc2

Poi quando ho provato a correre

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

(che ho trovato tramite https://github.com/tensorflow/tensorflow )

Ho ricevuto il seguente errore:

 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] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2 

Ma quando ho corso

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

ha compilato come dovrebbe e prodotto Hello, TensorFlow! , che indica che l’installazione ha avuto successo, ma c’è qualcos’altro che non va.

Sai qual è il problema e come risolverlo? Grazie.

Di cosa parla questo avvertimento?

Le moderne CPU forniscono molte istruzioni di basso livello, oltre alla solita aritmetica e logica, note come estensioni, ad esempio SSE2, SSE4, AVX, ecc. Da Wikipedia :

Advanced Vector Extensions ( AVX ) sono estensioni dell’architettura dell’insieme di istruzioni x86 per microprocessori Intel e AMD proposte da Intel nel marzo 2008 e supportate per la prima volta da Intel con il processore Sandy Bridge nel 1 ° trimestre 2011 e successivamente da AMD con il processore Bulldozer. nel terzo trimestre del 2011. AVX offre nuove funzionalità, nuove istruzioni e un nuovo schema di codifica.

In particolare, AVX introduce operazioni di FASE (Fused multiply-accumulate ), che accelerano il calcolo di algebra lineare, vale a dire dot-product, moltiplicazione di matrice, convoluzione, ecc. Quasi tutti gli apprendimenti di machine learning implicano una grande quantità di queste operazioni, quindi saranno più veloce su una CPU che supporta AVX e FMA (fino al 300%). L’avviso indica che la tua CPU supporta AVX (hooray!).

Mi piacerebbe sottolineare qui: si tratta solo di CPU .

Perché non viene usato allora?

Poiché la distribuzione di default di tensorflow è realizzata senza estensioni della CPU , come SSE4.1, SSE4.2, AVX, AVX2, FMA, ecc. Le build predefinite (quelle di pip install tensorflow ) sono concepite per essere compatibili con il maggior numero di CPU ansible. Un altro argomento è che anche con queste estensioni la CPU è molto più lenta di una GPU, ed è previsto che l’addestramento di apprendimento automatico su media e grande scala venga eseguito su una GPU.

Cosa dovresti fare?

Se si dispone di una GPU , non ci si deve preoccupare del supporto AVX, poiché gli ops più costosi verranno inviati su un dispositivo GPU (a meno che non sia impostato esplicitamente). In questo caso, puoi semplicemente ignorare questo avviso di

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

… o impostando export TF_CPP_MIN_LOG_LEVEL=2 se sei su Unix. Tensorflow sta comunque lavorando bene, ma non vedrai questi fastidiosi avvertimenti.


Se non si dispone di una GPU e si desidera utilizzare la CPU il più ansible, è necessario creare tensorflow dall’origine ottimizzata per la CPU con AVX, AVX2 e FMA abilitati se la CPU li supporta. È stato discusso in questa domanda e anche questo problema GitHub . Tensorflow utilizza un sistema di build ad hoc chiamato bazel e la sua costruzione non è così banale, ma è certamente fattibile. Dopodiché, non solo scomparirà l’avvertimento, ma anche le prestazioni di tensorflow dovrebbero migliorare.

Aggiorna il binario tensorflow per la tua CPU e sistema operativo usando questo comando

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

L’URL di download del file whl può essere trovato qui

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

Ottimizzazione della CPU con GPU

Ci sono miglioramenti delle prestazioni che puoi ottenere installando TensorFlow dalla sorgente anche se hai una GPU e la usi per l’allenamento e l’inferenza. Il motivo è che alcune operazioni TF hanno solo l’implementazione della CPU e non possono essere eseguite sulla tua GPU.

Inoltre, ci sono alcuni suggerimenti per migliorare le prestazioni che fanno buon uso della tua CPU. La guida alle prestazioni di TensorFlow consiglia quanto segue:

L’inserimento delle operazioni di pipeline di input sulla CPU può migliorare significativamente le prestazioni. Utilizzando la CPU per la pipeline di input, la GPU si focalizza sull’allenamento.

Per prestazioni ottimali, dovresti scrivere il tuo codice per utilizzare CPU e GPU per lavorare in tandem e non scaricarlo tutto sulla tua GPU se ne hai uno. Avere i tuoi binari TensorFlow ottimizzati per la tua CPU potrebbe ripagare ore di tempo di esecuzione salvato e devi farlo una volta.