【问题标题】:OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initializedOMP:错误 #15:正在初始化 libiomp5.dylib,但发现 libiomp5.dylib 已初始化
【发布时间】:2019-05-07 23:48:51
【问题描述】:

我正在尝试运行一个测试程序来检查我的 Anaconda 环境是否配置正确。但是,当我运行我的测试程序时,我会在程序设置图表时收到此错误消息(准确地说是on_train_end() 回调):

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

我正在安装 macOS Mojave 10.14.1 的 MacBook Pro 15" 2015 上运行测试程序。我目前安装的 Anaconda 发行版是 https://repo.anaconda.com/archive/Anaconda2-5.3.0-MacOSX-x86_64.sh

这是测试程序:

#!/usr/bin/env python

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

from tensorflow import keras

Xs = np.array([
    [0, 0],
    [0, 1],
    [1, 1],
    [1, 0]
])

Ys = np.array([
    [0],
    [1],
    [0],
    [1]
])

class MyCallback(keras.callbacks.Callback):
    def __init__(self):
        super(MyCallback, self).__init__()
        self.stats = []

    def on_epoch_end(self, epoch, logs=None):
        self.stats.append({
            'loss': logs['loss'],
            'acc': logs['acc'],
            'epoch': epoch
        })

    def on_train_end(self, logs=None):
        loss_x = []
        loss_y = []
        acc_x = []
        acc_y = []
        for e in self.stats:
            loss_x.append(e['epoch'])
            loss_y.append(e['loss'])
            acc_x.append(e['epoch'])
            acc_y.append(e['acc'])
        plt.plot(loss_x, loss_y, 'r', label='Loss')
        plt.plot(acc_x, acc_y, 'b', label='Accuracy')
        plt.xlabel('Epochs')
        plt.ylabel('Loss / Accuracy')
        plt.legend(loc='upper left')
        plt.show()

with tf.Session() as session:
    model = keras.models.Sequential()

    model.add(keras.layers.Dense(10, activation=keras.activations.elu, input_dim=2))
    model.add(keras.layers.Dense(1, activation=keras.activations.sigmoid))

    model.compile(optimizer=keras.optimizers.Adam(lr=0.05),
                  loss=keras.losses.mean_squared_error,
                  metrics=['accuracy'])

    model.fit(x=Xs, y=Ys, batch_size=4, epochs=50, callbacks=[MyCallback()])

    print("Training complete")

    loss, acc = model.evaluate(Xs, Ys)

    print(f"loss: {loss} - acc: {acc}")

    predictions = model.predict(Xs)

    print("predictions")
    print(predictions)

我已经尝试解决引用answerthis 相关问题的问题。因此,在import 部分之后添加以下代码行:

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

我得到的是另一个错误消息,这是完整的堆栈跟踪:

