Spark LDA困境 - 预测和OOM问题

时间:2016-01-29 17:12:40

标签: apache-spark lda apache-spark-mllib topic-modeling

我正在评估Spark 1.6.0以构建和预测大型(数百万个文档,数百万个功能,数千个主题)LDA模型,这是我可以通过Yahoo!轻松完成的事情。 LDA。

从Java示例开始,我使用Distributed model / EM优化器构建了一个100K doc / 600K feature / 250 topic / 100迭代模型。模型很好,所得到的主题是连贯的。然后,我编写了一个新的单文档预测例程(SPARK-10809;我选择了基于Spark 1.6.0的自定义发行版)的包装器,以获取新的,看不见的文档(skeleton code)的主题。由此产生的预测生成缓慢(我在SPARK-10809中提供了修复)但更令人担忧,语无伦次(topics/predictions)。如果一份文件主要是关于足球,那么我期待足球"足球"主题(主题18)位于前10名。

无法判断我的预测代码中是否存在错误 - 或者是否因为我使用的是基于分布式/ EM的模型(正如jasonl在此暗示的那样{{3 }) - 我决定尝试更新的本地/在线模型。我花了几天时间调整我的240核/ 768GB RAM 3节点集群无济于事;似乎无论我尝试什么,我都会试图以这种方式构建模型。

我尝试了以下各种设置:

  • driver-memory(8G)
  • executor-memory(1-225G)
  • spark.driver.maxResultSize(包括禁用它)
  • spark.memory.offheap.enabled(true / false)
  • spark.broadcast.blockSize(目前为8米)
  • spark.rdd.compress(目前为真)
  • 更改序列化程序(当前为Kryo)及其最大缓冲区(512m)
  • 增加各种超时以允许更长的计算 (executor.heartbeatInterval,rpc.ask / lookupTimeout, spark.network.timeout)spark.akka.frameSize(1024)

在不同的设置下,由于堆外分配错误(本机内存分配(mmap)无法映射X字节以提交保留内存)和java.lang.OutOfMemoryError:Java堆空间,它似乎在JVM核心转储之间振荡。我看到模型的引用接近我的数量级(databricks.com/blog/2015/03/25/topic-modeling-with-lda-mllib-meets-graphx.html),所以我一定做错了。

问题:

  1. 我的预测程序看起来不错吗?这是一个一个错误的错误 在某个地方w.r.t无关紧要的预测主题?
  2. 我是否有机会使用Spark构建一个上述数量级的模型?雅虎可以通过适度的RAM要求来实现这一目标。
  3. 关于我接下来可以尝试的任何指示都将非常感激!

0 个答案:

没有答案