Come compilare Tensorflow con le istruzioni SSE4.2 e AVX?


289

Questo è il messaggio ricevuto dall'esecuzione di uno script per verificare se Tensorflow funziona:

I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally
W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:95] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:910] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

Ho notato che ha menzionato SSE4.2 e AVX,

  1. Cosa sono SSE4.2 e AVX?
  2. In che modo questi SSE4.2 e AVX possono migliorare i calcoli della CPU per le attività di Tensorflow.
  3. Come compilare Tensorflow usando le due librerie?

18
Mi piace costruire con queste bandiere bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package su Xeon E5 v3 che mi dà un miglioramento 3x nella velocità della CPU matmul 8k rispetto alla versione ufficiale (0,35 -> 1,05 T ops / sec)
Yaroslav Bulatov

4
e non dimenticare NOTE on gcc 5 or later: the binary pip packages available on the TensorFlow website are built with gcc 4, which uses the older ABI. To make your build compatible with the older ABI, you need to add --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0" to your bazel build command. ABI compatibility allows custom ops built against the TensorFlow pip package to continue to work against your built package.da qui tensorflow.org/install/install_sources
Ivan Kush,

4
Ho alcuni binari compilati per TF che supportano queste istruzioni github.com/lakshayg/tensorflow-build . Potresti trovare questo utile.
Lakshay Garg,

1
@IvanKush dopo aver aggiunto quella bandiera, non riesco ancora a importare con successo tensorflow (compila bene). Se si è compilato con successo con gcc 5, si veda: stackoverflow.com/questions/45877158/...
anon01

1
Se usi Ubuntu 16.04, abbiamo build per quasi tutte le varianti che potresti aver bisogno su github.com/mind/wheels
danqing,

Risposte:


160

Ho appena incontrato questo stesso problema, sembra che il suggerimento di Yaroslav Bulatov non copra il supporto SSE4.2, l'aggiunta --copt=-msse4.2sarebbe sufficiente. Alla fine, ho costruito con successo

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.2 --config=cuda -k //tensorflow/tools/pip_package:build_pip_package

senza ricevere alcun avviso o errore.

Probabilmente la scelta migliore per qualsiasi sistema è:

bazel build -c opt --copt=-march=native --copt=-mfpmath=both --config=cuda -k //tensorflow/tools/pip_package:build_pip_package

( Aggiornamento: gli script di compilazione potrebbero non funzionare-march=native , probabilmente perché contiene un= .)

-mfpmath=bothfunziona solo con gcc, non clang. -mfpmath=sseè probabilmente altrettanto buono, se non migliore, ed è il valore predefinito per x86-64. Le build a 32 bit sono predefinite -mfpmath=387, quindi cambiando ciò aiuterà per 32 bit. (Ma se vuoi prestazioni elevate per lo scricchiolio dei numeri, dovresti creare binari a 64 bit.)

Non sono sicuro di quale sia l'impostazione predefinita di TensorFlow -O2o -O3. gcc -O3consente l'ottimizzazione completa, inclusa l'auto-vettorializzazione, ma a volte può rallentare il codice.


Cosa fa: --coptperbazel build passa un'opzione direttamente a gcc per la compilazione di file C e C ++ (ma non il collegamento, quindi è necessaria un'opzione diversa per l'ottimizzazione del tempo tra i collegamenti tra file)

gcc x86-64 utilizza automaticamente solo le istruzioni SIMD SSE2 o precedenti, quindi è possibile eseguire i binari su qualsiasi sistema x86-64. (Vedi https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html ). Non è quello che vuoi. Vuoi creare un binario che sfrutti tutte le istruzioni che la tua CPU può eseguire, perché stai eseguendo questo binario solo sul sistema in cui lo hai creato.