2018-12-06 10:18:34.262 python[19319:371282] -[NSApplication _setup:]: unrecognized selector sent to instance 0x7ff2b07a3d00
2018-12-06 10:18:34.266 python[19319:371282] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSApplication _setup:]: unrecognized selector sent to instance 0x7ff2b07a3d00'
*** First throw call stack:
(
        0   CoreFoundation                      0x00007fff2ccf0e65 __exceptionPreprocess + 256
        1   libobjc.A.dylib                     0x00007fff58d47720 objc_exception_throw + 48
        2   CoreFoundation                      0x00007fff2cd6e22d -[NSObject(NSObject) __retain_OA] + 0
        3   CoreFoundation                      0x00007fff2cc92820 ___forwarding___ + 1486
        4   CoreFoundation                      0x00007fff2cc921c8 _CF_forwarding_prep_0 + 120
        5   libtk8.6.dylib                      0x0000000b36aeb31d TkpInit + 413
        6   libtk8.6.dylib                      0x0000000b36a4317e Initialize + 2622
        7   _tkinter.cpython-36m-darwin.so      0x0000000b3686ba16 _tkinter_create + 1174
        8   python                              0x000000010571c088 _PyCFunction_FastCallDict + 200
        9   python                              0x00000001057f2f4f call_function + 143
        10  python                              0x00000001057f0abf _PyEval_EvalFrameDefault + 46847
        11  python                              0x00000001057e4209 _PyEval_EvalCodeWithName + 425
        12  python                              0x00000001057f3b1c _PyFunction_FastCallDict + 364
        13  python                              0x000000010569a8b0 _PyObject_FastCallDict + 320
        14  python                              0x00000001056c1fe8 method_call + 136
        15  python                              0x00000001056a1efe PyObject_Call + 62
        16  python                              0x0000000105743385 slot_tp_init + 117
        17  python                              0x00000001057478c1 type_call + 241
        18  python                              0x000000010569a821 _PyObject_FastCallDict + 177
        19  python                              0x00000001056a2a67 _PyObject_FastCallKeywords + 327
        20  python                              0x00000001057f3048 call_function + 392
        21  python                              0x00000001057f0b6f _PyEval_EvalFrameDefault + 47023
        22  python                              0x00000001057f330c fast_function + 188
        23  python                              0x00000001057f2fac call_function + 236
        24  python                              0x00000001057f0abf _PyEval_EvalFrameDefault + 46847
        25  python                              0x00000001057e4209 _PyEval_EvalCodeWithName + 425
        26  python                              0x00000001057f3b1c _PyFunction_FastCallDict + 364
        27  python                              0x000000010569a8b0 _PyObject_FastCallDict + 320
        28  python                              0x00000001056c1fe8 method_call + 136
        29  python                              0x00000001056a1efe PyObject_Call + 62
        30  python                              0x00000001057f0cc0 _PyEval_EvalFrameDefault + 47360
        31  python                              0x00000001057e4209 _PyEval_EvalCodeWithName + 425
        32  python                              0x00000001057f33ba fast_function + 362
        33  python                              0x00000001057f2fac call_function + 236
        34  python                              0x00000001057f0abf _PyEval_EvalFrameDefault + 46847
        35  python                              0x00000001057f330c fast_function + 188
        36  python                              0x00000001057f2fac call_function + 236
        37  python                              0x00000001057f0abf _PyEval_EvalFrameDefault + 46847
        38  python                              0x00000001057e4209 _PyEval_EvalCodeWithName + 425
        39  python                              0x00000001057f33ba fast_function + 362
        40  python                              0x00000001057f2fac call_function + 236
        41  python                              0x00000001057f0abf _PyEval_EvalFrameDefault + 46847
        42  python                              0x00000001057e4209 _PyEval_EvalCodeWithName + 425
        43  python                              0x00000001057f33ba fast_function + 362
        44  python                              0x00000001057f2fac call_function + 236
        45  python                              0x00000001057f0b6f _PyEval_EvalFrameDefault + 47023
        46  python                              0x00000001057e4209 _PyEval_EvalCodeWithName + 425
        47  python                              0x00000001057f33ba fast_function + 362
        48  python                              0x00000001057f2fac call_function + 236
        49  python                              0x00000001057f0abf _PyEval_EvalFrameDefault + 46847
        50  python                              0x00000001057e4209 _PyEval_EvalCodeWithName + 425
        51  python                              0x00000001057f33ba fast_function + 362
        52  python                              0x00000001057f2fac call_function + 236
        53  python                              0x00000001057f0abf _PyEval_EvalFrameDefault + 46847
        54  python                              0x00000001057e4209 _PyEval_EvalCodeWithName + 425
        55  python                              0x00000001057f33ba fast_function + 362
        56  python                              0x00000001057f2fac call_function + 236
        57  python                              0x00000001057f0b6f _PyEval_EvalFrameDefault + 47023
        58  python                              0x00000001057e4209 _PyEval_EvalCodeWithName + 425
        59  python                              0x00000001057f33ba fast_function + 362
        60  python                              0x00000001057f2fac call_function + 236
        61  python                              0x00000001057f0b6f _PyEval_EvalFrameDefault + 47023
        62  python                              0x00000001057e4209 _PyEval_EvalCodeWithName + 425
        63  python                              0x000000010583cd4c PyRun_FileExFlags + 252
        64  python                              0x000000010583c224 PyRun_SimpleFileExFlags + 372
        65  python                              0x0000000105862d66 Py_Main + 3734
        66  python                              0x0000000105692929 main + 313
        67  libdyld.dylib                       0x00007fff59e1608d start + 1
        68  ???                                 0x0000000000000002 0x0 + 2
)
libc++abi.dylib: terminating with uncaught exception of type NSException

这里是环境中安装的相关依赖的列表(不相关的依赖为了简洁省略):

Name                |     Version                      Build
--------------------|----------------|----------------------
_tflow_select       |     2.3.0      |                   mkl
blas                |     1.0        |                   mkl
intel-openmp        |     2019.1     |                   144
matplotlib          |     3.0.1      |        py36h54f8f79_0
mkl                 |     2018.0.3   |                     1
mkl_fft             |     1.0.6      |        py36hb8a8100_0
mkl_random          |     1.0.1      |        py36h5d10147_1
numpy               |     1.15.4     |        py36h6a91979_0
numpy-base          |     1.15.4     |        py36h8a80b8c_0
tensorboard         |     1.12.0     |        py36hdc36e2c_0
tensorflow          |     1.12.0     |    mkl_py36h2b2bbaf_0
tensorflow-base     |     1.12.0     |    mkl_py36h70e0e9a_0

【问题讨论】:

标签: python macos anaconda openmp conda


【解决方案1】:

在大多数情况下,这可以解决问题:

conda install nomkl

