为什么netlib-java原生的blas / lapack库不能提高性能?

时间:2018-12-24 17:02:16

标签: maven apache-spark-mllib recommender-systems netlib-java

我正在使用这段代码来计算火花建议:

    SparkSession spark = SparkSession
            .builder()
            .appName("SomeAppName")
            .config("spark.master", "local[" + args[2] + "]")
            .config("spark.local.dir",args[4])
            .getOrCreate();
    JavaRDD<Rating> ratingsRDD = spark
            .read().textFile(args[0]).javaRDD()
            .map(Rating::parseRating);
    Dataset<Row> ratings = spark.createDataFrame(ratingsRDD, Rating.class);
    ALS als = new ALS()
            .setMaxIter(Integer.parseInt(args[3]))
            .setRegParam(0.01)
            .setUserCol("userId")
            .setItemCol("movieId")
            .setRatingCol("rating").setImplicitPrefs(true);

    ALSModel model = als.fit(ratings);
    model.setColdStartStrategy("drop");
    Dataset<Row> rowDataset = model.recommendForAllUsers(50);

这些是使这些代码起作用的maven依赖项:

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.4.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.4.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-mllib_2.11</artifactId>
        <version>2.4.0</version>
    </dependency>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.11.8</version>
    </dependency>

使用此代码计算推荐数据大约需要70秒。这段代码会产生以下警告:

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

现在,我尝试通过在maven中添加此依赖项来启用netlib-java:

    <dependency>
        <groupId>com.github.fommil.netlib</groupId>
        <artifactId>all</artifactId>
        <version>1.1.2</version>
        <type>pom</type>
    </dependency>

为避免此新环境崩溃,我不得不做以下额外的技巧:

LD_PRELOAD=/usr/lib64/libopenblas.so

现在它也可以工作,它不发出任何警告,但它的工作速度较慢,平均执行相同的计算大约需要170秒。我正在CentOS上运行它。

使用本机库不是应该更快吗?有可能使其更快吗?

1 个答案:

答案 0 :(得分:0)

  1. 首先您可以检查您的centos版本,因为centos 6可能未使用本机库,请检查this

  2. 据我所知,ALS算法自2.0版本以来已得到改进,您可以检查 Highlights in 2.2

    和2.2中的源代码一样:

    enter image description here

    所以本机库没有帮助!