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

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

我是 运行 一个 python 脚本,我得到了这个错误:

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

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

如果您使用 conda,请尝试使用这两个命令:

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

它应该可以解决您的问题。

只是想注意默认情况下启用 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'
$

我运行在安装anaconda3(版本4.2.0)后遇到这个问题。对我来说修复很简单,我可以继续使用 mkl。只需更新到最新的 numpy 版本。

conda update numpy

想补充 Valilutzik 和 Zaikun Xu 的帖子。我还没有足够的积分,无法添加评论。
conda install nomkl numpy scipy scikit-learn numexpr 无需删除 mkl 和 mkl-service 即可为我工作。

如果 nomkl 会变慢,则添加 Lee 问题的答案: mkl 是英特尔数学内核库,针对英特尔 CPU 进行了手动优化。 nomkl 根据这个使用 OpenBlas:https://docs.continuum.io/mkl-optimizations/ 似乎 mkl 在英特尔 cpus 的许多矩阵运算上要快得多(参见 https://software.intel.com/en-us/articles/performance-comparison-of-openblas-and-intel-math-kernel-library-in-r
我看到有人说 nomkl 对于 AMD cpus 更快(可能是因为 mkl 在 AMD 中不能正常工作?)

上面提供的所有解决方案都不适合我,但我找到了一个很好的折衷方案:

对于有同样错误并希望将 Anaconda 保留在他的计算机上并且 steel 使用 mkl 以获得(numpy 和 scipy)良好进程性能的人,我建议的解决方案:

编辑您的 .bashrc 文件。

在文件中查找类似 export PATH="/home/anaconda2/bin:$PATH" 的内容。

在开头加上一个#,以便从脚本中对其进行注释: #export PATH="/home/anaconda2/bin:$PATH"

打开一个新的终端,你应该运行基础python安装。

对我有用,希望对你有帮助。

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

conda install nomkl

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

我在使用 scikit-learn 0.19 和 numpy 1.13.3 时遇到了同样的问题 运行 MLPRegressor(还有一个叫做 pyearth 的包 运行 一个叫做 MARS 的算法)。我认为问题的根源在于我们的 python 是 Anaconda 安装的一部分,但 scikit-learn 和 numpy 是通过 pip 安装的,他们对 mkl 的期望一定不一致。

不幸的是,我的框架是由一些专门的公司管理员管理的,而不是由我管理的,所以我还没有让我的人尝试重新编译 numpy。但我能够找到基于 this thread: Adding 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 to my ~/.bashrc causes the problem to disappear. It's super hacky, and I'd be lying if I said I knew exactly what it's doing (but this is helpful) 的解决方法,所以我希望重新编译 numpy 是一个更清晰的修复。但至少它有效。

请注意,使用 mkl 的这些软件包的版本在性能方面会更好。安装 nomkl 版本是一种解决方法,但不是真正的解决方案。

万一有人遇到类似的问题并得到无法找到libmkl_p4m.so或libmkl_p4.so的错误(这发生在我调用某些 numpy 函数时),我尝试重新安装/更新不同的 python 模块并恢复/更新到各种版本的 Anaconda,但都没有用。 但是我发现完全卸载 anaconda 并重新安装它(到版本 4.4.10)解决了这个问题。

以下对我有用

conda install  -f  numpy

None 以上答案对我有用。就我而言,@Nehal J Wani 在 OP 问题下方的评论导致了解决方案:如 linked Intel support document 中所述,单个动态库可用于 link 到 MKL.

编辑项目的 Makefile 以替换以下库后 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core-lmkl_rt 并重新构建,错误消失。

尝试 export LD_DEBUG=libs 并再次执行您的程序。

它会告诉您哪个 .so 导致了问题。

然后你可以做点什么,例如升级包。

对我来说,我发现升级 numexpr 很有用,因为它会在错误之前打印以下消息:

calling init: xxxxx/python3.6/site-packages/numexpr/interpreter.cpython-36m-x86_64-linux-gnu.so

也有可能您 运行 Python 在一个不存在的文件夹中。

解决办法就是转到另一个文件夹。

看到这个问题:sh: 0: getcwd() failed: No such file or directory on cited drive

对我来说,降级 mkl 解决了它:

conda install mkl=2021.2.0

(Ubuntu 21.04, Python 3.8)

通过重新安装解决: pip 安装 tensorflow