如何更改NumPy和Miniconda使用的MKL(数学内核库)版本?
英特尔的MKL表现不佳,因为在AMD处理器上,MKL故意选择非英特尔CPU上最慢的路径,“削弱”AMD处理器上的数字处理。这对于AMD CPU上的科学工作来说是非常有问题的,因为使用NumPy的数值计算受到这种“削弱AMD”功能的极大影响。
我使用的Python(Python 3.9.5)是由Miniconda发布的,NumPy是使用conda install numpy
安装的。这安装了NumPy与MKL版本2021.0.3。
以前的一种解决方法是设置一个环境变量MKL_DEBUG_CPY_TYPE=5
。但是从MKL 2020开始,这个变量被删除了(英特尔,为什么??),所以它不再能够让这个工作区工作。
所以现在的解决方案是将NumPy(和conda)的MKL版本降级到2019年。如何做到这一点?如何将NumPy和Conda使用的MKL版本从2021.0.3更改为2019?
系统信息:
- Python:3.9.5
conda
:4.10.3- NumPy:1.20.3
- MKL(
mkl.get_version_string()
):2021.3 - NumPy MKL(
np.__mkl_version__
):2021.0.3
请让我知道,因为这是AMD CPU上科学计算的关键问题。
在此先谢谢您!!!
PS:在你说“MKL是由英特尔为英特尔处理器编写的,所以可以削弱其他处理器!“,请记住,在竞争中应该有竞争精神,例如惊人的创新,而不是反竞争行为,例如故意降低竞争对手CPU的性能。如果你想赢得比赛,练习和提高你的跑步技术,不要打断你竞争对手的腿。
请避免争论,如果可以的话,请回答我的问题。如果你不能,就无视并离开。
3条答案
按热度按时间jutyujz01#
我会做一个新的环境,可能来源于Anaconda频道。以下是我的工作:
猛击
Python
备注
我把这个作为一个“原样”的答案留在这里,因为似乎有一些复杂的问题超出了我的能力。也就是说,Anaconda和Conda Forge在NumPy + MKL方面似乎有不同的集成策略。Anaconda通过直接集成构建NumPy(包括
np.__mkl_version__
扩展); Conda Forge似乎一般使用BLAS/LAPACK构建NumPy,然后基于MKL实现构建libblas
,liblapack
变体。不知道这些策略会带来什么不同。Anaconda频道目前只有Python 3.8-但无论如何,这符合预期的MKL 2019。Python 3.9是2020年底发布的。
blas=*=*mkl
非常重要:这就是对NumPy使用MKL构建的限制。这是在OSX-64平台上-希望,差异不是很大。
2vuwiymt2#
根据conda-forge的文件:
您可以通过执行以下操作切换BLAS实现,
这将改变BLAS实现,而不改变依赖于BLAS的conda包。
还支持以下传统命令。
sczxawaw3#
如果您可以根据Numpy的文档为不同的目的使用单独的Conda环境,则可以使用conda/pip安装Numpy。
pip install numpy
conda install -c conda-forge numpy
conda install -c anaconda numpy
的MKL我不是特别喜欢最后一个选项,因为
anaconda
的问题是商业上不允许的。一个商业上可行的替代方案是conda install -c intel -c conda-forge intelpython3_full
的MKL它内置了Numpy(和Scipy,和xgboost,...)。请参阅英特尔here工具包文档。