在CentOS / Fedora上安装OpenBLAS

5
在一个Java项目中,我使用matrix-toolkits-java (MTJ)进行高效的矩阵乘法。这依赖于netlib-java,后者又依赖于安装在机器上的优化实现的BLAS和LAPACK。它特别寻找/usr/lib64/libblas.so.3/usr/lib64/liblapack.so.3来找到这些库。
当通过Yum安装blaslapack时,我们得到符号链接/usr/lib64/libblas.so.3/usr/lib64/liblapack.so.3,指向通过Yum安装的参考blaslapack的.so文件。
现在我们想使用比参考实现更快的实现,在我的情况下是OpenBLAS。无论我是自己编译还是通过Yum安装它,最终都会得到/usr/lib64/libopenblas-r0.2.18.so
现在,根据互联网上的任何指南,我都应该用指向OpenBLAS实现的符号链接替换对参考实现的符号链接,最终得到类似于这样的东西:
libblas.so.3 -> libopenblas-r0.2.18.so
liblapack.so.3 -> libopenblas-r0.2.18.so

好的,我可以做到!我可以使用ln或通过alternatives来完成。如果我这样做了,我的代码将愉快地使用快速的OpenBLAS。

然而,当ldconfig运行时,我的符号链接就消失了,它们被参考的BLAS和LAPACK安装覆盖了。然后我的软件又变得慢而且不稳定。

所以我的问题是,如何在CentOS/Fedora上安装OpenBLAS,使得运行ldconfig不会破坏它?我不能删除blaslapack软件包,因为主机的其他客户可能依赖它。相反,我需要让操作系统知道OpenBLAS是blaslapack的替代品。


如果其他人依赖于 BLAS 和 LAPACK 包,他们很可能也会依赖于 libblas.so.3 指向的 BLAS 实现,不是吗? - stefan0xC
2个回答

1

这篇文章建议通过Yum安装openblas-compat。这为我解决了问题。在安装默认的blas包之后,我的软件仍然使用OpenBLAS。


0

我认为这种行为如果不删除参考实现是无法避免的。 如果您需要手动重建ld.so.cache,可以运行ldconfig -X以避免更新链接。

除此之外,您很可能需要创建一个自定义脚本,在ldconfig更新链接后恢复到openblas的符号链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接