gpt4 book ai didi

python - 使用 OpenBLAS 集成编译 numpy

转载 作者:IT老高 更新时间:2023-10-28 20:30:41 25 4
gpt4 key购买 nike

我正在尝试使用 OpenBLAS 安装 numpy ,但是我不知道如何编写 site.cfg 文件.

installation procedure随后安装完成且没有错误,但是将 OpenBLAS 使用的线程数从 1 增加(由环境变量 OMP_NUM_THREADS 控制)会导致性能下降。

我不确定 OpenBLAS 集成是否完美。谁能提供一个 site.cfg 文件来实现同样的目的。

P.S.:OpenBLAS 集成到其他工具包中,例如 Theano ,它基于 Python,在同一台机器上通过增加线程数提供了显着的性能提升。

最佳答案

我刚刚在带有 OpenBLAS 集成的 virtualenv 中编译了 numpy,它似乎工作正常。

这是我的过程:

  1. 编译OpenBLAS:

    $ git clone https://github.com/xianyi/OpenBLAS
    $ cd OpenBLAS && make FC=gfortran
    $ sudo make PREFIX=/opt/OpenBLAS install

    如果您没有管理员权限,您可以将 PREFIX= 设置为您有写入权限的目录(只需相应地修改下面的相应步骤)。

  2. 确保包含 libopenblas.so 的目录在您的共享库搜索路径中。

    • 要在本地执行此操作,您可以编辑 ~/.bashrc 文件以包含该行

      export LD_LIBRARY_PATH=/opt/OpenBLAS/lib:$LD_LIBRARY_PATH

      LD_LIBRARY_PATH 环境变量将在您启动新的终端 session 时更新(使用 $ source ~/.bashrc 在同一 session 中强制更新)。

    • 另一个适用于多个用户的选项是在 /etc/ld.so.conf.d/ 中创建一个包含该行的 .conf 文件/opt/OpenBLAS/lib,例如:

      $ sudo sh -c "echo '/opt/OpenBLAS/lib' > /etc/ld.so.conf.d/openblas.conf"

    完成任一选项后,运行

    $ sudo ldconfig
  3. 获取numpy源代码:

    $ git clone https://github.com/numpy/numpy
    $ cd numpy
  4. site.cfg.example 复制到 site.cfg 并编辑副本:

    $ cp site.cfg.example site.cfg
    $ nano site.cfg

    取消注释这些行:

    ....
    [openblas]
    libraries = openblas
    library_dirs = /opt/OpenBLAS/lib
    include_dirs = /opt/OpenBLAS/include
    ....
  5. 检查配置、构建、安装(可选在 virtualenv 内)

    $ python setup.py config

    输出应该是这样的:

    ...
    openblas_info:
    FOUND:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/opt/OpenBLAS/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]

    FOUND:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/opt/OpenBLAS/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
    ...

    使用 pip 安装是 preferable使用 python setup.py install,因为 pip 将跟踪包元数据并允许您在将来轻松卸载或升级 numpy。

    $ pip install .
  6. 可选:您可以使用 this script测试不同线程数的性能。

    $ OMP_NUM_THREADS=1 python build/test_numpy.py

    version: 1.10.0.dev0+8e026a2
    maxint: 9223372036854775807

    BLAS info:
    * libraries ['openblas', 'openblas']
    * library_dirs ['/opt/OpenBLAS/lib']
    * define_macros [('HAVE_CBLAS', None)]
    * language c

    dot: 0.099796795845 sec

    $ OMP_NUM_THREADS=8 python build/test_numpy.py

    version: 1.10.0.dev0+8e026a2
    maxint: 9223372036854775807

    BLAS info:
    * libraries ['openblas', 'openblas']
    * library_dirs ['/opt/OpenBLAS/lib']
    * define_macros [('HAVE_CBLAS', None)]
    * language c

    dot: 0.0439578056335 sec

对于更高的线程数,性能似乎有了显着的提高。但是,我没有对此进行非常系统的测试,而且对于较小的矩阵,额外的开销可能会超过线程数增加带来的性能优势。

关于python - 使用 OpenBLAS 集成编译 numpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11443302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com