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

时间:2018-10-26 18:20:17

标签: python macos matplotlib

使用matplotlib时获取错误消息:

  

错误#15:初始化libiomp5.dylib,但发现libiomp5.dylib   已经初始化       OMP:提示:这意味着OpenMP运行时的多个副本已链接到程序中。这很危险,因为它可以   降低性能或导致错误结果。最好的事情   是为了确保只有一个OpenMP运行时链接到   过程,例如通过避免在任何情况下静态链接OpenMP运行时   图书馆。作为不安全,不受支持,未记录的解决方法,您可以   设置环境变量KMP_DUPLICATE_LIB_OK = TRUE以允许   程序继续执行,但可能会导致崩溃或无提示   产生不正确的结果。有关更多信息,请参见   http://www.intel.com/software/products/support/

10 个答案:

答案 0 :(得分:28)

这似乎是MacOS问题。请执行以下操作以解决该问题:

import os

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

https://github.com/dmlc/xgboost/issues/1715

找到答案

答案 1 :(得分:6)

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

问题:

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

Conda正在使用英特尔®MKL优化,请参阅docs

  

Anaconda已将一些最受欢迎的数字/科学Python库的MKL驱动的二进制版本打包到MKL Optimizations中,以提高性能。

英特尔MKL功能(例如FFT,LAPACK,BLAS)采用OpenMP技术。

但是在macOS上,您不需要MKL,因为Accelerate Framework附带了自己的优化算法,并且已经在使用OpenMP。这就是错误消息的原因: private void btnDeal_Click(object sender, EventArgs e) { delear.Deal(player, 2); //gets the file paths of the pictures used to load images into picture boxes foreach (KeyValuePair<string, int> entry in player.GetCardRankSuit()) { CreateControlsPlayer(entry.Key, entry.Value, pnlPlayer); } }

解决方法

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

OMP Error #15: ...

然后使用

conda install nomkl

之后

conda install numpy scipy pandas tensorflow

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

答案 2 :(得分:5)

这是一个更好的解决方案(如果适用)。否则,gcamargo的解决方案很可能会起作用。但是,它带有警告“可能会导致崩溃或以静默方式产生不正确的结果”

我在使用numpy,keras和matplotlib的python程序在Mac上遇到了相同的错误。我用

解决了

conda install nomkl

https://github.com/dmlc/xgboost/issues/1715

找到答案

答案 3 :(得分:2)

使用conda将tensoflow更新为1.13时,在OSX中出现相同的问题。

  • 解决方案1:/ gcamargo可以工作,但每个训练时期的速度要慢3倍。
  • 解决方案2:/ sjcoding起作用并消除了严重的警告,但也消除了3倍 训练较慢。
  • 解决方案3:恢复的性能是:在新的conda中安装pip env并使用pip安装tensorflow。使用conda-forge也可以 但是tf的版本太旧了。

显然,对于OSX张量流,Anaconda中新的Intel-MKL优化已被破坏。

答案 4 :(得分:1)

因此,对于那些在lightgbm上遇到同样问题的人,我在the documentation中发现可以

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

这三件事对我有用。

答案 5 :(得分:1)

在安装TensorFlow的conda环境中,我遇到了同样的问题。

  • pip uninstall tensorflow
  • pip install tensorflow

问题消失了。

答案 6 :(得分:1)

尝试更改matplotlib的后端。

例如,在我的情况下,Tkagg后端会导致此问题。我将其更改为Qt5Agg

matplotlib.use('Qt5Agg') 

它有帮助。

答案 7 :(得分:1)

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

我只需更新mkl就可以解决我的情况。

conda install -c intel mkl

(macOS Catalina 10.15.5)

答案 8 :(得分:0)

conda install --revision 0不能为我解决UnsatisfiableError: The following specifications...。因此,我在Anaconda-Navigator环境中手动安装了nomkl并删除了mklmil-service,它对我来说非常有用!

答案 9 :(得分:0)

面对相同的错误 #15,尽管有帮助,但迄今为止(2021 年 2 月 5 日)没有一个解决方案完全有效。但是,我确实设法解决了它,同时避免了:使用 dylib 库抖动、从源代码安装或设置环境变量 KMP_DUPLICATE_LIB_OK=TRUE 及其作为“不安全、不受支持、未记录的解决方法”的缺点及其潜在的“崩溃或默默地产生不正确的结果”。

问题在于,尽管加载了 nomkl 包,但 conda 并未获取 tensorflow (v2.0.0) 的非 mkl 构建。最终使该解决方案起作用的是:

  • 确保我是从 defaults 通道加载包(即从具有非 mkl 版本的 tensorflow 的通道。截至 2021 年 2 月 5 日,conda-forge 没有 2.0 或 更大)。
  • 指定我想要的 tensorflow 版本的精确构建:tensorflow>=2.*=eigen_py37h153756e_0。如果没有这个,conda 会继续加载 mkl_... 版本的包,尽管 nomkl 包也被加载。

我使用以下 environment.yml 文件(根据 conda documentation for managing environments)创建了一个 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。