-march=nativeabilita tutte le opzioni supportate dalla CPU, quindi è -mavx512f -mavx2 -mavx -mfma -msse4.2ridondante. (Inoltre, -mavx2già abilita -mavxe -msse4.2, quindi il comando di Yaroslav avrebbe dovuto andare bene). Inoltre, se stai utilizzando una CPU che non supporta una di queste opzioni (come FMA), l'utilizzo -mfmacreerebbe un binario che guasta con istruzioni illegali.

L' ./configureimpostazione predefinita di TensorFlow è l' abilitazione-march=native , quindi l'utilizzo che dovrebbe evitare la necessità di specificare manualmente le opzioni del compilatore.

-march=nativeabilita -mtune=native, quindi ottimizza per la tua CPU per cose come quale sequenza di istruzioni AVX è la migliore per carichi non allineati.

Tutto questo vale per gcc, clang o ICC. (Per ICC, è possibile utilizzare -xHOSTinvece di -march=native.)


6
Funziona davvero> +1! Quindi sembra -march=nativenon fare il suo lavoro. Inoltre, anche il rilascio --config=cuda(se non è necessario il supporto CUDA) e -k(poiché non si è verificato alcun errore durante la compilazione) funzionano.
Marc

4
Dopo aver disinstallato e reinstallato la nuova versione compilata ricevo ancora avvisi per AVX, AVX2 e FMA.
Benedikt S. Vogler,

5
Ho dovuto abbandonare --copt=-mfpmath=bothper farlo funzionare clangsu macOS. Influisce sul binario risultante?
gc5,

2
Solo per chiarimenti: quando creo il file di configurazione .... uso semplicemente --copt = -march = native? O inserisco tutte quelle ottimizzazioni visualizzate nei post originali in cui ho la possibilità di inserirle?
Thornhale,

1
Viene visualizzato un errore che dice che il comando 'build' è supportato solo dallo spazio di lavoro? Cosa fare?
umile

133

Cominciamo con la spiegazione del perché vedi questi avvisi in primo luogo .


Molto probabilmente non hai installato TF dal sorgente e invece hai usato qualcosa del genere pip install tensorflow. Ciò significa che hai installato binari precostruiti (da qualcun altro) che non sono stati ottimizzati per la tua architettura. E questi avvertimenti ti dicono esattamente questo: qualcosa è disponibile sulla tua architettura, ma non verrà usato perché il binario non è stato compilato con esso. Ecco la parte dalla documentazione .

TensorFlow verifica all'avvio se è stato compilato con le ottimizzazioni disponibili sulla CPU. Se le ottimizzazioni non sono incluse, TensorFlow emetterà avvisi, ad esempio istruzioni AVX, AVX2 e FMA non incluse.

La cosa buona è che molto probabilmente vuoi solo imparare / sperimentare con TF, quindi tutto funzionerà correttamente e non dovresti preoccuparti


Cosa sono SSE4.2 e AVX?

Wikipedia ha una buona spiegazione su SSE4.2 e AVX . Questa conoscenza non è richiesta per essere brava nell'apprendimento automatico. È possibile pensarli come un insieme di alcune istruzioni aggiuntive per un computer per utilizzare più punti dati rispetto a una singola istruzione per eseguire operazioni che possono essere naturalmente parallelizzate (ad esempio aggiungendo due array).

Sia SSE che AVX sono l'implementazione di un'idea astratta di SIMD (istruzione singola, dati multipli), che è

una classe di computer paralleli nella tassonomia di Flynn. Descrive i computer con più elementi di elaborazione che eseguono la stessa operazione su più punti dati contemporaneamente. Pertanto, tali macchine sfruttano il parallelismo a livello di dati, ma non la concorrenza: esistono calcoli (paralleli) simultanei, ma solo un singolo processo (istruzione) in un dato momento

Questo è sufficiente per rispondere alla tua prossima domanda.


In che modo questi SSE4.2 e AVX possono migliorare i calcoli della CPU per le attività TF

Consentono un calcolo più efficiente di varie operazioni vettoriali (matrice / tensore). Puoi leggere di più in queste diapositive


Come compilare Tensorflow usando le due librerie?

