英特尔MKL致命错误:无法加载libmkl_avx2.so或libmkl_def.so

时间:2016-04-16 02:17:52

标签: python anaconda intel-mkl

我正在运行python脚本,我收到此错误:

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

两个文件都存在于anaconda2 / lib目录中。我该如何解决这个错误?谢谢。

12 个答案:

答案 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)

遇到同样的问题并使用命令解决:

conda install nomkl

我从这次讨论得到了解决方案https://github.com/BVLC/caffe/issues/3884

答案 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