【问题标题】:Spark netlib-java BLASSpark netlib-java BLAS
【发布时间】:2016-07-17 03:03:24
【问题描述】:

我正在尝试对我的非工作 apache spark 和 netlib 设置进行故障排除,但我不知道下一步该做什么。

这里有一些信息:

  • Spark 1.3.1(但也尝试过 1.5.1)
  • 具有 3 个节点的 Mesos 集群
  • Ubuntu Trusty 在每个节点上并安装在 BLAS 包之后

    $ dpkg -l | grep 'blas\|atlas\|lapack'
    ii  libopenblas-base                    0.2.8-6ubuntu1                   amd64        Optimized BLAS (linear algebra) library based on GotoBLAS2
    
    $ update-alternatives --get-selections | grep 'blas\|lapack'
    libblas.so.3                   auto     /usr/lib/openblas-base/libblas.so.3
    

我已经构建了一个示例 jar 用于测试 netlib-java 是否可以检测到这个库,代码如下:

object Main extends App {
  println(com.github.fommil.netlib.BLAS.getInstance().getClass().getName())
  println(com.github.fommil.netlib.LAPACK.getInstance().getClass().getName())
}

当我执行此代码时,我得到以下响应:

$ java -jar artifacts/BLAStest-assembly-1.0.jar
Mar 29, 2016 3:43:33 PM com.github.fommil.netlib.BLAS <clinit>
WARNING: Failed to load implementation from: com.github.fommil.netlib.NativeSystemBLAS
Mar 29, 2016 3:43:33 PM com.github.fommil.jni.JniLoader liberalLoad
INFO: successfully loaded /tmp/jniloader6790966128222263615netlib-native_ref-linux-x86_64.so
com.github.fommil.netlib.NativeRefBLAS
Mar 29, 2016 3:43:33 PM com.github.fommil.netlib.LAPACK <clinit>
WARNING: Failed to load implementation from: com.github.fommil.netlib.NativeSystemLAPACK
Mar 29, 2016 3:43:33 PM com.github.fommil.jni.JniLoader load
INFO: already loaded netlib-native_ref-linux-x86_64.so
com.github.fommil.netlib.NativeRefLAPACK

所以它似乎在这里工作得很好。 但是 spark 无法检测到库。我已将此 java 依赖项添加到我的程序集 jar 中

com.github.fommil.netlib:all:1.1.2

如果我尝试用这个包启动一个 spark shell,它也不起作用。

spark-shell --packages com.github.fommil.netlib:all:1.1.2

【问题讨论】:

    标签: apache-spark blas netlib


    【解决方案1】:

    看起来您的 netlib-java 实现正在加载 NativeRefBLAS,而不是 NativeSystemBLAS。这意味着您包含“com.github.fommil.netlib:all”工作正常,因为没有它您将使用非本地 F2J 实现。问题是您想使用系统提供的 BLAS (OpenBLAS),而不是 netlib-java 附带的参考实现。这可能只是在您的 spark 执行器可见的位置获取正确的共享库的问题。

    你说你链接了libblas.so.3,但是如netlib-java readme中描述的,你还需要配置libblas.so、liblapack.so和liblapack.so.3:

    sudo apt-get install libatlas3-base libopenblas-base
    sudo update-alternatives --config libblas.so
    sudo update-alternatives --config libblas.so.3
    sudo update-alternatives --config liblapack.so
    sudo update-alternatives --config liblapack.so.3
    

    【讨论】:

    • 感谢您的回复。没有找到 libblas.so 或 liblapack.so 的任何替代品。我不知道这是否已经是一个原因。不过,我的小工具现在链接到 NativeSystemBLAS。但是 spark shell 和任何 spark 作业仍然链接到 F2J 实现,我不知道那里有什么区别:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多