È necessario disporre di un file binario che è stato compilato per trarre vantaggio da queste istruzioni. Il modo più semplice è compilarlo da soli . Come suggerito da Mike e Yaroslav, puoi usare il seguente comando bazel

bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.2 --config=cuda -k //tensorflow/tools/pip_package:build_pip_package


4
Cosa significa questa riga di comando? E dovrei installare bazelin questo caso?
YZ,

1
Qualcuno ha mai costruito sotto le finestre a 64 bit con MSYS2 o Visual Studio 2017 ommunity Edition? e puoi condividere i passaggi?
James Chang,

1
Questo pacchetto pip può essere installato in un ambiente conda sul computer locale?
dgketchum,

3
Dopo 3+ ore (tempo trascorso: 11984.258s) ho ottenuto FAILED: Build did NOT complete successfully. Compilarlo da soli non è così semplice.
imbrizi,

anch'io. Anche la mia compilazione non è riuscita e nei registri posso vedere che: cl: avviso da riga di comando D9002: ignorando l'opzione sconosciuta '-mavx' cl: avviso da riga di comando D9002: ignorando l'opzione sconosciuta '-mavx2' cl: avviso da riga di comando D9002: ignorando opzione sconosciuta '-mfma' cl: avviso riga di comando D9002: ignora opzione sconosciuta '-mfpmath = both' cl: avviso riga di comando D9002: ignora opzione sconosciuta '-msse4.2' cl: avviso riga di comando D9002: ignora opzione sconosciuta '- fno-strict-aliasing 'cl: avviso da riga di comando D9002: ignorando l'opzione sconosciuta' -fexceptions ', quindi queste opzioni non sono note
Shilan,

53

Lasciami rispondere prima alla tua terza domanda:

Se vuoi eseguire una versione autocompilata in un conda-env, puoi farlo. Queste sono le istruzioni generali che eseguo per far installare tensorflow sul mio sistema con istruzioni aggiuntive. Nota: questa build era per una build AMD A10-7850 (controlla la tua CPU per quali istruzioni sono supportate ... potrebbe differire) con Ubuntu 16.04 LTS. Uso Python 3.5 nel mio conda-env. Il merito va alla pagina di installazione della fonte tensorflow e alle risposte fornite sopra.

git clone https://github.com/tensorflow/tensorflow 
# Install Bazel
# https://bazel.build/versions/master/docs/install.html
sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel
# Create your virtual env with conda.
source activate YOUR_ENV
pip install six numpy wheel, packaging, appdir
# Follow the configure instructions at:
# https://www.tensorflow.org/install/install_sources
# Build your build like below. Note: Check what instructions your CPU 
# support. Also. If resources are limited consider adding the following 
# tag --local_resources 2048,.5,1.0 . This will limit how much ram many
# local resources are used but will increase time to compile.
bazel build -c opt --copt=-mavx --copt=-msse4.1 --copt=-msse4.2  -k //tensorflow/tools/pip_package:build_pip_package
# Create the wheel like so:
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
# Inside your conda env:
pip install /tmp/tensorflow_pkg/NAME_OF_WHEEL.whl
# Then install the rest of your stack
pip install keras jupyter etc. etc.

Per quanto riguarda la tua seconda domanda:

Una versione compilata con ottimizzazioni è valsa la pena secondo me. Nella mia configurazione particolare, i calcoli che impiegavano 560-600 secondi ora impiegano solo circa 300 secondi! Sebbene i numeri esatti possano variare, penso che ci si possa aspettare un aumento della velocità del 35-50% in generale sulla propria configurazione specifica.

Infine la tua prima domanda:

Molte delle risposte sono già state fornite sopra. Riassumendo: AVX , SSE4.1, SSE4.2 , MFA sono diversi tipi di set di istruzioni estese su CPU X86. Molti contengono istruzioni ottimizzate per l'elaborazione di operazioni a matrice o vettoriali.

