在 EMR 上使用 OpenBLAS Spark

问题描述 投票:0回答:2

当尝试在 EMR 实例上运行 Spark 2.1.0 中的 MlLib ALS 算法时,我不断收到臭名昭著的警告:

WARN BLAS: Failed to load implementation from: com.github.fommil.netlib.NativeSystemBLAS
WARN BLAS: Failed to load implementation from: com.github.fommil.netlib.NativeRefBLAS

我设法通过重建 Spark 以包含带有 -Pnetlib-lgpl 标志的 netlib-java 来解决本地 Ubuntu 计算机上的问题,但有没有办法避免重建默认的 EMR Spark 版本?目前我正在尝试通过使用 sbt-assemble 构建一个 fat JAR 来规避它,并添加以下依赖项:

libraryDependencies += "com.github.fommil.netlib" % "all" % "1.1.2"

虽然组装成功,但是运行spark-submit时BLAS警告仍然没有消失。我在 EMR 上安装了 openblas 和 lapack。

amazon-web-services apache-spark amazon-emr lapack blas
2个回答
3
投票

好吧,用一个胖 JAR 似乎不可能做到这一点,所以我构建了 Spark 的自定义发行版,如下所示:

export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
./dev/make-distribution.sh --name spark --tgz -Phadoop-2.7 -Phive -Phive-thriftserver -Pnetlib-lgpl -Pkinesis-asl -Pspark-ganglia-lgpl

并用我的构建替换了 EMR 上的 /usr/lib/spark 目录。这就成功了。


0
投票

按照下面的指南,我可以使用本机 BLAS 库。

https://spark.apache.org/docs/latest/ml-linalg-guide.html

https://github.com/luhenry/netlib

sbt 依赖:

"dev.ludovic.netlib" % "blas" % "3.0.3"

然后在您的 scala 代码中,检查以下语句:

// import statement
import dev.ludovic.netlib.blas.NativeBLAS

// print this in your function
println(s"BLAS dev.ludovic.netlib.blas.NativeBLAS: ${NativeBLAS.getInstance()}")

它应该打印出类似这样的内容:

BLAS dev.ludovic.netlib.blas.NativeBLAS: dev.ludovic.netlib.blas.JNIBLAS@68a4dcc6
© www.soinside.com 2019 - 2024. All rights reserved.