Azure Databricks 上的 Ray 是什么?

Ray 是用于缩放 Python 应用程序的开源框架。 它包括特定于 AI 工作负载的库,使其特别适用于开发 AI 应用程序。 Azure Databricks 上的 Ray 允许运行 Ray 应用程序,同时获取 Azure Databricks 的所有平台优势和功能。

通过 Ray 2.3.0 及更高版本,可使用 Azure Databricks 在 Apache Spark 群集上创建 Ray 群集和运行 Ray 应用程序。

有关 Ray 上的机器学习入门信息(包括教程和示例),请参阅 Ray 文档。 有关 Ray 和 Apache Spark 集成的详细信息,请参阅 Spark 上的 Ray API 文档

请参阅本节中的其他文章。

什么是 Ray?

Ray 通过提供基本 Python 基元从头开始创建分布式应用程序,简化了分布式系统。 对于不熟悉分布式系统的 Python 开发人员,它提供与标准 Python 相同的易用性,同时管理业务流程、计划和容错。

Ray 和 Apache Spark 是互补框架。 Ray 擅长于逻辑并行性,可以处理像机器学习和强化学习这样动态、计算密集型的任务。 Apache Spark 专注于数据并行性,能够高效地处理大型数据集,以完成如 ETL 和数据分析等任务。 两者结合,为数据处理和复杂计算提供了强大的组合。

为什么在 Azure Databricks 上运行 Ray?

在 Azure Databricks 上运行 Ray 可以充分利用 Azure Databricks 生态系统的广度,通过开放源代码 Ray 中不可用的服务和集成来增强数据处理和机器学习工作流。 在 Azure Databricks 中运行 Ray 的益处包括:

  • 统一的平台:Azure Databricks 提供了一个统一的平台,可以在其中与 Apache Spark 一起运行 Ray 应用程序。 这种集成支持无缝的数据 ETL 操作、高效的数据传输以及在同一计算环境中的强大并行计算。
  • 治理和控制:使用 Unity Catalog 获取世系跟踪、数据版本控制和访问控制的优势,确保合规性和安全性。
  • 基础结构管理:利用 Azure Databricks Terraform 提供程序和 Azure Databricks 资产捆绑包等基础结构工具来管理群集和作业,确保简化的操作和可伸缩性。
  • 托管 Ray 群集:Ray 群集在与运行的 Apache Spark 群集相同的执行环境中管理。 这可确保无需复杂的基础结构设置即可实现可伸缩性、可靠性和易用性。
  • 模型服务和监视:将使用 Ray Train 训练的模型连接到 Mosaic AI 模型服务,以实现高可用性和低延迟的部署。 此外,使用 Lakehouse 监视跟踪模型预测质量和偏移,确保性能一致。
  • 增强型 ML 开发:与完全托管的 Azure Databricks MLflow 服务集成,以跟踪模型开发,促进 Ray 应用程序中的实验管理和可重复性。
  • 自动化工作流:使用 Databricks 作业自动执行流程,创建生产就绪管道,简化操作并减少手动干预。
  • 代码管理和协作:使用 Azure Databricks Git 文件夹高效管理代码,为 Ray 应用程序代码启用版本控制和协作开发的无缝 Git 集成。
  • 高效数据访问:将 Ray 应用程序连接到 Delta Lake,利用 Azure Databricks 广泛的数据集成生态系统,将 Ray 的功能扩展到更广泛的应用程序和输出。

通过在 Azure Databricks 上运行 Ray,可以获得一个集成生态系统,从而增强数据处理、机器学习和运营工作流。

用例 - 机器学习等

Ray 是一种通用的工具,可将 Python 的功能扩展到 DataFrame 操作的限制之外,使其成为高度自定义和专用分布式算法的理想工具。

机器学习和深度学习

利用 Ray 的机器学习库增强 ML 工作流:

  • 超参数优化:使用 Ray Tune 优化模型性能,以便进行高性能和可缩放的超参数搜索。
  • 分布式深度学习训练:跨多个节点缩放深度学习模型,支持 PyTorch、TensorFlow、HuggingFace 和 Keras 等常用框架。 非常适合用于训练计算机视觉模型或大型语言模型 (LLM)。
  • 传统机器学习:使用 Ray 来分发使用 scikit-learn 或 XGBoost 等流行库构建的传统机器学习模型的训练、评估和批次推理。

高性能计算 (HPC)

Ray 擅长于分发 HPC 工作负载,使其适合:

  • 数学计算:使用 Ray Core 在物理、基因组学或财务等领域执行复杂的计算,以进行高效的并行处理。
  • 时序预测:扩展预测模型,使用如 Prophet 或 ARIMA 等预测包并行运行估算。

数据处理和特征工程

Ray 还可以处理各种数据处理任务:

  • 计算特征:复杂的计算密集型特征工程任务可以从 Ray 的分布式计算体系结构中获益。
  • 音频、图像和视频处理:分发和加速多媒体数据的处理,使其非常适合语音识别、图像分类和视频分析中的应用程序。

限制

  • Apache Spark 上的 Ray 支持单用户(分配)访问模式,不支持隔离共享访问模式,仅支持作业群集。 无法使用基于无服务器的运行时在群集上启动 Ray 群集。
  • 避免运行 %pip 来在运行的 Ray 群集上安装包,因为这会关闭群集。 而应在初始化群集之前安装库。
  • 使用从 ray.util.spark.setup_ray_cluster 替代配置的集成可能会导致 Ray 群集不稳定。 避免在第三方应用程序中过度订阅 Ray 群集资源。
  • 如果遇到类似 ncclInternalError: Internal check failed 的错误,这表示群集中 GPU 之间的网络通信出现了问题。 若要解决此错误,请在训练代码中添加以下代码片段,以使用主网络接口。
import os
os.environ["NCCL_SOCKET_IFNAME"] = "eth0"