如何配置numpy使用MKL作为BLAS/LAPACK运算后端
解决numpy链接MKL后端的方法
你之前直接执行pip install mkl不生效的原因是:当前环境中的numpy是预编译版本,构建时已经绑定了OpenBLAS后端,不会自动识别后续安装的MKL库,必须重新安装/编译numpy使其在构建阶段链接MKL,具体操作如下:
方案1:使用conda安装(推荐,适配你的conda环境)
- 先卸载现有numpy和MKL相关包,避免版本冲突:
pip uninstall -y numpy mkl conda uninstall -y numpy mkl
- 从defaults源安装MKL和配套numpy,defaults源提供的numpy默认编译时已链接MKL:
conda install -c defaults mkl numpy
- 安装完成后验证配置:
import numpy as np np.show_config()
此时输出中blas_mkl_info、lapack_mkl_info会显示可用信息,blas_opt_info、lapack_opt_info会指向MKL库。
方案2:使用pip源码编译安装
如果必须使用pip管理包,可通过源码编译numpy指定链接MKL:
- 先安装MKL并配置环境变量,将路径替换为你当前虚拟环境对应的MKL安装路径:
pip install mkl # 示例路径,可通过pip show mkl查看Location字段拼接得到 export MKL_ROOT=/your/env/path/lib/python3.7/site-packages/mkl export LD_LIBRARY_PATH=$MKL_ROOT/lib:$LD_LIBRARY_PATH export BLAS=$MKL_ROOT/lib/libmkl_rt.so export LAPACK=$MKL_ROOT/lib/libmkl_rt.so
- 禁止使用预编译wheel包,从源码编译安装numpy:
pip install --no-binary numpy numpy
- 编译完成后执行
np.show_config()验证即可。
注意:如果系统中存在其他路径的OpenBLAS库,需要保证MKL的库路径在
LD_LIBRARY_PATH中优先级高于OpenBLAS的路径,避免numpy运行时优先加载OpenBLAS。
内容的提问来源于stack exchange,提问作者SkyWalker
相关产品推荐
相关产品推荐

