OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.

1、解决OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.报错问题

错误如下所示:

OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. 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. For more information, please see http://www.intel.com/software/products/support/.

解决办法1:

在pycharm里调试程序时可以直接通过在程序前添加这两个语句解决

import os
os.environ[“KMP_DUPLICATE_LIB_OK”]=“TRUE”

解决办法2:

办法1不能解决问题的话,甚至直接在terminal上import torch也会出现这种问题:

究其原因其实是,anaconda的环境下存在两个libiomp5md.dll文件。所以直接去虚拟环境的路径下搜索这个文件,可以看到在环境里有两个dll文件:

其中第一个是torch路径下的,第二个是虚拟环境本身路径下的,转到第二个目录下把它剪切到其他路径下备份就好(最好把路径也备份一下)。

2、ModuleNotFoundError: No module named ‘mmcv._ext‘解决方案

使用目标检测开源工具MMDetection时,出现如下报错:

ModuleNotFoundError: No module named 'mmcv._ext'

很有可能是你在开始安装mmcv-full的时候,没有指定版本,选择直接安装,如下:

pip install mmcv-full

采用这样默认安装mmcv-full的方式,如果与你环境里的cuda和torch版本不匹配,就容易出现上面报错

卸载掉原来的mmcv

pip uninstall mmcv-full

重新安装正确版本的mmcv-full

其中,{cu_version}、{torch_version}分别对应cuda和torch的版本号

pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.html

例如,我安装的是cuda10.2、pytorch1.8.0,所以应该输入命令:

pip install mmcv-full==1.2.4 -f https://download.openmmlab.com/mmcv/dist/cu102/torch1.8.0/index.html

注意:mmcv-full我这里推荐用1.2.4版本的。

### 关于 OpenMP 错误 #15 的解决方案 OpenMP 错误 `#15` 表明在同一进程中存在多个 OpenMP 运行时库实例,这通常是由于不同依赖项加载了相同的动态链接库 (DLL),例如 `libiomp5md.dll`。以下是针对此问题的具体分析和解决方法。 #### 原因分析 错误的核心原因是程序中同时加载了多个版本的 OpenMP 库文件 `libiomp5md.dll`。这种情况常见于 Windows 平台上的 Python 环境,尤其是当使用 Anaconda 或 Miniconda 创建虚拟环境并安装多个科学计算包(如 PyTorch、NumPy 和 MKL 加速库)时[^3]。这些库可能各自携带了自己的 OpenMP 实现副本,从而引发冲突。 --- #### 解决方案 ##### 方法一:设置环境变量 可以通过设置环境变量来允许重复加载 OpenMP 库,尽管这种方法仅作为临时措施并不推荐用于生产环境。 ```python import os os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE" ``` 上述代码应在脚本开头执行,以便在导入其他模块之前生效。需要注意的是,这种做法虽然能快速解决问题,但它可能导致性能下降甚至潜在的稳定性风险[^4]。 ##### 方法二:移除多余的 libiomp5md.dll 文件 如果确认环境中确实存在冗余的 OpenMP DLL 文件,则可以选择手动清理多余副本。具体路径取决于所使用的 Conda 虚拟环境位置: - **Base 环境**: 删除位于 `\Anaconda3\Library\bin\libiomp5md.dll` 的文件。 - **特定 env 环境**(假设名称为 work): 删除 `\Anaconda3\envs\work\Library\bin\libiomp5md.dll` 中对应的文件。 注意,在实施这一改动前应备份原始文件以防万一;另外还需验证其余依赖是否仍需该 DLL 支持正常运作。 ##### 方法三:调整依赖关系以统一 OpenMP 版本 最彻底的办法是从根本上消除多份独立的 OpenMP 配置。例如重新编译某些第三方扩展使其共享同一套标准运行时组件而非自带私有实现。然而实际操作起来较为复杂,通常适用于高级开发者或者维护者层面处理。 --- ### 总结 对于大多数用户而言,“设置环境变量”的简便性和即时效果使得它成为首选应急手段;而对于追求长期稳定性的场景来说,“删除冗余 dll”以及更深层次地协调各软件间的协作模式则显得尤为重要[^5]。 ```python # 示例代码片段展示如何配置环境变量 import os if not os.getenv('KMP_DUPLICATE_LIB_OK'): os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE' print("Environment variable set successfully.") ```
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值