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
- Significato di buffer_size in Dataset.map, Dataset.prefetch e Dataset.shuffle
- Come eseguire l'assegnazione delle fette in Tensorflow
- Come importare un treno modello Tensorflow salvato usando tf.estimator e prevedere i dati di input
- Tensorflow: ImportError: libcusolver.so.8.0: imansible aprire il file object condiviso: Nessun file o directory di questo tipo
- Aggiorna solo parte della matrice di incorporamento delle parole in Tensorflow
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.
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 .
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.
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
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.