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


656

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

Tensorflow-1.4.0 tensorflow-tensorboard-0.4.0rc2 installato correttamente

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 messaggio:

02/11/2017 01: 56: 21.698935: IC: \ tf_jenkins \ home \ area di lavoro \ rel-win \ M \ windows \ PY \ 36 \ tensorflow \ core \ platform \ cpu_feature_guard.cc: 137] La ​​tua CPU supporta le istruzioni che questo Il binario TensorFlow non è stato compilato per l'uso: AVX AVX2

Ma quando ho corso

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

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

Sai qual è il problema e come risolverlo?


33
Se funziona, l'informazione che sputa significa che non è veloce come potrebbe essere. Per sbarazzartene puoi installarlo dal sorgente vedi qui
Ben

Sto anche affrontando lo stesso problema con i comandi che potresti eseguire correttamente. >>> 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 quindi è solo un avvertimento, ma tutto funzionerà bene? (almeno dal punto di vista di un principiante)
bvdb

1
Per compilare Tensorflow con le istruzioni AVX, vedere questa risposta
Sreeragh AR

2
Ho ricevuto un messaggio molto simile nella stessa situazione, il messaggio è Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2.
Hamid Heydarian,

Risposte:


820

Di cosa parla questo avviso?

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 del set di istruzioni x86 per microprocessori di Intel e AMD proposti da Intel nel marzo 2008 e inizialmente supportati da Intel con la spedizione del processore Sandy Bridge nel primo trimestre 2011 e successivamente da AMD con la spedizione del 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 moltiplicazione-accumulo (FMA) fuse , che accelerano il calcolo lineare dell'algebra, vale a dire il prodotto a punti, la moltiplicazione di matrici, la convoluzione, ecc. Quasi ogni formazione di apprendimento automatico comporta una grande quantità di queste operazioni, quindi sarà più veloce su una CPU che supporta AVX e FMA (fino al 300%). L'avviso indica che la CPU supporta AVX (evviva!).

Vorrei sottolineare qui: si tratta solo di CPU .

Perché non viene utilizzato allora?

Perché viene costruita la distribuzione predefinita di tensorflow senza estensioni della CPU , come SSE4.1, SSE4.2, AVX, AVX2, FMA, ecc. Le build predefinite (da quelle pip install tensorflow) sono pensate per essere compatibili con quante più CPU possibile. Un altro argomento è che anche con queste estensioni la CPU è molto più lenta di una GPU e si prevede che l'addestramento di apprendimento automatico su media e larga scala venga eseguito su una GPU.

Cosa dovresti fare

Se hai una GPU , non dovresti preoccuparti del supporto AVX, perché le operazioni più costose verranno spedite su un dispositivo GPU (a meno che non sia impostato esplicitamente come non). In questo caso, puoi semplicemente ignorare questo avviso

# 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=2se sei su Unix. Tensorflow funziona comunque bene, ma non vedrai questi fastidiosi avvertimenti.


Se non si dispone di una GPU e si desidera utilizzare la CPU il più possibile, è necessario creare tensorflow dalla sorgente ottimizzata per la CPU con AVX, AVX2 e FMA abilitati se la CPU li supporta. È stato discusso in questa domanda e anche in questo numero di GitHub . Tensorflow usa un sistema di costruzione ad hoc chiamato bazel e costruirlo non è così banale, ma è certamente fattibile. Dopo questo, non solo l'avvertimento scomparirà, ma anche le prestazioni di tensorflow dovrebbero migliorare.


29
Vale la pena ricordare che TensorFlow Serving ha installazioni separate per CPU non ottimizzata e CPU ottimizzata (AVX, SSE4.1, ecc.). i dettagli sono qui: github.com/tensorflow/serving/blob/…
Chris Fregly,

9
Secondo una risposta eliminata a questa domanda, AVX512F su un i9-7900x (Skylake-AVX512) con GPU (GTX1080Ti) "fa un guadagno del 28% 68s-> 48s su iterazioni CIFAR10 1000". Sei sicuro che sia un buon consiglio ignorare l'avviso quando si utilizza una GPU? A meno che quel commento non sia falso, sembra che ci sia qualcosa da guadagnare dai set di istruzioni della CPU in almeno alcuni casi.
Peter Cordes,

1
@PeterCordes Se è così, lo includerò sicuramente nella mia risposta. Ma la frase "il mio modello accelera del 30%" suona allo stesso modo "il mio programma C ++ accelera del 30%". Quale modello esattamente? Esiste un posizionamento manuale della CPU? Come vengono trasferiti i dati? Ad esempio, potrebbe esserci molto lavoro in intorpidimento. Naturalmente, è possibile rendere la CPU un collo di bottiglia e ci sono molte domande al riguardo su SO. Di solito è considerato un bug.
Massimo

