我正在运行python脚本,我收到此错误:
Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so.
两个文件都存在于anaconda2 / lib目录中。我该如何解决这个错误?谢谢。
答案 0 :(得分:96)
如果您使用conda,请尝试使用以下两个命令:
conda install nomkl numpy scipy scikit-learn numexpr
conda remove mkl mkl-service
应该解决你的问题。
答案 1 :(得分:33)
我在安装anaconda3(vesion 4.2.0)后遇到了这个问题。对我的修复很简单,我能够继续使用mkl。只需更新到最新的numpy版本。
conda update numpy
答案 2 :(得分:14)
只是想注意默认启用mkl附带的Anaconda 4.0.0存在此问题。 问题确实在于Anaconda,因为它可以通过下面的简单python测试进行复制。
实际问题是Anaconda与mkl链接,但与libmkl_core.so没有关联,因此它有一个缺少的符号,可以通过运行来看到:
$ 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)
我不想卸载mkl,因为我希望提高性能,所以我找到了一个对我有用的解决方法 - 在执行之前预加载libmkl_core.so。
$ 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'
$
答案 3 :(得分:4)
答案 4 :(得分:3)
我在运行MLPRegressor时使用scikit-learn 0.19和numpy 1.13.3也有同样的问题(还有一个名为pyearth的程序包运行一个名为MARS的算法)。我相信问题的根源在于我们的python是Anaconda安装的一部分,但scikit-learn和numpy是通过pip安装的,他们对mkl的期望一定不同意。
不幸的是,我的框架由一些专门的公司管理员管理,而不是由我管理,所以我还没有让我的家伙尝试重新编译numpy。但我能够根据this thread找到解决方法:将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
添加到~/.bashrc
会导致问题消失。这是超级hacky,如果我说我确切地知道它正在做什么(but this is helpful),我会说谎,所以我希望重新编译numpy是一个更清洁的修复。但至少它有效。
请注意,使用mkl的这些软件包的版本在性能方面更好。安装nomkl版本是一种解决方法,但不是真正的解决方案。
答案 5 :(得分:1)
想要加上Valilutzik和Zaikun Xu的主题。我无法添加评论,因为我还没有足够的分数
conda install nomkl numpy scipy scikit-learn numexpr
为我工作,无需删除mkl和mkl-service。
如果nomkl
速度较慢,请在Lee的问题中添加答案:
mkl是一个英特尔数学内核库,针对intel cpus进行了手动优化。 nomkl根据这个使用OpenBlas:https://docs.continuum.io/mkl-optimizations/
看来mkl在intel cpus的许多矩阵运算上要快得多(参见https://software.intel.com/en-us/articles/performance-comparison-of-openblas-and-intel-math-kernel-library-in-r)
我见过有人说nomkl对于AMD cpus更快(可能是因为mkl在AMD中无法正常工作?)
答案 6 :(得分:1)
上面提供的所有解决方案对我都不起作用,但我找到了一个很好的妥协方案:
对于有相同错误且希望将Anaconda保留在他的计算机上的人,钢铁使用mkl(numpy和scipy)良好的过程性能,我建议的解决方案:
修改您的.bashrc
文件。
在文件中查找类似export PATH="/home/anaconda2/bin:$PATH"
的内容。
在开头放一个#
来对脚本进行评论:
#export PATH="/home/anaconda2/bin:$PATH"
打开一个新终端,你应该运行基础python安装。
它对我有用,希望它会有所帮助。
答案 7 :(得分:1)
如果有人遇到类似的问题,并且收到错误 libmkl_p4m.so或libmkl_p4.so ,则在调用某些numpy函数时会发生这种情况,我尝试重新安装/更新不同的python模块并恢复/更新到各种版本的Anaconda,但都没有工作。 但是我发现完全卸载anaconda并重新安装它(到4.4.10版本)解决了这个问题。
答案 8 :(得分:0)
以下内容对我有用
conda install -f numpy
答案 9 :(得分:0)
以上所有答案均不适用于我。以我为例,在OP的问题下面@ Nehal J Wani
的注释导致了解决方案:如链接的Intel support document中所述,可以使用单个动态库链接到MKL。
在编辑项目的Makefile以替换以下库之后
-lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core
与
-lmkl_rt
,然后重新构建,错误消失了。
答案 10 :(得分:0)
尝试export LD_DEBUG=libs
,然后再次执行程序。
它将告诉您哪个.so
引起了问题。
然后您可以执行某些操作,例如升级软件包。
对我来说,我发现升级numexpr
很有用,因为它会在错误之前打印以下消息:
calling init: xxxxx/python3.6/site-packages/numexpr/interpreter.cpython-36m-x86_64-linux-gnu.so
答案 11 :(得分:0)
很有可能您正在不存在的文件夹中运行Python。
解决方案就是直接转到另一个文件夹。
看到这个问题:sh: 0: getcwd() failed: No such file or directory on cited drive