【问题标题】:sklearn OMP: Error #15 ("Initializing libiomp5md.dll, but found mk2iomp5md.dll already initialized.") when fitting modelssklearn OMP:拟合模型时出现错误 #15(“正在初始化 libiomp5md.dll,但发现 mk2iomp5md.dll 已初始化。”)
【发布时间】:2013-12-31 11:43:05
【问题描述】:

我最近卸载了一个运行良好的 Enthought Canopy 32 位副本并安装了 Canopy 版本 1.1.0(64 位)。当我尝试使用 sklearn 来拟合模型时,我的内核崩溃了,我收到以下错误:

内核(用户 Python 环境)已终止并出现错误代码 3。这可能是由于您的代码或内核本身存在错误。

从内核进程捕获的输出如下所示。

OMP:错误 #15:正在初始化 libiomp5md.dll,但发现 mk2iomp5md.dll 已经初始化。

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

相同的代码在 Canopy 的 32 位下运行得很好。该代码实际上只是一个简单的拟合

linear_model.SGDClassifier(loss='log')

(Logistic回归同样的错误,没有尝试过其他模型)

我该如何解决这个问题?

【问题讨论】:

  • 你从“import os;os.environ['PATH'].split(';')”得到什么? (省略外面的双引号)
  • 尝试按照此处的建议安装旧版本的 XGBoost:Install version 0.80

标签: python scikit-learn enthought canopy


【解决方案1】:

easyocr 也有同样的问题,它也依赖于 mkl。

重新安装其他依赖于 mkl 的模块似乎有效。例如,我做了 pip uninstall 然后 pip install numpy ,这使得 import easyocr 工作。

【讨论】:

    【解决方案2】:

    我尝试手动删除旧的 libiomp5md.dll 文件。该文件位于您的anaconda3/lib 目录中。您应该删除旧的 libiomp5.dll 文件。那么它应该可以工作。

    【讨论】:

      【解决方案3】:

      我已阅读有关英特尔支持研究 (http://www.intel.com/software/products/support/) 的文档以及这种情况下的原因,包括。对我来说,是 numpy 库。 我已经单独安装了它,也作为 PyTorch 安装的一部分。 所以它给出了一个错误。 基本上你应该创建一个新环境,并在那里安装所有依赖项。

      【讨论】:

        【解决方案4】:

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

        问题在于,尽管加载了 nomkl 包,但 conda 并没有选择非 mkl 构建的 tensorflow (v2.0.0)。最终使该解决方案发挥作用的是:

        • 确保我是从defaults 频道加载包(即从具有非 mkl 版本的 tensorflow 的频道。截至 2021 年 2 月 5 日,conda-forge 没有 2.0 的 tensorflow 版本或 更大)。
        • 指定我想要的 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。

        【讨论】:

          【解决方案5】:

          你几乎肯定可以通过设置环境参数来克服这个错误

          import os
          os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
          

          但是,不推荐设置此参数(如错误消息中所述)。相反,您可以尝试在不使用英特尔数学核心库的情况下设置您的 conda 环境,方法是运行:

          conda install nomkl
          

          如果您拥有的版本基于 MKL,您可能需要在执行此操作后再次安装一些软件包(尽管 conda 应该为您执行此操作)。如果没有,那么您将需要执行以下操作:

          安装通常包含 MKL 或依赖于包含 MKL 的包的包,例如 scipynumpypandas。 Conda 将安装这些包的非 MKL 版本及其依赖项 (见here

          对于 macOS,nomkl 是一个不错的选择,因为 MKL 提供的优化实际上已经由 Apple 的 Accelerate Framework 提供,它已经使用 OpenMP。这实际上是触发错误('...OpenMP 运行时的多个副本...')的原因,看起来(如this answer 所述)。

          【讨论】:

            【解决方案6】:

            我遇到了同样的问题,来自 numpy 和 canopy 中的冲突安装。通过写作解决它:

            import os
            os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
            

            不是一个优雅的解决方案,但它为我完成了这项工作。

            【讨论】:

            • -1,错误消息明确指出这是不安全的:The best thing to do is to ensure that only a single OpenMP runtime is linked into the process, e.g. by avoiding static linking of the OpenMP runtime in any library. As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow the program to continue to execute, but that may cause crashes or silently produce incorrect results.
            • 有更好的解决方案吗?
            • 也为我完成了这项工作,这与可能出现的其他解决方案不同。也应该链接到这个问题:stackoverflow.com/questions/56759112/…
            猜你喜欢
            • 1970-01-01
            • 2019-05-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-18
            相关资源
            最近更新 更多