【发布时间】:2022-11-05 15:17:09
【问题描述】:
我正在尝试针对 BLIS(针对 BLAS 和 CBLAS)和针对 LAPACK 的 OpenBLAS 从源代码构建 Numpy 的本地版本。
我开始在启用 CBLAS 的情况下为 zen3 在本地构建 BLIS,如下所示:
./configure --enable-threading=openmp --enable-cblas --prefix=$HOME/blis zen3
然后运行测试(全部通过)并运行make install。我确保所有相关文件都在 $HOME/blis 库中(见附件截图)。
我还在本地构建了 openBLAS,那里没有特殊配置。
之后,我修改了 numpy 的 site.cfg 以相应地配置 openBLAS 和 blis 文件夹:
[blis]
libraries = blis
library_dirs = /home/or/blis/lib/
include_dirs = /home/or/blis/include/blis
runtime_library_dirs = /home/or/blis/lib/
[openblas]
libraries = openblas
library_dirs = /opt/OpenBLAS/lib
include_dirs = /opt/OpenBLAS/include
runtime_library_dirs = /opt/OpenBLAS/lib
我继续构建和安装 numpy:
NPY_BLAS_ORDER=blis NPY_LAPACK_ORDER=openblas NPY_CBLAS_LIBS= python ./numpy/setup.py build -j 32
请注意,如果 CBLAS 包含在 BLIS 库中,那么 NPY_CBLAS_LIBS 是空的,因为 numpy 的构建文档说这样做。
然后,导入 numpy 导致:
Original error was: /home/or/.pyenv/versions/3.9.6/lib/python3.9/site-packages/numpy-1.24.0.dev0+998.g6a5086c9b-py3.9-linux-x86_64.egg/numpy/core/_multiarray_umath.cpython-39-x86_64-linux-gnu.so: undefined symbol: cblas_sgemm
在这一点上我一无所知,因为我在网上找不到关于这个具体案例的任何信息。
从 pip(openblas 自带)安装 numpy 可以成功导入。
更新1:
在阅读make install 日志时,我发现它在该位置找不到我的 BLIS 库文件,即使这些文件位于指定的路径中。我还尝试在各种路径中重新编译和安装 BLIS,并在编译之前重新配置 numpy,但得到了相同的结果。
当我从 AMD 的网站下载预编译版本的 BLIS 时,numpy 似乎得到了它,但这不是推荐的方法,因为我缺少 Zen3 的优化。
【问题讨论】:
-
狂拍:将
/opt/OpenBLAS/lib添加到LD_LIBRARY_PATH有帮助吗? -
@user3840170 你是说 BLIS 吗?因为使用 OpenBLAS 从来都不是问题,它可以正常工作。
-
ldd /home/or/.pyenv/versions/3.9.6/lib/python3.9/site-packages/numpy-1.24.0.dev0+998.g6a5086c9b-py3.9-linux-x86_64.egg 的输出是什么/numpy/core/_multiarray_umath.cpython-39-x86_64-linux-gnu.so ?听起来它正在尝试动态加载一些依赖项并且找不到它们