Windows下搭配MKL使用PyTorch和Matplotlib的正确方法及报错解决
Windows下搭配MKL正常使用PyTorch与Matplotlib的解决方案
Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.报错的本质是当前Python环境中存在多份来自不同来源的libiomp5md.dll动态库:通常一份是MKL自带的OpenMP运行库,另一份是PyTorch预编译包内置的同版本库,Matplotlib导入时会触发NumPy加载MKL的动态库,后续PyTorch加载自身自带的库时就会触发冲突。
以下是规范的解决方案:
- 方案1:删除重复动态库(最彻底的解决方案)
首先激活当前使用的Python虚拟环境,执行命令搜索所有对应动态库:where libiomp5md.dll
正常会返回2个路径,分别对应PyTorch内置的库(路径一般为{你的虚拟环境目录}/Lib/site-packages/torch/lib/libiomp5md.dll)和Anaconda/Miniconda环境自带的MKL库(路径一般为{你的虚拟环境目录}/Library/bin/libiomp5md.dll)。对比两个文件的版本,保留版本更高的文件,将另一个文件重命名为libiomp5md.dll.bak或者直接删除即可解决冲突。 - 方案2:统一包管理安装源
避免混用conda和pip安装数值计算相关依赖:如果使用conda管理环境,就通过conda源安装PyTorch、NumPy、Matplotlib和MKL相关包,conda会自动统一依赖的MKL库版本,不会出现多份动态库的问题;如果使用pip管理全量包,优先安装官方预编译的同批次依赖包,避免跨版本依赖冲突。
已有的两类临时方案都存在明显缺陷:Windows平台不支持nomkl会导致无法使用MKL的加速能力,而添加os.environ['KMP_DUPLICATE_LIB_OK']='True'的操作仅会屏蔽冲突警告,不会解决根本问题,极端情况下可能出现数值计算结果错误、程序无预警崩溃的问题,不建议在生产场景使用。
内容的提问来源于stack exchange,提问作者Rubi Shnol
相关产品推荐
相关产品推荐

