如何更改 NumPy 和 conda MKL 版本
How to change NumPy and conda MKL version
如何更改 NumPy 和 Miniconda 使用的 MKL(数学内核库)版本?
英特尔的 MKL 在 AMD 处理器上表现不佳,因为 MKL 在非英特尔 CPU 上故意选择最慢的路径,“削弱”AMD 处理器上的数值处理。这对于 AMD CPU 的科学工作来说是一个很大的问题,因为使用 NumPy 的数值计算会受到这种“削弱 AMD”功能的极大影响。
我使用的 Python (Python 3.9.5) 是由 Miniconda 分发的,NumPy 是使用 conda install numpy
安装的。这安装了带有 MKL 版本 2021.0.3 的 NumPy。
以前“削弱 AMD”功能的解决方法是设置环境变量 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 性能这样的反竞争行为。如果您想赢得比赛,请练习并提高您的 运行 技术,不要打断竞争对手的腿。
请避免争论,如果可以的话尽量回答我的问题。不行就无视走人吧
我会创建一个新环境,并且可能来自 Anaconda 频道。以下对我有用:
Bash
## create environment
conda create -n foo -c anaconda python numpy mkl=2019.* blas=*=*mkl
## activate and launch python
conda activate foo
python
Python
import mkl
import numpy as np
mkl.get_version()
## 'Intel(R) Math Kernel Library Version 2019.0.4 Product Build 20190411 for Intel(R) 64 architecture applications'
np.__mkl_version__
## '2019.4'
np.show_config()
## blas_mkl_info:
## libraries = ['mkl_rt', 'pthread']
## library_dirs = ['/Users/mfansler/miniconda3/envs/foo/lib']
## define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
## include_dirs = ['/Users/mfansler/miniconda3/envs/foo/include']
## blas_opt_info:
## libraries = ['mkl_rt', 'pthread']
## library_dirs = ['/Users/mfansler/miniconda3/envs/foo/lib']
## define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
## include_dirs = ['/Users/mfansler/miniconda3/envs/foo/include']
## lapack_mkl_info:
## libraries = ['mkl_rt', 'pthread']
## library_dirs = ['/Users/mfansler/miniconda3/envs/foo/lib']
## define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
## include_dirs = ['/Users/mfansler/miniconda3/envs/foo/include']
## lapack_opt_info:
## libraries = ['mkl_rt', 'pthread']
## library_dirs = ['/Users/mfansler/miniconda3/envs/foo/lib']
## define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
## include_dirs = ['/Users/mfansler/miniconda3/envs/foo/include']
备注
我把它留在这里作为“原样”的回答,因为似乎有一些复杂的问题超出了我的理解范围。也就是说,在 NumPy + MKL 方面,Anaconda 和 Conda Forge 似乎有不同的集成策略。 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 平台上进行的 - 希望差异不大。
如何更改 NumPy 和 Miniconda 使用的 MKL(数学内核库)版本?
英特尔的 MKL 在 AMD 处理器上表现不佳,因为 MKL 在非英特尔 CPU 上故意选择最慢的路径,“削弱”AMD 处理器上的数值处理。这对于 AMD CPU 的科学工作来说是一个很大的问题,因为使用 NumPy 的数值计算会受到这种“削弱 AMD”功能的极大影响。
我使用的 Python (Python 3.9.5) 是由 Miniconda 分发的,NumPy 是使用 conda install numpy
安装的。这安装了带有 MKL 版本 2021.0.3 的 NumPy。
以前“削弱 AMD”功能的解决方法是设置环境变量 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 性能这样的反竞争行为。如果您想赢得比赛,请练习并提高您的 运行 技术,不要打断竞争对手的腿。
请避免争论,如果可以的话尽量回答我的问题。不行就无视走人吧
我会创建一个新环境,并且可能来自 Anaconda 频道。以下对我有用:
Bash
## create environment
conda create -n foo -c anaconda python numpy mkl=2019.* blas=*=*mkl
## activate and launch python
conda activate foo
python
Python
import mkl
import numpy as np
mkl.get_version()
## 'Intel(R) Math Kernel Library Version 2019.0.4 Product Build 20190411 for Intel(R) 64 architecture applications'
np.__mkl_version__
## '2019.4'
np.show_config()
## blas_mkl_info:
## libraries = ['mkl_rt', 'pthread']
## library_dirs = ['/Users/mfansler/miniconda3/envs/foo/lib']
## define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
## include_dirs = ['/Users/mfansler/miniconda3/envs/foo/include']
## blas_opt_info:
## libraries = ['mkl_rt', 'pthread']
## library_dirs = ['/Users/mfansler/miniconda3/envs/foo/lib']
## define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
## include_dirs = ['/Users/mfansler/miniconda3/envs/foo/include']
## lapack_mkl_info:
## libraries = ['mkl_rt', 'pthread']
## library_dirs = ['/Users/mfansler/miniconda3/envs/foo/lib']
## define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
## include_dirs = ['/Users/mfansler/miniconda3/envs/foo/include']
## lapack_opt_info:
## libraries = ['mkl_rt', 'pthread']
## library_dirs = ['/Users/mfansler/miniconda3/envs/foo/lib']
## define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
## include_dirs = ['/Users/mfansler/miniconda3/envs/foo/include']
备注
我把它留在这里作为“原样”的回答,因为似乎有一些复杂的问题超出了我的理解范围。也就是说,在 NumPy + MKL 方面,Anaconda 和 Conda Forge 似乎有不同的集成策略。 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 平台上进行的 - 希望差异不大。