使用 pyspark.ml.connect 在 Databricks Connect 上训练 Spark ML 模型

本文提供了一个示例,演示如何使用该 pyspark.ml.connect 模块执行分布式训练来训练 Spark ML 模型并运行模型推理。

pyspark.ml.connect 是什么?

Spark 3.5 引入了 pyspark.ml.connect,旨在支持 Spark 连接模式和 Databricks Connect。 详细了解 Databricks Connect

pyspark.ml.connect 模块包括常见的学习算法和实用工具,包括分类、功能转换器、ML 管道和交叉验证。 此模块提供与旧版 pyspark.ml 模块类似的接口,但 pyspark.ml.connect 模块目前仅包含 pyspark.ml 中的一部分算法。 下面列出了支持的算法:

  • 分类算法:pyspark.ml.connect.classification.LogisticRegression
  • 功能转换器:pyspark.ml.connect.feature.MaxAbsScalerpyspark.ml.connect.feature.StandardScaler
  • 计算器:pyspark.ml.connect.RegressionEvaluatorpyspark.ml.connect.BinaryClassificationEvaluatorMulticlassClassificationEvaluator
  • 管道:pyspark.ml.connect.pipeline.Pipeline
  • 模型优化:pyspark.ml.connect.tuning.CrossValidator

要求

在 Databricks Runtime 17.0 及更高版本上,默认情况下,Spark 上的 Spark ML 连接在具有 标准 访问模式的计算资源上启用,但存在一些限制。 有关 标准计算,请参阅 Databricks Runtime 17.0 的限制。 如果需要 Spark 级别的分布式计算,用于那些在单个节点内存中无法适应的数据,或者需要执行分布式超参数调优,请使用标准计算资源上的 Spark ML。

对于 Databricks Runtime 14.0 ML 及更高版本,尤其是使用专用访问模式的计算资源上的 Databricks Runtime 17.0,在使用 Spark ML 时还有额外的要求:

  • 对群集设置 Databricks Connect。 请参阅 Databricks Connect 的计算配置。
  • 已安装 Databricks Runtime 14.0 ML 或更高版本。
  • 具有 专用 访问模式的计算资源。

示例笔记本

以下笔记本演示如何在 Databricks Connect 上使用分布式 ML:

Databricks Connect 上的分布式 ML

获取笔记本

对于 pyspark.ml.connect 中 API 的相关参考信息,Databricks 建议使用 Apache Spark API 参考

在标准计算环境下对 Databricks Runtime 17.0 的限制

  • 仅 Python:标准计算上的 Spark ML 仅支持 Python。 不支持 R 和 Scala。
  • 库支持:仅支持pyspark.ml包。 不支持包 pyspark.mllib
  • 模型大小约束:最大模型大小为 1 GB,因此训练非常大的模型可能不可行。 如果模型大小即将超过 1GB,则树模型训练将提前停止。
  • 内存约束:虽然数据可以分布在群集中,但训练的模型本身将缓存在驱动程序节点上,后者与其他用户共享。 每个会话的最大模型缓存大小为 10 GB,每个会话的最大内存中模型缓存大小为 25% Spark 驱动程序 JVM 内存。
  • 会话超时:标准计算上的缓存模型在处于非活动状态 15 分钟后自动超时,模型摘要丢失。 若要防止丢失模型,请在训练完成后的 15 分钟内将其保存到磁盘,或使会话保持活动状态并频繁使用。
  • 资源争用:在标准计算环境中,资源在工作区中的用户和作业之间共享。 并发运行多个大型作业可能会导致性能变慢或执行器槽的竞争。
  • 不支持 GPU:标准计算环境不支持 GPU 加速。 对于 GPU 加速的机器学习工作负载,建议使用专用 GPU 群集。
  • 有限的 SparkML 模型:不支持以下 SparkML 模型:
    • DistributedLDAModel
    • FPGrowthModel