【问题标题】:Breeze pinv (Moore-Penrose) pseudo-inverse function gives OutOfMemory error using SparkBreeze pinv (Moore-Penrose) 伪逆函数使用 Spark 给出 OutOfMemory 错误
【发布时间】:2017-09-10 22:18:49
【问题描述】:

我正在 Spark 中开发一种极端学习机器类型的神经网络,它需要使用 Moore-Penrose 伪逆函数。这在任何 Spark 库中都不可用,因此我使用的是 Breeze,它需要将 Spark 数据结构转换为 Breeze 矩阵。当我到达beta = pinv(H) * T 时,一切都因OOM 异常而失败(我认为这在Spark 中是不可能的)。任何想法为什么?

pinv 是 Breeze 中的 Moore-Penrose 伪逆。 H 是一个 35,000 行和 10 列的矩阵。 SVD 应该能够应对这种情况。它不是一个特别大的数据集,仅占用 30Mb。我在笔记本电脑上本地运行所有内容,在云中没有任何内容。我的笔记本电脑(MacBook Air)上有 8G 内存。

我读到您可以使用 spark-shell 命令增加驱动程序内存,但我不知道如何执行此操作,或者它如何与我的 IDE 中设置 SparkSession 的代码链接

val spark: SparkSession = SparkSession
  .builder()
  .master("local[*]")
  .appName("ELMPipelineTest")
  .getOrCreate()`

【问题讨论】:

  • 好的,谢谢...接下来怎么办,你觉得呢?你是说这太大了,不能在我的笔记本电脑上工作吗? SVD 对算法至关重要,没有它,它就无法工作。您认为增加驱动程序内存会有所不同吗?我真的不知道如何更改内存,说明对于初学者来说非常不透明。感谢您的帮助!

标签: scala apache-spark matrix out-of-memory


【解决方案1】:

我按如下方式解决了这个问题。首先,应用程序必须在命令行上运行,而不是通过 IDE,因为更改 Spark 驱动程序内存必须在构建 JVM 之前完成。我使用 sbt 作为我的构建工具,所以从我项目的顶级主管,通过我运行的 Linux shell:

sbt compile
sbt package // this creates a jar file
$SPARK_HOME/bin/spark-submit --class dev.elm.ELMPipeline --master  local[4] --driver-memory 8G path/to/jar.jar 

我首先将 $SPARK_HOME 设置为 spark home 变量。 这避免了 Java OOM 错误。感谢@RafalKwasny 指出这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2015-05-12
    • 2019-07-26
    • 2016-12-31
    • 1970-01-01
    • 2014-06-10
    相关资源
    最近更新 更多