在 CentOS/Fedora 上安装 OpenBLAS

Installing OpenBLAS on CentOS / Fedora

在一个 Java 项目中,我使用 matrix-toolkits-java (MTJ) for efficient matrix multiplication. This relies on 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 指向引用 blas 中的 .so 文件lapack 通过 Yum 安装。

现在我们想要使用比参考实现更快的实现,在我的例子中 OpenBLAS。不管是我自己编译还是通过 Yum 安装它,我最终都会得到 /usr/lib64/libopenblas-r0.2.18.so

现在,根据 Internet 上的任何指南,我应该将指向参考实现的符号链接替换为指向 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 上以 运行 ldconfig 不会破坏它的方式安装 OpenBLAS?我无法删除 blaslapack 包,因为主机的其他客户端可能依赖它。相反,我会以某种方式让 OS 理解 OpenBLAS 是 blaslapack.

的替代品

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

除此之外,您很可能必须创建一个自定义脚本来在 ldconfig 更新链接后将符号链接恢复到 openblas

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