【讨论】:

  • 谢谢,这对我有用。你知道为什么它解决了这个问题以及是什么原因造成的吗?
  • @JulienPerrenoud 抱歉,不知道为什么或什么 - 在隐藏的 GitHub 线程深处搜索了几天后才找到此链接...
  • 我认为这意味着MKL根本不会被使用,性能会受到影响。但显然情况并非如此——MKL 是间接使用的。见stackoverflow.com/a/58869103/5091738。对于我的配备 Core i9 CPU 的 MacBook 上的简单多层感知器而言,使用和不使用 nomkl 时的性能是相同的。
  • 起初这对我不起作用,似乎我的 Anaconda 安装失败(可能是因为我从 miniconda 开始,然后尝试使用完整的 Anaconda 包进行更新)。我必须完全删除 Anaconda 并重新安装它,这个修复工作。
【解决方案2】:

我尝试了以下遇到的解决方案。不幸的是,其中许多都没有成功,其背后的原因也不是很清楚:

我在 ma​​c OS Mojave

中使用 conda 安装 Tensorflow 2.0 MKLpython3.6
  1. 降级 matplotlib。它与 OpenMP 有什么关系?原因不清楚,但没有成功。

    conda install matplotlib==2.2.3 
    
  2. 允许复制 OpenMP 库,因为它存在多个副本。这可行,但在警告日志中,它说这是一种解决方法,并且会默默地产生不正确的结果。所以,当然,这不是要走的路,因此仍然需要适当的解决方案/修复。

    import os
    os.environ['KMP_DUPLICATE_LIB_OK']='True'
    
  3. 安装 nomkl。我想这是不对所有库(scipy、numpy、tensorflow 等)使用基于 MKL 的二进制文件,但是我不明白为什么要使用 Tensorflow-MKL?因为重点是使用 MKL 二进制文件来利用英特尔架构进行快速处理(AVX2 指令等)。大多数人都说这对他们有用,但是,这对我没有用:

    conda install nomkl
    
  4. 更新 MKL。没有成功。

    conda install -c intel mkl
    
  5. 卸载 OpenMP 并重新安装。没有成功。

    conda uninstall openmp
    conda install openmp
    
  6. 最后,我所做的是卸载 conda 安装的 tensorflow (tf-mkl) 并通过 pip 再次安装。这已经成功了!!!我认为这是一个适当的解决方案。因此,这可能意味着英特尔 TF-MKL 二进制文件无法用于 macOS。我观察到这对于 Intel 和 macOS 来说很常见,因为 OpenVINO、pyrealsense2 等其他库在 macOS 中也无法正常运行。

    conda uninstall tensorflow
    pip install tensorflow==2.0.0 
    

一些有用的链接:

  1. https://github.com/dmlc/xgboost/issues/1715
  2. https://github.com/openai/spinningup/issues/16
  3. Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized

【讨论】:

  • 卸载 conda 的 tensorflow 并从 pip 重新安装对我有用。感谢分享!
【解决方案3】:

我有类似的经历,其他地方发布的解决方案并没有为我解决问题。最终我通过降级我的 matplotlib 版本解除了阻塞,即conda install matplotlib=2.2.3

【讨论】:

  • 非常感谢!!我快疯了。
  • 如果您使用的是英特尔架构,我建议您使用conda install -n myenv -c intel matplotlib。这将安装 LTS 版本的 matplotlib(即版本 2.2.3),并且当您使用 conda update --all -y 升级所有软件包时,它会阻止升级到 3.x.y
【解决方案4】:

我一直遇到这个错误,这似乎与基于依赖的安装和 conda 之后缺少符号链接有关。

示例: 我在我的 conda 环境中安装了一个带有 torch 依赖项的包,它确实安装成功 - 但是在导入时我得到了上面的错误。 lib/ 看起来如下:

~/opt/anaconda3/lib  ll|grep libomp
lrwxr-xr-x    1 user  staff    12B Dec 31 12:17 libgomp.1.dylib -> libomp.dylib
lrwxr-xr-x    1 user  staff    12B Dec 31 12:17 libgomp.dylib -> libomp.dylib
lrwxr-xr-x    1 user  staff    12B Dec 31 12:17 libiomp5.dylib -> libomp.dylib
-rwxrwxr-x    1 iser  staff   642K Dec 31 12:17 libomp.dylib 

然后我使用了conda install pytorch,它确实安装了额外的软件包。之后我的lib/看起来像这样:

 ~/opt/anaconda3/lib  ll|grep libomp
lrwxr-xr-x    1 user  staff    12B Dec 31 12:17 libgomp.1.dylib -> libomp.dylib
lrwxr-xr-x    1 user  staff    12B Dec 31 12:17 libgomp.dylib -> libomp.dylib
lrwxr-xr-x    1 user  staff    12B Mar 10 14:59 libiomp5.dylib -> libomp.dylib
-rwxrwxr-x    2 user  staff   646K Jan 15 22:21 libomp.dylib 

因此 libomp.dyliblibiomp5.dylib 符号链接已更新。然后导入工作。

我之前也通过在这些库之间手动创建符号链接解决了这个问题......所以检查这对你是否有效!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多