错误 #15:正在初始化libiomp5.dylib,但已发现libiomp5.dylib已初始化

106

使用matplotlib时出现错误信息:

Error #15: 初始化libiomp5.dylib时,但已找到已经初始化的libiomp5.dylib OMP:提示:这意味着将多个 OpenMP 运行时链接到程序中。这是危险的,因为它可能会降低性能或导致不正确的结果。最好的做法是确保只有一个 OpenMP 运行时链接到进程中,例如避免在任何库中静态链接 OpenMP 运行时。作为一种不安全、不支持、不文档化的解决方法,您可以设置环境变量 KMP_DUPLICATE_LIB_OK=TRUE,以允许程序继续执行,但可能会导致崩溃或悄然产生不正确的结果。有关更多信息,请参见http://www.intel.com/software/products/support/


2
当我按照这个教程 https://www.tensorflow.org/tutorials/keras/basic_classification 在我的 Mac 上操作时,出现了这个问题。 - JobHunter69
2
在跟随@Goldname提供的TensorFlow教程时,我遇到了这个问题。我已经注释掉了所有的plt命令,然后它就可以正常工作了,没有任何问题。 - Kshitij
4
我在OSX 12.3上使用matplotlib和pytorch时遇到了问题。在导入这两个库之前先导入sci-kit learn可以解决这个问题。我不知道原因。 - Finncent Price
这个问题能通过更新PyTorch来解决吗? - Charlie Parker
我不知道为什么,但“conda install nomkl”解决了我的问题...讨厌在我的项目中增加更多的依赖,但好吧。幸运的是,这个问题只出现在我的M1 Mac上,我不在那里运行实验 - 我在集群上运行它们,所以也许这不是一个大问题...? - Charlie Parker
16个回答

98

按照以下步骤解决问题:

import os

os.environ['KMP_DUPLICATE_LIB_OK']='True'

答案位于:https://github.com/dmlc/xgboost/issues/1715

请注意潜在的副作用:

但这可能会导致崩溃或产生错误的结果。


30
在macOS上这样做是否有任何证据能够避免“默默产生不正确的结果”,就像OpenMP开发人员所暗示的那样? - merv
6
这只是一种解决方法,而非完美的解决方案,可能会导致严重问题。针对macOS系统,conda版本的tensorflow存在缺陷。建议先将其移除,然后使用pip install tensorflow来直接重新安装。 - adroste
5
绝对不只有Mac电脑会出现这个问题……我在我的Windows 10电脑上也遇到了这个问题。 - rocksNwaves
1
@adroste,您能详细说明一下“严重”问题是什么吗?错误日志中只是含糊地提到了这一点,我不太确定它的具体含义。 - Matheus Felipe
这个问题能通过更新PyTorch来解决吗? - Charlie Parker
这里的所有解决方案只适用于 conda 环境。我在一个“普通”的 venv 环境中安装了通过 pip 安装的包,遇到了相同的问题。有没有针对这种情况的解决方案? - undefined

74

如果适用的话,这是一个更好的解决方案。否则,gcamargo的解决方案可能有效。但是请注意,“可能会导致崩溃或悄悄地产生不正确的结果”

我在使用numpy、keras和matplotlib编写python程序时,我的Mac出现了相同的错误。我通过执行以下命令解决了问题:

conda install nomkl

解答来源:https://github.com/dmlc/xgboost/issues/1715


在MacOS Catalina上是一个干净的救星 - vwvan
它在我的Win 11上工作了,但这个却没有:os.environ['KMP_DUPLICATE_LIB_OK']='True'。 - zgormez
这个问题能通过更新PyTorch来解决吗? - Charlie Parker
PyTorch与此软件包存在冲突,因此如果您的问题来自于PyTorch,则可能无法正常工作。 - jtb

64

我在 macOS 上遇到了同样的问题,并找到了以下原因:

问题:

我有一个 conda 环境,其中安装了 Numpy、SciPy 和 TensorFlow。

Conda 使用 Intel(R) MKL 优化,详见 文档

Anaconda 封装了一些最受欢迎的数值/科学 Python 库的使用 MKL 为基础的二进制版本,以实现更好的性能。

Intel MKL 函数(如 FFT、LAPACK、BLAS)使用 OpenMP 技术进行线程处理。

但是在 macOS 上不需要 MKL,因为 Accelerate 框架带有自己的优化算法并已经使用了 OpenMP。这就是出现错误消息的原因:OMP Error #15:...

解决方案:

您应该安装所有不带 MKL 支持的软件包:

conda install nomkl

然后使用

conda install numpy scipy pandas tensorflow

接着

conda remove mkl mkl-service

有关更多信息,请参见 conda MKL 优化


2
如果由于“UnsatisfiableError:以下规范...”而无法安装“nomkl”,则必须首先卸载所有这些规范。一种快速解决方案是卸载所有当前安装的软件包conda install --revision 0,然后按照J.E.K的答案继续操作。 - David
2
感谢您的回答,这应该是聊天室中得到最多赞的问题,因为它正确地解决了问题且性能没有受到影响。 - Nibor Ndj
这也解决了我在R中使用spacyr包的问题。与其让spacyr从R创建一个conda环境并安装spacy,我必须先在conda中创建一个新的spacy环境,然后安装nomkl,接着安装spacy,最后将spacyr指向该环境。 - thimic
1
对我来说,不需要使用 conda remove mkl mkl-service 命令。这个命令会移除一些包,比如 numpy 等等。我发现我可以省略这一步。谢谢! - Namgyu Ho
这个问题能通过更新PyTorch来解决吗? - Charlie Parker
显示剩余2条评论