Metterò in evidenza il mio malinteso per risparmiare un po 'di tempo: non è che SSE4.2 sia una versione più recente delle istruzioni che sostituiscono SSE4.1. SSE4 = SSE4.1 (un set di 47 istruzioni) + SSE4.2 (un set di 7 istruzioni).

Nel contesto della compilazione di tensorflow, se il tuo computer supporta AVX2 e AVX e SSE4.1 e SSE4.2, dovresti inserire tutti questi flag di ottimizzazione. Non fare come ho fatto io e andare con SSE4.2 pensando che è più recente e dovrebbe sostituire SSE4.1. È chiaramente SBAGLIATO! Ho dovuto ricompilare per quello che mi è costato 40 minuti buoni.


dove viene archiviato il file .whl perché voglio installarlo anche su Windows?
WiLL_K,

È memorizzato qui: / tmp / tensorflow_pkg (sul tuo disco Linux)
Thornhale

Puoi dirmi quanto tempo ci vorrà. Sono circa 2 ore e il mio laptop si è bloccato. È in esecuzione ububtu con 4 GB di RAM e un processore i5
WiLL_K

La compilazione di tensorflow richiede molto tempo. Sul mio laptop con 8 GB ci sono volute circa 1,5 ore. Tuttavia, i tempi di installazione possono variare e saranno fortemente influenzati dalla RAM disponibile. È noto che queste compilation richiedono molta RAM. Per ridurre i requisiti di risorse e forse prevenire i blocchi, è possibile eseguire la compilazione aggiungendo il seguente flag dopo "build bazel": --local_resources 2048, .5,1.0 Questo spesso aiuta con i blocchi ma probabilmente raddoppierà il tempo necessario per la compilazione. Ad esempio: su uno dei miei sistemi più veloci, la compilazione senza flag ha richiesto 2200 secondi, con flag 4500!
Thornhale,

1
In generale, ho scoperto che fare ML su Windows è un grande dolore alle spalle. Finisci per passare un sacco di tempo a cercare di far funzionare le cose che funzionano solo se lavori in un ambiente Linux. Credo che tensorflow debba essere compilato per ciascun sistema operativo. Inoltre, se vai qui: link , vedrai che tensorflow non è ufficialmente supportato. Esiste una guida su come compilare tensorflow per Windows qui: link . Anche se devo ammetterlo, non l'ho provato. Sto solo usando Ubuntu.
Thornhale,

25

Questi sono set di istruzioni per l'elaborazione vettoriale SIMD .

L'uso di istruzioni vettoriali è più veloce per molte attività; l'apprendimento automatico è un compito del genere.

Citando i documenti di installazione di tensorflow :

Per essere compatibile con la più ampia gamma possibile di macchine, TensorFlow utilizza automaticamente le istruzioni SIMD SSE4.1 su macchine x86. La maggior parte dei PC e Mac moderni supporta istruzioni più avanzate, quindi se stai costruendo un binario che --copt=-march=nativeeseguirai solo sulla tua macchina, puoi abilitarli usando il comando bazel build.


Perché il binario Tensorflow non utilizza il dispacciamento della CPU? È mal supportato da GCC?
Chris Pushbullet,

4
Il collegamento "documenti di installazione di tensorflow" non funziona. Quindi mi chiedo se questa risposta sia ancora valida. Si prega di rispondere!
Thornhale,

@ChrisPushbullet puoi compilare Tensorflow per supportare diverse capacità di calcolo per la GPU, ma aumentano molto le dimensioni binarie. La mia ipotesi è che lo stesso vale per la CPU.
Davidmh,

22

Grazie a tutte queste risposte + alcune prove ed errori, sono riuscito a installarlo su un Mac con clang. Quindi, solo condividendo la mia soluzione nel caso sia utile a qualcuno.

  1. Seguire le istruzioni sulla documentazione - Installazione di TensorFlow da fonti

  2. Quando richiesto

    Specificare i flag di ottimizzazione da utilizzare durante la compilazione quando viene specificata l'opzione bazel "--config = opt" [L'impostazione predefinita è -march = native]

