python教程—使用OpenBLAS集成编译numpy-Python实用宝典

python教程—使用OpenBLAS集成编译numpy

我试图用OpenBLAS安装numpy,但是我不知道如何编写site.cfg文件。

我试图用OpenBLAS安装numpy,但是我不知道如何编写site.cfg文件。

安装过程安装完成没有错误,但是OpenBLAS使用的线程数量从1(由环境变量OMP_NUM_THREADS控制)增加时,性能会下降。

我不确定OpenBLAS集成是否完美。任何人都可以提供site.cfg文件来实现这一点吗?

注:: OpenBLAS集成到其他工具包中,比如基于Python的>Theano,它在增加同一台机器上的线程数量方面提供了显著的性能提升,如

回答

我刚刚在一个集成了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的目录。在共享搜索路径中也是如此。

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

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

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

    • 另一个适用于多个用户的选项是在/etc/ld.so.conf中创建.conf文件。d/包含行/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副本。例子到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安装是比使用python setup.py install更可取,因为pip将跟踪包元数据,并允许您在将来轻松卸载或升级numpy。

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

      $ 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实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
2

发表评论