Conda:如何防止 mkl 到 openblas 切换

Mar*_*ark 1 anaconda conda

Conda 想要将我的 blas、lapack 等软件包从 mkl 降级为 openblas 版本。我知道 conda 与 mkl 和 openblas 的混合似乎并不是一个不常见的问题。然而,我还没有找到适合我的解决方案。我已经安装了这些软件包

blas                      2.113                       mkl    conda-forge
blas-devel                3.9.0            13_linux64_mkl    conda-forge
libblas                   3.9.0            13_linux64_mkl    conda-forge
libcblas                  3.9.0            13_linux64_mkl    conda-forge
liblapack                 3.9.0            13_linux64_mkl    conda-forge
liblapacke                3.9.0            13_linux64_mkl    conda-forge
mkl                       2022.0.1           h06a4308_117  
mkl-devel                 2022.0.1           h66538d2_117  
mkl-include               2022.0.1           h06a4308_117  
mkl-service               2.4.0            py39h404a4ab_0    conda-forge
mkl_fft                   1.3.1            py39h6964271_2    conda-forge
mkl_random                1.2.2            py39h8b66066_1    conda-forge
Run Code Online (Sandbox Code Playgroud)

我有一个.condarc(在linux上)包含

channels:
  - conda-forge
  - defaults
dependencies:
  - python>=3.6
  - numpy>=1.13
  - scipy>=0.18
  - cython>=0.29
  - mkl
  - mkl-devel
  - libblas=*=*mkl
  - bottleneck
  - pip
  - setuptools>=30.3.0
  - h5py
  - pyyaml
  - pytest

ssl_verify: true
auto_activate_base: false
Run Code Online (Sandbox Code Playgroud)

此外,在conda-meta目录中我有一个pinned文件,其中包含行libblas=*=*mkl. 然而,据此conda update --all建议:

The following packages will be DOWNGRADED:
  ... other pkgs ...
  libblas                              3.9.0-13_linux64_mkl --> 3.9.0-13_linux64_openblas
  libcblas                             3.9.0-13_linux64_mkl --> 3.9.0-13_linux64_openblas
  liblapack                            3.9.0-13_linux64_mkl --> 3.9.0-13_linux64_openblas
Run Code Online (Sandbox Code Playgroud)

尽管有.condarcpinned文件,为什么我会从 mkl 切换到 openblas,我还能做些什么来阻止它?

isu*_*ruf 5

请参阅https://conda-forge.org/docs/maintainer/knowledge_base.html#switching-blas-implementation末尾的注释部分

如果您想致力于特定的 blas 实现,您可以通过将 blas 实现固定在您的环境中来防止 conda 切换回来。要提交 mkl,请添加blas=*=mkl<conda-root>/envs/<env-name>/conda-meta/pinned,如 conda-docs 中所述。