【问题标题】:Tuning model fits in Spark ML调整模型适合 Spark ML
【发布时间】:2017-08-12 07:14:04
【问题描述】:
我正在通过 Spark ML 在 Pyspark 中拟合大量模型(请参阅:How best to fit many Spark ML models),我想知道如何加快个人拟合速度。
我的数据集是一个大约 50gb 的 spark 数据帧,从 libsvm 格式中读取,并且我在动态分配的 YARN 集群上运行,分配的执行程序内存 = 10gb。拟合一个逻辑回归分类器,它创建了大约 30 个步骤的treeAggregate at LogisticRegression.scala:1018,交替随机读取和随机写入,每个 ~340mb。
执行者来来去去,但典型的阶段运行时间似乎约为 5 秒。有什么可以提高这些配合性能的方法吗?
【问题讨论】:
标签:
apache-spark
pyspark
apache-spark-ml
【解决方案1】:
作为 Spark 中的一般工作,您可以做一些事情来缩短训练时间。
spark.driver.memory 留意您的驱动程序内存,一些算法确实将数据混洗到您的驱动程序(以减少计算时间),因此它可能是增强源或至少是有一点没注意。
更改 spark.executor.memory 使其使用作业所需的最大值,但它也尽可能少地使用,以便您可以在集群上的每个节点(机器)中安装更多的执行器,随着您有更多的工人,您将有更多的计算机能力来处理这项工作。
spark.sql.shuffle.partitions 因为您可能使用 DataFrames 来操作数据,请尝试在此参数上设置不同的值,以便您可以为每个执行程序执行更多任务。
spark.executor.cores 使用它低于 5 并且你很好,高于它,你可能会增加执行器必须处理其中的任务“洗牌”的时间。
缓存/持久化:尝试在巨大的转换之前持久化你的数据,如果你害怕你的执行器无法处理它,请使用 StorageLevel.DISK_AND_MEMORY,所以你可以同时使用两者.
重要提示:所有这些都是基于我自己的经验,我自己使用 Spark ML 在具有 1TB-5TB 和 30-50 个特征的数据集上训练算法,我已经研究以改善自己的工作,但我'没有资格作为您问题的真相来源。详细了解您的数据并查看执行程序的日志以进一步增强。