报错Intel MKL FATAL ERROR: Cannot load libmkl_core.so.的一种解决方法

问题

今天上80服务器跑mdistiller的代码时,意外发现torch、numpy都不能用了T_T

以torch为例,出现如下报错情况

以numpy为例,出现如下报错情况

我们先看看报错信息,这个报错来自Inter MKL。Inter MKL全称是The Intel Math Kernel Library,它是一个主要是用于科学计算的共享库,提供了很多与数学优化程序,例如向量矩阵操作什么的。

报错信息说明我们在导入torch/numpy库时,无法载入libmkl_core.so.和libmkl_rt.so.1.

这两个文件以so结尾,属于共享库文件。

在Linux系统上一般以.so文件扩展名(shared object), 在MacOS上以.dylib为文件扩展名, 在Windows上以.dll (dynamic link library)为文件扩展名。

共享库的出现的一个原因是防止重复造轮子,它允许多个程序使用同一份代码

这样程序里面便不需要重复写相同的代码,只需要让程序指向共享库即可,提高了程序的可复用性,也让程序变得更modular了。

解决过程

从报错信息来看,它说我们无法载入某个文件。首先想到的是先确定这个文件是否存在,这里以libmkl_rt.so.1.来进行分析。

通过执行以下命令,我们来看看它是否存在

bash 复制代码
ls /home/jyg/anaconda3/envs/mdisPy37/lib/python3.7/site-pa
ckages/mkl/../../../libmkl_rt.so.1

在我的机器上运行结果如下,libmkl_rt.so.1.确实存在

那么如何让numpy或者torch库能够正确的找到Inter MKL共享库并载入它需要的共享文件呢?

这就不得不说一下LD_LIBRARY_PATH环境变量了。

LD_LIBRARY_PATH是Linux系统上一个与动态链接有关的环境变量。如果将各个程序想象成大小不一的拼图,那么链接的过程就是将这些杂乱的拼图正确地拼合起来。

当某个库或者程序需要用到其他的共享库时,在搜索标准库目录,例如/lib或者/usr/lib之前,操作系统会首先从由LD_LIBRARY_PATH指定路径下进行搜索。

因此,我们只需要将路径/home/jyg/anaconda3/envs/mdisPy37/lib添加到LD_LIBRARY_PATH即可,即执行如下命令

bash 复制代码
export LD_LIBRARY_PATH=/home/jyg/anaconda3/envs/mdisPy37/l
ib:$LD_LIBRARY_PATH

现在便能正常导入numpy或者torch库了

不要忘了,我们现在只是在当前session中临时设置了LD_LIBRARY_PATH的值,如果当前会话结束了,重新开一个会话时还需要重新export。

因此,我们可以考虑执行如下命令永久改变LD_LIBRARY_PATH的值

bash 复制代码
echo "export LD_LIBRARY_PATH=/home/jyg/anaconda3/envs/mdisPy37/lib:$LD_LIBRARY_PATH" >> ~/.bashrc
source ~/.bashrc
相关推荐
smj2302_796826523 小时前
解决leetcode第3782题交替删除操作后最后剩下的整数
python·算法·leetcode
gCode Teacher 格码致知4 小时前
Python基础教学:Python 3中的字符串在解释运行时的内存编码表示-由Deepseek产生
python·内存编码
翔云 OCR API4 小时前
承兑汇票识别接口技术解析与应用实践
开发语言·人工智能·python·计算机视觉·ocr
likerhood5 小时前
3. pytorch中数据集加载和处理
人工智能·pytorch·python
Data_agent5 小时前
京东图片搜索商品API,json数据返回
数据库·python·json
深盾科技5 小时前
融合C++与Python:兼顾开发效率与运行性能
java·c++·python
yaoh.wang5 小时前
力扣(LeetCode) 104: 二叉树的最大深度 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
木头左6 小时前
机器学习辅助的LSTM交易策略特征工程与入参筛选技巧
python
Lenyiin6 小时前
《 Linux 修炼全景指南: 八 》别再碎片化学习!掌控 Linux 开发工具链:gcc、g++、GDB、Bash、Python 与工程化实践
linux·python·bash·gdb·gcc·g++·lenyiin
Swizard6 小时前
告别“意大利面条”:FastAPI 生产级架构的最佳实践指南
python·fastapi