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

使用OpenBLAS集成编译numpy

邓韬
2023-03-14
问题内容

我试图安装numpyOpenBLAS,但我在损失的如何site.cfg文件需要被写入。

当安装过程之后安装完成且没有错误,但没有关于增加从1(由环境变量OMP_NUM_THREADS控制)使用OpenBLAS线程数性能下降。

我不确定OpenBLAS集成是否完美。任何人都可以提供site.cfg文件来实现相同目的。

PS:OpenBLAS与基于Python的Theano等其他工具包的集成,可在同一台计算机上通过增加线程数显着提高性能。


问题答案:

我只是numpy在一个virtualenv带有OpenBLAS集成的内部进行编译,看来工作正常。

这是我的过程

  1. 编译OpenBLAS
    $ git clone https://github.com/xianyi/OpenBLAS
    

    $ cd OpenBLAS && make FC=gfortran
    $ sudo make PREFIX=/opt/OpenBLAS install

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

  1. 确保包含目录libopenblas.so位于共享库搜索路径中。

    • 要在本地执行此操作,您可以编辑~/.bashrc文件以包含该行
          export LD_LIBRARY_PATH=/opt/OpenBLAS/lib:$LD_LIBRARY_PATH
      

LD_LIBRARY_PATH当启动新的终端会话时,环境变量将被更新(用于$ source ~/.bashrc在同一会话中强制进行更新)。

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

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

完成任一选项后,运行

    $ sudo ldconfig
  1. 抓取numpy源代码:

    $ git clone https://github.com/numpy/numpy
    

    $ cd numpy

  2. 复制site.cfg.examplesite.cfg并编辑副本:

    $ cp site.cfg.example site.cfg
    

    $ nano site.cfg

取消注释以下行:

    ....
[openblas]
libraries = openblas
library_dirs = /opt/OpenBLAS/lib
include_dirs = /opt/OpenBLAS/include
....
  1. 检查配置,构建,安装(可选在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是最好用python setup.py install的,因为pip将跟踪包的元数据,让你轻松卸载或将来升级numpy的。

    $ pip install .
  1. 可选:您可以使用此脚本来测试不同线程数的性能。

    $ 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

对于更高的线程数,性能似乎有了明显的提高。但是,我尚未对此进行非常系统的测试,对于较小的矩阵,额外的开销可能会超过线程数增多带来的性能好处。



 类似资料:
  • 问题内容: 我试图安装有,但我在损失的如何文件需要被写入。 当安装过程之后安装完成且没有错误,但没有关于增加从1(由环境变量控制)使用OpenBLAS线程数性能下降。 我不确定OpenBLAS集成是否完善。任何人都可以提供文件来实现相同目的。 PS:OpenBLAS与基于的等其他工具包的集成,可在同一台计算机上显着提高线程数量,从而显着提高性能。 问题答案: 我只是在带有集成的a内编译,看来工作正

  • OpenBLAS 是一个优化的 BLAS 库,基于 GotoBLAS2 1.13 BSD 版本。 BLAS(Basic Linear Algebra Subprograms 基础线性代数程序集)是一个应用程序接口(API)标准,用以规范发布基础线性代数操作的数值库(如矢量或矩阵乘法)。该程序集最初发布于1979年,并用于建立更大的数值程序包(如LAPACK)。在高性能计算领域,BLAS被广泛使用。

  • 使用Blas给算法加速 深度学习中存在大量的稠密矩阵运算的乘法,稠密矩阵乘法是典型的计算密集型任务,如果使用纯java来实现稠密矩阵乘法,效果往往不如人意。Angel数学库支持用Blas库来加速稠密矩阵乘法,当然,Angel没有直接通过JNI来调用Blas相关接口,而是使用了netlib封装。默认情况下,netlib会首先尝试加载计算节点上的Blas本地动态链接库,如果加载失败,则会退回到java

  • 尝试与JIB(容器化您的GradleJava项目)与我的Java项目集成。 在此留档之后:https://github.com/GoogleContainerTools/jib/tree/master/jib-gradle-plugin 在我的项目中添加了以下内容: Gradle版本是:5.6.4 使用“/gradlew”构建的编译工作正常。但是,当执行“gradle jib”时,会出现以下错误:

  • 如果你不知道怎么从 github 上下载 Nutz 的源代码,请看 从 Git 编译 一节 编译通常是个麻烦的问题,依赖关系啊,环境变量啊,等等,全是些没有技术含量的东 东,但是却能搞的你非常头疼。虽然编译 Nutz 是一个相对简单的工作 -- 它编译 的时候不需要依赖第三方 jar 包,但是还是有一些工作要做的。 从我个人的情况来看,我经常在如下三个环境下进行 Nutz 的开发: 公司 - Vi