spark集群环境下如何高效训练word2vec模型?

Lei*_* Li 2 machine-learning apache-spark word2vec

我想在我的 Spark 集群上训练关于 10G 新闻语料库的 word2vec 模型。下面是我的spark集群的配置?

  1. 一主四工
  2. 每个80G内存和24核

但是我发现使用 Spark Mllib 训练 Word2vec 并没有充分利用集群的资源。例如: ubuntu中top命令的图片

如上图所示,一个worker只使用了100%的cpu,其他三个worker没有使用(所以不贴他们的图片),刚才我是如何训练一个关于2G新闻语料的word2vec模型,大约需要6h ,所以我想知道如何更有效地训练模型?提前谢谢大家:)


UPDATE1:以下命令是我在 spark-shell 中使用的

  1. 如何启动 spark-shell spark-shell \ --master spark://ip:7077 \ --executor-memory 70G \ --driver-memory 70G \ --conf spark.akka.frameSize=2000 \ --conf spark.driver.maxResultSize=0 \ --conf spark.default.parallelism=180
  2. 以下命令是我用来在 spark-shell 中训练 word2vec 模型的命令: //import related packages import org.apache.spark._ import org.apache.spark.mllib.linalg.{Vector, Vectors} import org.apache.spark.mllib.feature.{Word2Vec, Word2VecModel} //read about 10G newsdata corpus val newsdata = sc.textFile("hdfs://ip:9000/user/bd/newsdata/*",600).map(line => line.split(" ").toSeq) //Configure word2vec parameters val word2vec = new Word2Vec() word2vec.setMinCount(10) word2vec.setNumIterations(10) word2vec.setVectorSize(200) //train the model val model = word2vec.fit(newsdata)

更新2:

我已经训练了大约 24 小时的模型,但它没有完成。集群是这样运行的:一个worker只使用了100%的cpu,其他三个worker没有像以前那样使用。

小智 5

在训练 Word2Vec 模型时,我在 Python 中遇到了类似的问题。在此处查看 word2vec 的 PySpark 文档,内容如下:

setNumIterations(numIterations) 设置迭代次数(默认值:1),该次数应小于或等于分区数。

1.2.0 版中的新功能。

setNumPartitions(numPartitions)设置分区数(默认值:1)。使用较小的数字以提高准确性。

1.2.0 版中的新功能。

我的 word2vec 模型停止挂起,当我增加模型使用的分区数时,Spark 不再耗尽内存,以便 numIterations <= numPartitions

我建议你设置word2vec.setNumIterations(1)word2vec.setNumPartitions(10)