web-dev-qa-db-fra.com

Intel MKL FATAL ERROR: Impossible de charger libmkl_avx2.so ou libmkl_def.so

J'exécute un script python et j'obtiens cette erreur: 

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

Les deux fichiers sont présents dans le répertoire anaconda2/lib. Comment puis-je réparer cette erreur? Merci. 

46
Chris Parry

Si vous utilisez conda, essayez ces deux commandes:

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

Cela devrait régler votre problème.

93
Zaikun Xu

J'ai rencontré ce problème après avoir installé anaconda3 (version 4.2.0). La solution pour moi était simple et je pouvais continuer à utiliser mkl. Il suffit de mettre à jour à la dernière version de Numpy.

conda update numpy
33
Drew Swartz

Je voulais juste noter que Anaconda 4.0.0, livré avec mkl activé par défaut, présente ce problème . Le problème est bien lié à Anaconda, car il peut être reproduit avec le simple test python ci-dessous.

Le problème réel est que Anaconda est lié à mkl, mais pas à libmkl_core.so. Il a donc un symbole manquant et peut être vu en lançant:

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

Je ne voulais pas désinstaller mkl, car j'aimerais améliorer les performances. J'ai donc trouvé une solution de contournement qui fonctionnait pour moi: précharger libmkl_core.so avant l'exécution.

$ 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'
$
13
yanir

Vous avez le même problème et résolu en utilisant la commande:

conda install nomkl

J'ai eu la solution de cette discussion https://github.com/BVLC/caffe/issues/3884

4
Masud

J'ai eu le même problème en utilisant scikit-learn 0.19 et numpy 1.13.3 lors de l'exécution de MLPRegressor (et également avec un package appelé pyearth exécutant un algorithme appelé MARS). Je crois que la racine du problème est que notre python fait partie d’une installation Anaconda, mais scikit-learn et numpy ont été installés via pip, et leurs attentes pour mkl ne doivent pas s’accorder.

Malheureusement, mon framework est géré par des administrateurs dédiés de la société, et non par moi. Je n'ai donc pas encore demandé à mon gars d'essayer de recompiler numpy. Mais j'ai pu trouver une solution de contournement basée sur ce fil de discussion : L'ajout de 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 à mon ~/.bashrc entraîne la disparition du problème. C'est super hacky, et je mentirais si je disais que je sais exactement ce que ça fait ( mais c'est utile ), alors j'espère qu'une recompilation de numpy est une solution plus propre. Mais au moins ça marche.

Notez qu'il est préférable en termes de performances d’avoir les versions de ces packages qui utilisent mkl. Installer les versions de nomkl est une solution de contournement mais pas une vraie solution.

3
Pavel Komarov

Toutes les solutions proposées ci-dessus n'ont pas fonctionné pour moi, mais j'ai trouvé un bon compromis:

pour quelqu'un qui a la même erreur et veut garder Anaconda sur son ordinateur, et l'acier utilise mkl pour (numpy et scipy) une bonne performance de processus, la solution que je propose:

Editez votre fichier .bashrc.

Cherchez quelque chose comme export PATH="/home/anaconda2/bin:$PATH" dans le fichier.

Mettez un # au début pour le commenter à partir du script: #export PATH="/home/anaconda2/bin:$PATH"

Ouvrez un nouveau terminal et vous devriez exécuter l'installation de base Python.

Cela a fonctionné pour moi, espérons que ce sera utile.

1
Klipiklop

Je voulais ajouter sur le fil de Valilutzik et Zaikun Xu. Je ne peux pas ajouter de commentaires car je n'ai pas encore assez de points.
conda install nomkl numpy scipy scikit-learn numexpr a travaillé pour moi sans avoir à supprimer mkl et mkl-service.

Ajouter une réponse à la question de Lee si nomkl sera plus lent: Mkl est une bibliothèque de noyau mathématique Intel et est optimisée manuellement pour les processeurs Intel. nomkl utilise OpenBlas selon ceci: https://docs.continuum.io/mkl-optimizations/ Il semble que mkl soit assez rapide sur de nombreuses opérations matricielles pour les processeurs Intel (voir https: // software.intel.com/en-us/articles/performance-comparison-of-openblas-and-intel-math-kernel-library-in-r )
J'ai vu quelqu'un dire que nomkl est plus rapide pour les processeurs AMD (peut-être parce que mkl ne fonctionne pas correctement sous AMD?)

1
libphy

Si quelqu'un a un problème similar et obtient des erreurs qui libmkl_p4m.so ou libmkl_p4.so ne peuvent pas être trouvées (cela m'est arrivé lors de l'appel de certaines fonctions numpy), j'ai essayé de réinstaller/mettre à jour différents python modules et retour/mise à jour vers diverses versions d’Anaconda, et aucun d’entre eux n’a fonctionné ..__ Cependant, j’ai constaté que désinstaller complètement Anaconda et de le réinstaller (vers la version 4.4.10) permettait de résoudre le problème.

0
KamKam