当前位置: 首页 > 面试题库 >

将ATLAS / MKL链接到已安装的Numpy

庄高谊
2023-03-14
问题内容

TL; DR 如何在不重建的情况下将ATLAS / MKL链接到现有的Numpy。

我使用Numpy来计算大型矩阵,但发现它非常慢,因为Numpy仅使用1个核来进行计算。经过大量搜索后,我发现我的Numpy没有链接到某些优化的库,例如ATLAS
/ MKL。这是我的numpy配置:

>>>import numpy as np
>>>np.__config__.show()
blas_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib']
    language = f77
lapack_info:
    libraries = ['lapack']
    library_dirs = ['/usr/lib']
    language = f77
atlas_threads_info:
    NOT AVAILABLE
blas_opt_info:
    libraries = ['blas']
    library_dirs = ['/usr/lib']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]
atlas_blas_threads_info:
  NOT AVAILABLE
openblas_info:
  NOT AVAILABLE
lapack_opt_info:
    libraries = ['lapack', 'blas']
    library_dirs = ['/usr/lib']
    language = f77
    define_macros = [('NO_ATLAS_INFO', 1)]
atlas_info:
  NOT AVAILABLE
lapack_mkl_info:
  NOT AVAILABLE
blas_mkl_info:
  NOT AVAILABLE
atlas_blas_info:
  NOT AVAILABLE
mkl_info:
  NOT AVAILABLE

因此,我想将ATLAS /
MKL链接到Numpy。但是,我的Numpy是通过PIP安装的,所以我不想手动安装,因为我想使用最新版本。我已经做了一些搜索,但它们仅用于从头开始构建。因此,我的问题是:

  • 有什么方法可以将ATLAS / MKL链接到Numpy,而无需重新构建?
  • 我发现配置信息保存在Numpy安装文件夹的 _config _.py中。那么修改它可以解决我的问题吗?如果是,请告诉我如何?

问题答案:

假设您正在运行某种形式的linux,可以采用以下一种方法:

  1. 找出当前使用链接的BLAS库numpy ldd

    • 对于低于v1.10的numpy版本:
          $ ldd /<path_to_site-packages>/numpy/core/_dotblas.so
      

例如,如果我通过安装numpy apt-get,它将链接到

            ...
    libblas.so.3 => /usr/lib/libblas.so.3 (0x00007fed81de8000)
    ...

如果_dotblas.so不存在,则可能意味着numpy最初安装时未检测到任何BLAS库,在这种情况下,它根本没有构建任何依赖于BLAS的组件。如果在pip不手动指定BLAS库的情况下使用numpy安装numpy,则通常会发生这种情况(请参见下文)。如果您要链接到外部BLAS库,恐怕您别无选择,只能重建numpy。

* **对于numpy v1.10及更高版本:**

_dotblas.so 已从最新版本的numpy中 删除 ,但是您应该可以检查numpy的依赖项multiarray.so

            $ ldd /<path_to_site-packages>/numpy/core/multiarray.so
  1. 如果尚未安装ATLAS / MKL / OpenBLAS。顺便说一句,我肯定会推荐OpenBLAS而不是ATLAS-看一下这个答案(尽管基准数据现在可能有点过时了)。

  2. 使用update-alternatives创建一个符号链接到您所选择的新的BLAS库。例如,如果您安装libopenblas.so到中/opt/OpenBLAS/lib,则可以执行以下操作:

    $ sudo update-alternatives --install /usr/lib/libblas.so.3 \
                                     libblas.so.3 \
                                     /opt/OpenBLAS/lib/libopenblas.so \
                                     50
    

您可以为单个目标库配置多个符号链接,从而可以在多个已安装的BLAS库之间手动切换。

例如,当我致电时$ sudo update-alternatives --config libblas.so.3,我可以在3个库之一中进行选择:

      Selection    Path                                    Priority   Status
------------------------------------------------------------
  0            /opt/OpenBLAS/lib/libopenblas.so         40        auto mode
  1            /opt/OpenBLAS/lib/libopenblas.so         40        manual mode
  2            /usr/lib/atlas-base/atlas/libblas.so.3   35        manual mode
* 3            /usr/lib/libblas/libblas.so.3            10        manual mode

如果您真的想要numpy的“最新”版本,也可以看看我有关通过OpenBLAS集成从源代码编译numpy的答案。

使用pip安装具有BLAS支持的numpy

正如@tndoan在评论中提到的,可以pip通过在其中放置配置文件来尊重numpy的特定配置~/.numpy- site.cfg-有关更多详细信息,请参见此答案。

我个人的喜好是手动配置和构建numpy。这并不是特别困难,它使您可以更好地控制numpy的配置。



 类似资料:
  • > 我有win10、x64、i7-3770K 异常:回溯(最近一次调用):文件“D:\python\lib\site-packages\pip\basecommand.py”,第209行,主状态=self.run(options,args)文件“D:\python\lib\site-packages\pip\commands\install.py”,第299行,运行requirement_set.

  • 我试图修复运行npm时必须使用sudo的错误。我盲目地按照链接卸载节点,代码就是从这个要点 运行命令后,我试图用brew安装它:。这给了我以下错误: 试图运行,我得到了: 然后,当我编写时,我得到: 当我写时,我得到: 对如何解决这个问题有什么想法吗?

  • 我有一个web应用程序,它使用Spring Boot来处理后端逻辑。我正在尝试集成mongodb以跟踪有关此webapp用户的一些信息。我在mongodb Atlas上创建了一个数据库,通过Mongo Shell连接正常。当我尝试与Spring连接时,问题就出现了。让我给你看看所有的细节 在Atlas中,我将此IP地址(0.0.0.0/0(包括您当前的IP地址))添加到安全性中 然后我创建了一个名

  • 我正在尝试使用MongoDB指南针使用Atlas

  • mongo“mongoDB+srv://sandbox-hoj54.mongodb.net/test”--authenticationdatabase admin--用户名M001-student--密码m001-mongodb-basics 2020-06-19T14:18:02.553+0530 E QUERY[js]未捕获异常:语法错误:意外标记:字符串文字:@(shell):1:6

  • 问题内容: 我正在使用和。 我想从URL安装额外的库,例如安装setup.py上的git repo。 我在中添加了额外的参数。这意味着,我的库需要额外的库,并且还必须安装它们。 但是git repos之类的网址不是in中的有效字符串。假设,我想从github安装一个库。我已经搜索过该问题,发现了可以放入库中的内容。但这仍然行不通。这是我的依赖链接定义; 链接有效。我可以使用这些URL从Intern

  • 问题内容: 为了解决这个问题,我是否需要在Heroku 上获得 SSL 支持才能使用SSL 在 Heroku 和 Atlas MongoDBCloud 之间建立连接?(访问Atlas MongoDB Cloud服务需要 TSL / SSL连接)。 我试图将用node.js编写的Heroku应用程序连接到Atlas MongoDB Cloud托管的集群。 我当前的数据库托管在mLab(作为Herok

  • 问题内容: 我是新手,我的项目需要pySerial和feedparser模块。我在跑美洲狮。 我遵循了以下教程,以便可以升级到python 2.7.3,然后使用上述模块。 http://hackercodex.com/guide/python-virtualenv-on-mac-osx-mountain- lion-10.8/ 我按照本教程进行操作,直到安装了pip。而不是安装Virtualenv