2
@Maxim: l'intero testo della risposta eliminata è " Nel mio test l'istruzione AVX512F su GPU I9 (7900x) (GTX1080Ti) fa un guadagno del 28% 68s-> 48s su iterazioni CIFAR10 1000 ". Quindi sfortunatamente non ci sono dettagli (o punteggiatura, grammatica o formattazione).
Peter Cordes,

2
Apparentemente se sei su un Mac, non utilizzerà GPU, stackoverflow.com/questions/46364917/…
Dent Arthur Dent

156

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 è disponibile qui

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


1
Ho provato su Windows 10 url stackoverflow.com/questions/47068709/… . Viene visualizzato un errore che dice zipfile.BadZipFile: il file non è un file zip
Thusitha Thilina Dayaratne

1
Ha funzionato quando scarico e utilizzo la versione scaricata
Thusitha Thilina Dayaratne,

1
chiunque riceva "errore dicendo zipfile.BadZipFile: il file non è un file zip" dovrebbe ottenere il link non elaborato come per cuda9.2avx2 il link è github.com/fo40225/tensorflow-windows-wheel/raw/master/1.9.0/…
Yeasin Ar Rahman,

5
Per Windows, ho provato questo. Disinstallare tensorflow esistente utilizzando "pip uninstall tensorflow", quindi reinstallarlo utilizzando "pip install <percorso del file WHL scaricato>". Scarica questo file WHL sul tuo computer - github.com/fo40225/tensorflow-windows-wheel/blob/master/1.10.0/… , se hai un Python 3.6 e un Windows a 64 bit (ignora il codice che vedi). Altrimenti, fai un passo indietro in github e cerca il WHL corretto. Funziona
Re

3
Ha funzionato per me. Ubuntu 16.04.4, Python 3.5.2, gcc 5.4.0 - scaricato whl e installato. Attualmente si utilizza un'istanza aws p2.xLarge. Le prestazioni sono migliorate da 16 secondi per iterazione a 9 secondi per un esercizio di rilevamento degli oggetti personalizzato con 230 classi in esecuzione su R-CNN più veloce.
Apricot

27

Ottimizzazione della CPU con GPU

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

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

Il posizionamento delle operazioni della pipeline di input sulla CPU può migliorare significativamente le prestazioni. L'utilizzo della CPU per la pipeline di input consente alla GPU di concentrarsi sulla formazione.

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



12

Per Windows (grazie al proprietario f040225), vai qui: https://github.com/fo40225/tensorflow-windows-wheel per recuperare l'URL per il tuo ambiente in base alla combinazione di "tf + python + cpu_instruction_extension". Quindi utilizzare questo cmd per installare:

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

Se si verifica l'errore "Il file non è un file zip", scaricare .whl sul computer locale e utilizzare questo cmd per installare:

pip install --ignore-installed --upgrade /path/target.whl

quelli GPU sono suddivisi in parti ed etichettati come file .7z. Come metterli insieme?
user3496060

@ user3496060 Ho usato winrar per decomprimere i file divisi
Alan Dursun il

8

Se usi la versione pip di tensorflow, significa che è già compilata e la stai solo installando. Fondamentalmente installi tensorflow-gpu, ma quando lo scarichi dal repository e provi a compilarlo, dovresti costruirlo con il supporto AVX della CPU. Se lo ignori, riceverai l'avviso ogni volta che corri su CPU.


come posso evitare questo errore, quali sono le cose che dovrei seguire?
jitsm555,

2
questo non è un errore. È un avvertimento che thensorflow non supporta AVX per CPU. Se non vuoi vederlo, disattivalo semplicemente impostando os.environ ['TF_CPP_MIN_LOG_LEVEL'] = '2'
Hazarapet Tunanyan

5

Il modo più semplice che ho trovato per risolvere questo problema è disinstallare tutto, quindi installare una versione specifica di tensorflow-gpu:

  1. disinstallare tensorflow:
    pip uninstall tensorflow
  1. disinstalla tensorflow-gpu: (assicurati di eseguirlo anche se non sei sicuro di averlo installato)
    pip uninstall tensorflow-gpu
  1. Installa la versione specifica di tensorflow-gpu:
    pip install tensorflow-gpu==2.0.0
    pip install tensorflow_hub
    pip install tensorflow_datasets

Puoi verificare se ha funzionato aggiungendo il seguente codice in un file 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")

Esegui il file e quindi l'output dovrebbe essere qualcosa del genere:

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

Spero che sia di aiuto


ModuleNotFoundError: nessun modulo chiamato 'tensorflow_hub'
D Adams,

ModuleNotFoundError: nessun modulo denominato 'tensorflow_datasets'
D Adams,

Prova a installare i moduli separatamente: pip install tensorflow_hubepip install tensorflow_datasets
James Brett il

Sì -> sto solo cercando di essere d'aiuto nella completezza della tua risposta.
D Adams,

Oh, non ricordo di averli installati separatamente. Grazie!
James Brett,

0

Ciò che ha funzionato per me è questa libreria https://pypi.org/project/silence-tensorflow/

Installa questa libreria e fai come indicato nella pagina, funziona come un incantesimo!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.