2016-04-16 21 views
29

sto eseguendo uno script python e ottengo questo errore:Intel MKL FATAL ERROR: Impossibile caricare libmkl_avx2.so o libmkl_def.so

Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so. 

Entrambi i file sono presenti nella directory anaconda2/lib. Come posso risolvere questo errore? Grazie.

+0

https://software.intel.com/en-us/articles/a-new-linking-model-single-dynamic-library-mkl_rt-since-intel-mkl-103 –

risposta

62

Se si utilizza Conda, tenta con questi due comandi:

conda install nomkl numpy scipy scikit-learn numexpr 
conda remove mkl mkl-service 

Dovrebbe risolvere il problema.

+6

le versioni 'nomkl' saranno Più lentamente? – Lee

+4

come lo sapevi! ?? sei un dio geniale. – RSHAP

+5

Ridicolmente oscuro e utile. –

10

Volevo solo notare che Anaconda 4.0.0, fornito con mkl abilitato di default, presenta questo problema. Il problema è effettivamente con Anaconda, in quanto può essere riprodotto con il semplice test di python qui sotto.

Il problema reale è che Anaconda legata MKL, ma non con libmkl_core.so, quindi ha un simbolo mancante, e può essere visto eseguendo:

$ LD_DEBUG=symbols python -c 'import sklearn.linear_model.tests.test_randomized_l1' 2>&1 | grep -i error 
     2200:  /opt/anaconda/lib/python2.7/site-packages/scipy/special/../../../../libmkl_avx.so: error: symbol lookup error: undefined symbol: mkl_dft_fft_fix_twiddle_table_32f (fatal) 

non volevo disinstallare mkl , dato che mi piacerebbe avere l'aumento delle prestazioni, così ho trovato una soluzione che ha funzionato per me: pre-caricare libmkl_core.so prima dell'esecuzione.

$ python -c 'import sklearn.linear_model.tests.test_randomized_l1' 
Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.so. 
$ 
$ LD_PRELOAD=/opt/anaconda/lib/libmkl_core.so python -c 'import sklearn.linear_model.tests.test_randomized_l1' 
$ 
+0

La vera buona spiegazione della causa, e la soluzione ha senso, perché MKL è un compilatore nativo di Intel, e ben noto per avere prestazioni migliori di GCC. Sì, la disinstallazione mi ha dato più problemi. –

+0

Grazie per questo - ha funzionato per me una volta aggiunta una seconda libreria: 'LD_PRELOAD = $ CONDA_PREFIX/lib/libmkl_core.so: $ CONDA_PREFIX/lib/libmkl_sequential.so python ...'. –

22

Ho riscontrato questo problema dopo aver installato anaconda3 (versione 4.2.0). La soluzione per me era semplice e potevo continuare a usare mkl. Basta aggiornare all'ultima versione numpy.

conda update numpy 
+0

Ha funzionato con 'anaconda2' (conda versione 4.3.16) pure. –

+0

Successo da anaconda2 versione 4.3.14. Vedi anche qui https://github.com/ContinuumIO/anaconda-issues/issues/720 per alcune informazioni su questa correzione: prova a reinstallare numpy con 'conda install -f numpy' prima di rimuovere mkl. – Jason

+0

Solo 'conda install -f numpy' ha funzionato per me (senza dover rimuovere mkl) – Ansari

0

Volevo aggiungere il thread di Valilutzik e Zaikun Xu. Non posso aggiungere commenti poiché non ho ancora abbastanza punti.
conda install nomkl numpy scipy scikit-learn numexpr ha funzionato per me senza dover rimuovere mkl e mkl-service.

Aggiungere una risposta alla domanda di Lee se nomkl sarà più lento: mkl è una libreria del kernel matematico Intel ed è ottimizzata a mano per cpus intel. nomkl utilizza OpenBlas in base a questo: https://docs.continuum.io/mkl-optimizations/ Sembra che mkl sia molto più veloce su molte operazioni di matrice per cpus intel (vedere https://software.intel.com/en-us/articles/performance-comparison-of-openblas-and-intel-math-kernel-library-in-r)
Ho visto qualcuno dire nomkl è più veloce per cpu AMD (forse perché mkl non funziona correttamente ? in AMD)

1

Tutte le soluzioni fornite sopra non ha funzionato per me, ma ho trovato un buon compromesso:

per qualcuno che ha lo stesso errore e vogliono è mantenere Anaconda sul suo computer, e l'uso di acciaio mkl per (numpy e scipy) buone prestazioni di processo, la soluzione che propongo:

Modifica y il nostro file .bashrc.

Cerca qualcosa come export PATH="/home/anaconda2/bin:$PATH" nel file.

mettere un # all'inizio di commentare dalla sceneggiatura: #export PATH="/home/anaconda2/bin:$PATH"

Aprire un nuovo terminale e si dovrebbe essere in esecuzione l'installazione di base pitone.

Ha funzionato per me, spero che sarà utile.

+0

L'ho fatto in questo modo -' export PATH = "/ home/akshay/anaconda2/pkgs/mkl-2017.0.1-0/lib: $ PATH "' –

0

Ho avuto questo stesso problema utilizzando scikit-learn 0,19 e NumPy 1.13. 3 quando si esegue MLPRegressor (e anche con un pacchetto chiamato pyearth che esegue un algoritmo chiamato MARS). Credo che la radice del problema fosse che il nostro python fa parte di un'installazione di Anaconda, ma scikit-learn e numpy sono stati installati tramite pip, e le loro aspettative per mkl non devono essere d'accordo.

Purtroppo il mio framework è gestito da alcuni amministratori di società dedicati, non da me, quindi non ho ancora ottenuto il mio ragazzo per provare a ricompilare ancora. Ma sono riuscito a trovare una soluzione alternativa basata su this thread: l'aggiunta di export LD_PRELOAD=/path/to/anaconda/lib/libmkl_def.so:/path/to/anaconda/lib/libmkl_avx.so:/path/to/anaconda/lib/libmkl_core.so:/path/to/anaconda/lib/libmkl_intel_lp64.so:/path/to/anaconda/lib/libmkl_intel_thread.so:/path/to/anaconda/lib/libiomp5.so al mio ~/.bashrc causa la scomparsa del problema. È super hacky e mentirei se dicessi di sapere esattamente cosa sta facendo (but this is helpful), quindi spero che una ricompilazione di Numpy sia una soluzione più pulita. Ma almeno funziona.

Nota è meglio avere le versioni di questi pacchetti che utilizzano mkl. L'installazione delle versioni nomkl è una soluzione, ma non una vera soluzione.