quindi copia e incolla questa stringa:

-mavx -mavx2 -mfma -msse4.2

(L'opzione predefinita ha causato errori, così come alcune delle altre bandiere. Non ho riscontrato errori con le bandiere sopra. A proposito ho risposto na tutte le altre domande)

Dopo l'installazione, verifico uno speedup da ~ 2x a 2,5x durante l'allenamento di modelli profondi rispetto a un'altra installazione basata sulle ruote predefinite - Installazione di TensorFlow su macOS

Spero che sia d'aiuto


4
-march=nativedovrebbe essere ancora migliore se il compilatore lo supporta correttamente. Inoltre, imposta -mtune=nativebuone scelte di istruzione per la tua CPU. ad esempio su Haswell e versioni successive, disabilita -mavx256-split-unaligned-storee -mavx256-split-unaligned-load, che sono attivi per impostazione predefinita -mtune=generice danneggiano le prestazioni quando i dati non sono noti per essere allineati ma risultano essere in fase di esecuzione.
Peter Cordes,

1
Grazie! Nel mio caso ha -march=nativecausato un errore mentre le altre opzioni no. Forse è il compilatore specifico. Lo stavo condividendo proprio nel caso in cui altri sperimentassero lo stesso blocco stradale.
JARS

1
Quale errore? A meno che il sistema di compilazione non si blocchi su una stringa con =dentro, o che non si stia utilizzando gcco clang, dovrebbe funzionare. E -mtune=native -mavx2 -mfma funziona per te? Oppure -mtune=skylake? (O qualunque CPU tu abbia). A proposito, -mavx2implica -mavxe -msse4.2. Non fa male includerli tutti in una ricetta, e immagino che sia più facile per le persone lasciare fuori quelli che la loro CPU non supporta.
Peter Cordes,

1
Ho modificato la risposta principale su questa domanda qualche tempo fa, ma non uso tensorflow da solo. Se c'è qualcosa di sbagliato nel -march=nativesuo sistema di compilazione, mi piacerebbe saperlo. (E / o dovresti segnalarlo a monte in modo che possano correggere i loro script di build).
Peter Cordes,

1
Grazie mille per il suggerimento. Per verificarlo, ho rieseguito solo lo script .configure -march=nativee questo è l'errore: / Users / jose / Documents / code / tmptensorflow / tensorflow / tensorflow / core / BUILD: 1442: 1: compilazione C ++ di regola "// tensorflow / core: lib_internal_impl" non riuscita (uscita 1). Nel file incluso da tensorflow / core / platform / denormal.cc: 37: /Library/Developer/CommandLineTools/usr/bin/../lib/clang/7.0.2/include/pmmintrin.h:28:2: errore: "SSE3 set di istruzioni non abilitato" Messaggio # errore "set di istruzioni SSE3 non abilitato" utilizzando Apple LLVM versione 7.0.2 (clang-700.1.81)
VASI

7

L'ho installato di recente dalla fonte e sotto sono tutti i passaggi necessari per installarlo dalla fonte con le istruzioni menzionate disponibili.

Altre risposte descrivono già perché vengono visualizzati quei messaggi. La mia risposta fornisce una procedura dettagliata su come installare, il che può aiutare le persone a lottare per l'installazione reale come ho fatto io.

  1. Installa Bazel

Scaricalo da una delle loro versioni disponibili , ad esempio 0.5.2 . Estrarlo, andare nella directory e configurarlo: bash ./compile.sh. Copia l'eseguibile in /usr/local/bin:sudo cp ./output/bazel /usr/local/bin

  1. Installa Tensorflow

Clone tensorflow: git clone https://github.com/tensorflow/tensorflow.git vai alla directory clonata per configurarlo:./configure

Ti verrà chiesto con diverse domande, qui sotto ho suggerito la risposta a ciascuna delle domande, puoi ovviamente scegliere le tue risposte come preferisci:

Using python library path: /usr/local/lib/python2.7/dist-packages
Do you wish to build TensorFlow with MKL support? [y/N] y
MKL support will be enabled for TensorFlow
Do you wish to download MKL LIB from the web? [Y/n] Y
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: 
Do you wish to use jemalloc as the malloc implementation? [Y/n] n
jemalloc disabled
Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] N
No Google Cloud Platform support will be enabled for TensorFlow
Do you wish to build TensorFlow with Hadoop File System support? [y/N] N
No Hadoop File System support will be enabled for TensorFlow
Do you wish to build TensorFlow with the XLA just-in-time compiler (experimental)? [y/N] N
No XLA JIT support will be enabled for TensorFlow
Do you wish to build TensorFlow with VERBS support? [y/N] N
No VERBS support will be enabled for TensorFlow
Do you wish to build TensorFlow with OpenCL support? [y/N] N
No OpenCL support will be enabled for TensorFlow
Do you wish to build TensorFlow with CUDA support? [y/N] N
No CUDA support will be enabled for TensorFlow
  1. Il pacchetto pip. Per costruirlo devi descrivere quali istruzioni vuoi (sai, quelle Tensorflow hanno informato che ti sei perso).

