【问题标题】:Why Apache Spark ML on Dataproc Trains Only on Single Node?为什么 Dataproc 上的 Apache Spark ML 仅在单节点上训练?
【发布时间】:2021-03-14 15:50:59
【问题描述】:

我是分布式 ML 的新手,目前正在做我的个人项目

我在 Cloud Dataproc 上使用 PySpark 训练我的模型并像下面的代码一样构建管道

spark = SparkSession.builder.appName('sparkify-train').getOrCreate()
df = spark.read.parquet(path)

gbt = GBTClassifier()

paramGrid = ParamGridBuilder() \
    .addGrid(gbt.maxDepth, [4,8,12]) \
    .addGrid(gbt.maxIter, [5,10,15]) \
    .addGrid(gbt.featuresCol, ["features_1", "features_2"]) \
    .build()

tvs = TrainValidationSplit(estimator=gbt,
                           estimatorParamMaps=paramGrid,
                           evaluator=BinaryClassificationEvaluator(),
                           trainRatio=0.75)
tvs.fit(df)

注意:我没有在上面的代码中显示特征提取和其他内容

但在 CPU 利用率图表上,主节点是唯一的繁忙节点,而不是三个工作节点

我使用 Cloud Shell 和以下命令创建 Dataproc 集群。此命令是从 Dataproc 创建集群 UI 生成的。

gcloud beta dataproc clusters create sparkify --enable-component-gateway --region asia-southeast2 --subnet default --zone asia-southeast2-c 
--master-machine-type custom-1-3840 --master-boot-disk-type pd-ssd --master-boot-disk-size 50 --num-workers 3 --worker-machine-type custom-1-3840 --worker-boot-disk-type pd-ss
d --worker-boot-disk-size 30 --image-version 2.0-ubuntu18 --optional-components JUPYTER,ZEPPELIN --project wskt-trek

这是上面命令中的集群属性:

我只是想知道我的代码有什么问题吗?或者有什么我想念的设置吗?我认为所有工作人员的 CPU 都应该具有高利用率。谢谢!

【问题讨论】:

  • 你是通过dataproc GUI手动创建集群还是自动创建的,你可以在集群中点击dataproc并共享属性
  • 嗨@NassereddineBelghith,我已经更新了我的问题。如果你能帮上忙,这对我来说意义重大。谢谢!

标签: apache-spark google-cloud-platform pyspark google-cloud-dataproc


【解决方案1】:

集群配置良好,在您使用笔记本的情况下,在这种情况下建立了客户端模式,我建议您:

  1. 您创建了一个包含多个 master(例如 2 个 master 和 3 个 worker)的 spark 集群,这不是一个好的做法(您将在第三点中理解为什么)。

  2. 您可以使用spark-tensorflow-distributor,它是 TensorFlow 中的一个开源原生包,可帮助用户在 Spark 集群上使用 TensorFlow 进行分布式训练。它建立在 tensorflow.distribute.Strategy 之上,这是 TensorFlow 2 的主要功能之一。有关详细的 API 文档,请参阅 docstrings。有关分布式 TensorFlow 的一般文档,请参阅使用 TensorFlow 进行分布式训练。

  3. 最重要的一点是:不要把你的视野限制在这个层面,我的意思是在使用笔记本的层面上,看看火花簇的行为,为什么?那么在训练你的模型之后,你需要将它保存为一个 pmml 文件然后部署它,spark 可以正常工作。您可以参考这个简单的example 并尝试部署您的模型,并在使用notebbok 客户端模式时将Dataproc 中的spark 集群行为与上一个进行比较。

【讨论】:

  • 我会尝试提交一份工作来训练我的模型并更新我的结果。谢谢!
猜你喜欢
  • 2020-09-14
  • 2017-07-31
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多