11

在我安装了TensorFlow的conda环境中也遇到了同样的问题。在执行以下操作后:

  • pip uninstall tensorflow
  • pip install tensorflow

问题得以解决。


3
我也遇到了同样的问题,但是是在PyTorch上...按照这个想法解决了我的问题。谢谢。 - Jose Alberto Salazar
重新安装PyTorch并不能解决我的问题。 - Rafael
使用PyTorch时遇到了同样的问题,但令人惊讶的是卸载并重新安装TensorFlow解决了这个问题。 - Rm4n
这个问题能通过更新PyTorch来解决吗? - Charlie Parker

10

对我来说,当我在导入numpy之后导入pytorch时,出现了这个问题。按照以下顺序导入它们可以解决我的问题:

import torch
import numpy as np

从他们的渠道安装pytorch:conda install pytorch torchvision torchaudio -c pytorch - Mahdi Amrollahi

5

在更新tensorflow到1.13时,使用conda在OSX上出现了相同的问题。

  • 解决方法1:/gcamargo能够解决问题,但每个训练周期速度变慢3倍。
  • 解决方法2:/sjcoding可行且消除了严重的警告,但训练速度也变慢了3倍。
  • 恢复性能的解决方法是:在新的conda环境中安装pip,并使用pip安装tensorflow。使用conda-forge也起作用,但tf版本较旧。

显然,在Anaconda中的新Intel-MKL优化对于OSX tensorflow来说有问题。


在执行了 conda remove tensorflowpip install tensorflow 后,conda install keras 想要重新安装 conda 版本的 tensorflow。你是否使用 pip 安装了任何需要 tensorflow 的东西,以避免获取 conda 版本? - dgrogan
使用pip而非conda安装时,我遇到了这个问题:“您的CPU支持的指令无法用于此TensorFlow二进制文件编译:AVX2 FMA”。看起来这个问题已经解决了。 - targetXING
1
对我来说,使用conda-forge安装TensorFlow并不能解决这个问题。 - R. Yang
这是正确的答案。Conda安装了一个有问题的tensorflow版本。只需要使用pip来安装它即可。 - adroste
是的,使用 pip3 uninstall tensorflowpip3 install tensorflow 就解决了问题。 - strivn
这对我有用。我执行了 conda remove tensorflow 然后执行了 pip install tensorflow==2.2 - loco.loop

2

我正在使用Macbook M1,遇到了同样的问题。在我的conda环境中,通过以下命令删除mkl包后,我解决了这个问题:

conda remove mkl

这个问题的原因是因为 mkl 是为英特尔用户开发的,而我的许多软件包都来自于 mkl。当您删除这个软件包后,您将需要重新安装通过 mkl 使用的许多软件包。此外,在我的情况下,当我尝试安装 pandas 时,出现了依赖问题。我使用以下命令更新所有 conda 软件包后,也解决了这个问题:
conda update --all

这是一个有用的链接,帮助我理解了这个问题:


2

检查您的环境(anaconda)中是否有mkl软件包的更新。

我能够通过更新mkl简单地解决我的问题。

conda install -c intel mkl

(macOS Catalina 10.15.5)


1
面对相同的错误#15,尽管有帮助,但迄今为止(2021年2月5日),没有一个解决方案完全奏效。然而,我成功解决了它,同时避免了以下操作:与dylib库混淆、从源代码安装或设置环境变量KMP_DUPLICATE_LIB_OK=TRUE及其不安全、不受支持和未经记录的解决方法以及其可能引起的“崩溃或默默产生错误结果”。
问题在于conda无法捕捉到非mkl版本的tensorflow(v2.0.0),尽管加载了nomkl包。最终使此解决方案奏效的是:
  • 确保我从defaults渠道(即从具有非mkl版本tensorflow的渠道)加载软件包。截至2021年2月5日,conda-forge没有2.0或更高版本的tensorflow。
  • 指定我想要的tensorflow版本的精确构建:tensorflow>=2.*=eigen_py37h153756e_0。如果没有这个,尽管也加载了nomkl包,conda仍会加载mkl_...版本的软件包。
我使用以下 environment.yml 文件创建了一个 conda 环境(根据 conda 管理环境的文档):
name: tf_nomkl
channels:
  - conda-forge
  - defaults
dependencies:
  - nomkl
  - python>=3.7
  - numpy
  - scipy
  - pandas
  - jupyter
  - jupyterlab
  - nb_conda
  - nb_conda_kernels
  - ipykernel
  - pathlib
  - matplotlib
  - seaborn
  - tensorflow>=2.*=eigen_py37h153756e_0

你可以尝试不使用 environment.yml 文件进行相同操作,但如果可能的话,最好一次性在环境中加载所有所需包。 此解决方案适用于 MacOS Big Sur v11.1。

1

因此,对于那些遇到lightgbm相同问题的人,我在文档中发现您可以:

  1. pip uninstall lightgbm
  2. pip install lightgbm
  3. 如果您正在运行Conda,请在anaconda环境中运行以下内容
ln -sf `ls -d "$(brew --cellar libomp)"/*/lib`/* $CONDA_PREFIX/lib

这三件事对我很有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接