Crea script pip: bazel build -c opt --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-mfpmath=both --copt=-msse4.1 --copt=-msse4.2 -k //tensorflow/tools/pip_package:build_pip_package

Crea pacchetto pip: bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

Installa il pacchetto pip Tensorflow che hai appena creato: sudo pip install /tmp/tensorflow_pkg/tensorflow-1.2.1-cp27-cp27mu-linux_x86_64.whl

Ora la prossima volta che avvierai Tensorflow non si lamenterà più delle istruzioni mancanti.


4
Costruire con solo -c opt --copt=-march=nativedovrebbe essere almeno buono come --copt=-mavx --copt=-mavx2 --copt=-mfma --copt=-msse4.1 --copt=-msse4.2. (Entrambi silenzieranno l'avvertimento, ma -march=nativepotrebbero rendere il codice ancora più veloce sintonizzandosi specificamente per la CPU sul sistema su cui stai costruendo). Nota anche che --copt=-mavx2 --copt=-mfmaimplica tutte le precedenti opzioni AVX e SSE, quindi questa lunga serie di opzioni è stata chiaramente scritta da qualcuno che non capisce le opzioni gcc.
Peter Cordes,

1
@PeterCordes, dai un'occhiata a questo problema ( github.com/tensorflow/tensorflow/issues/7449 ), anche i manutentori di bazel non erano assertivi sul motivo per cui march = native non funzionava come previsto. Dato che sembri "capire le opzioni di gcc", puoi probabilmente aiutarli a risolverlo, in quanto hanno segnalato il problema come "supporto della comunità".
Eduardo,

Grazie, darò un'occhiata ... Hmm, alcune persone dicono che --copt=-mavx2non ha funzionato. Se --copt=-mfma funziona, --copt=-march=nativedovrebbe funzionare, a meno che l'analisi del non =sia un problema. Per gcc / clang / icc, vuoi sicuramente che lo script build passi -march=nativealla fine al compilatore. Realizzare ciò tramite script di build diventa il trucco.
Peter Cordes,

7

Questo è il metodo più semplice. Solo un passo.

Ha un impatto significativo sulla velocità. Nel mio caso, il tempo impiegato per un passo di allenamento è quasi dimezzato.

Consulta le build personalizzate di tensorflow



@SreeraghAR Il tuo metodo ha declassato il mio tensorflow e keras.
KPMG,

Assicurati di installare il file corretto in base a TensorFlow, versioni di Python e HW.
Sreeragh, AR,

La TensFlowversione di @SreeraghAR è 1.10.0 e in uso MacOS Sierra. Aiutami a trovare il file.
KPMG,

Hmm .. Non riesco a trovarne uno corrispondente alle tue versioni. Qualcuno deve costruire una ruota personalizzata.github.com/yaroslavvb/tensorflow-community-wheels soluzione immediata potrebbe utilizzare tensorflow 1.9.0
Sreeragh AR


5

Per compilare TensorFlow con SSE4.2 e AVX, è possibile utilizzare direttamente

bazel build --config = mkl --config = "opt" --copt = "- march = broadwell" --copt = "- O3" // tensorflow / tools / pip_package: build_pip_package

Fonte: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker/Dockerfile.devel-cpu-mkl


1
Qualcosa è cambiato di recente? L'ultima volta che ho controllato --copt="-march=native"stava mangiando =. (E a proposito, quelle doppie virgolette non fanno nulla; saranno rimosse dalla shell prima di bazelvedere la tua riga di comando.)
Peter Cordes,

4

2.0 SOLUZIONE COMPATIBILE:

Eseguire i comandi seguenti in Terminale (Linux / MacOS) o nel Prompt dei comandi (Windows) per installare Tensorflow 2.0 utilizzando Bazel :

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow

#The repo defaults to the master development branch. You can also checkout a release branch to build:
git checkout r2.0

#Configure the Build => Use the Below line for Windows Machine
python ./configure.py 

#Configure the Build => Use the Below line for Linux/MacOS Machine
./configure
#This script prompts you for the location of TensorFlow dependencies and asks for additional build configuration options. 

#Build Tensorflow package

#CPU support
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package 

#GPU support
bazel build --config=opt --config=cuda --define=no_tensorflow_py_deps=true //tensorflow/tools/pip_package:build_pip_package

2
Quale parte di questo specifica -march=nativeo altre opzioni GCC / clang? Non vedo alcuna menzione di AVX, FMA o SSE4.2 in questo. (E lo script di build di Bazel o Tensorflow è ancora rotto in un modo in cui solo le opzioni -mavxfunzionano, no -march=native? Se è questo il problema nella risposta principale a questa domanda)
Peter Cordes,

per il supporto CPU con tf versione 2.1.0, l'opzione --config = opt non ha funzionato per me, l'ho risolto con --config = v2. Inoltre è bene ricordare che la versione di bazel giusta per costruirla è 29.0.
Tolik,

2

Quando costruisci TensorFlow dalla fonte, eseguirai lo configurescript. Una delle domande poste dallo configurescript è la seguente:

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]

