【Python】Python安装升级mkl包

1、问题背景

近期在使用faiss包构建knn索引的时候,经常会抛出一个Error:Intel MKL FATAL ERROR: Cannot load libmkl_avx512.so or libmkl_def.so

Intel MKL FATAL ERROR: Cannot load libmkl_avx512.so or libmkl_def.so

应该是faiss包在导入mkl包时出现了异常,解决这个问题的方法是在python脚本中导入mkl包:

import mkl
mkl.get_max_threads()

添加这两行代码之后,faiss抛出的问题理论上可解决,但是如果服务器上的mkl包不完整或者版本较低,就会遇到新的问题,解决方案通常都是Google之然后改之。

假设服务器上没有mkl包或者缺少mkl-service包(此时的服务器上有mkl-fft和mkl-random),那么抛出的Error变成:ImportError: No module named mkl

import mkl
ImportError: No module named mkl

2、解决mkl包的问题

赶紧查看一下是否安装了mkl:

pip list|grep 'mkl'

抓到两个python包:

  • mkl-fft(1.0.10)
  • mkl-random(1.0.2)

在python环境import mkl直接Error:ImportError: libmkl_rt.so: cannot open shared object file: No such file or directory

是不是缺了一个mkl-service包?

解决流程:

# python/pip版本
which python  # ~/anaconda2/bin/python
python -V  # Python 2.7.16 :: Anaconda, Inc.

which pip  # ~/anaconda2/bin/pip
pip -V  # pip 20.2.3 from /home/work/anaconda2/lib/python2.7/site-packages/pip (python 2.7)

1、Github给出的安装mkl-service的方法是使用下面两条conda命令中的一条,但是直接使用github提供的命令安装失败,一步一步来吧。。。

conda install -c intel mkl-service
conda install -c conda-forge mkl-service

2、直接更新mkl

这里其实有点凌乱,conda list是有完整的mkl+mkl-service+mkl_fft+mkl_random四个包,但是pip list只有mkl_fft+mkl_random两个包...

conda update mkl

Error:CondaMultiError: RemoveError: 'setuptools' is a dependency of conda and cannot be removed from
conda's operating environment.

解决这个问题的方法一般是更新conda:

conda update conda

继续报出同样的Error(不确定error,有的时候conda能更新成功,有的时候就失败了,可理解为是玄学)。

Google说加上--force参数可行:

conda update --force conda

conda更新成功

3、如果mkl包的版本较低的话,可以进行一下升级

conda update mkl

没有抛出Error,升级成功。

3、升级conda触发的pip问题

升级了conda之后,pip命令居然不能使用了,pip list命令Error如下:ImportError: cannot import name PackageFinder

ImportError: cannot import name PackageFinder

解决方法:安装或者升级pip

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

done。

查看下mkl,原来缺少的mkl-service包也安装上了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值