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

Chr*_*rry 51 python intel-mkl anaconda

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

Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so.
Run Code Online (Sandbox Code Playgroud)

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

小智 100

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

conda install nomkl numpy scipy scikit-learn numexpr
conda remove mkl mkl-service
Run Code Online (Sandbox Code Playgroud)

它应该解决你的问题.

  • 你是怎么知道这个的?你是天才之神. (9认同)
  • `nomkl`版本会慢一点? (8认同)
  • 可笑的晦涩和乐于助人. (7认同)
  • 免了我很多痛苦。谢谢 !! (2认同)
  • 删除MKL会对性能造成多大影响? (2认同)

小智 35

我在安装anaconda3(vesion 4.2.0)后遇到了这个问题.对我的修复很简单,我能够继续使用mkl.只需更新到最新的numpy版本.

conda update numpy
Run Code Online (Sandbox Code Playgroud)


小智 16

只是想注意默认启用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)
Run Code Online (Sandbox Code Playgroud)

我不想卸载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'
$
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你 - 一旦我添加了第二个库,它对我有用:`LD_PRELOAD = $ CONDA_PREFIX/lib/libmkl_core.so:$ CONDA_PREFIX/lib/libmkl_sequential.so python ...`. (4认同)

Pav*_*rov 6

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

不幸的是,我的框架由一些专门的公司管理员管理,而不是由我管理,所以我还没有让我的人尝试重新编译 numpy。但是我能够找到基于此线程的解决方法:添加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,如果我说我确切地知道它在做什么(但这很有帮助),我会撒谎,所以我希望重新编译numpy是一个更清晰的修复。但至少它有效。

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


小智 5

使用以下命令也遇到了相同的问题并已解决:

conda install nomkl

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