Lo configurescript allega i flag specificati al comando bazel che crea il pacchetto pip TensorFlow. In linea di massima, è possibile rispondere a questa richiesta in due modi:

  • Se stai costruendo TensorFlow sullo stesso tipo di tipo di CPU di quello su cui eseguirai TensorFlow, allora dovresti accettare il default ( -march=native). Questa opzione ottimizzerà il codice generato per il tipo di CPU della tua macchina.
  • Se stai costruendo TensorFlow su un tipo di CPU ma eseguirai TensorFlow su un diverso tipo di CPU, allora considera di fornire un flag di ottimizzazione più specifico come descritto nella documentazione di gcc .

Dopo aver configurato TensorFlow come descritto nell'elenco puntato precedente, dovresti essere in grado di creare TensorFlow completamente ottimizzato per la CPU di destinazione semplicemente aggiungendo il --config=optflag a qualsiasi comando bazel che stai eseguendo.


-1

Per nascondere tali avvisi, è possibile farlo prima del codice effettivo.

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf

5
Funziona silenziosamente più lentamente di quanto potrebbe sul tuo hardware sembra una cattiva idea.
Peter Cordes,

Sono d'accordo con @Peter Cordes in generale, ma a volte è bello (in modo disciplinato e consapevole) nascondere gli avvisi e concentrarsi sul compito.
Westsider,

2
@westsider: sì, in alcuni casi potrebbe essere utile, ma questa non è una buona risposta se non indica le implicazioni: si perdono prestazioni reali se si nascondono solo gli avvisi invece di ricompilarli. (Tranne forse se stai usando una GPU per il sollevamento pesante, potrebbe comunque avvisare delle opzioni della CPU?)
Peter Cordes
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.