用于机器学习基础设施的 Ray#

提示

如果你正在使用 Ray 构建机器学习平台,我们很想听听你的想法!填写这份简短表格参与进来吧。

Ray 及其 AI 库为寻求简化其机器学习平台的团队提供了统一的计算运行时。Ray 的库,如 Ray Train、Ray Data 和 Ray Serve,可用于构建端到端机器学习工作流,提供数据预处理(作为训练的一部分)以及从训练过渡到服务的特性和 API。

../_images/ray-air.svg

为什么选择 Ray 用于机器学习基础设施?#

Ray 的 AI 库通过为可扩展机器学习提供无缝、统一和开放的体验,简化了机器学习框架、平台和工具的生态系统。

../_images/why-air-2.svg

1. 无缝从开发到生产:Ray 的 AI 库减少了从开发到生产过程中的摩擦。借助 Ray 及其库,相同的 Python 代码可以从笔记本电脑无缝扩展到大型集群。

2. 统一的机器学习 API 和运行时:Ray 的 API 支持在流行的框架(如 XGBoost、PyTorch 和 Hugging Face)之间进行切换,只需极少的代码更改。从训练到服务的一切都运行在单个运行时(Ray + KubeRay)上。

3. 开放且可扩展:Ray 是完全开源的,可以在任何集群、云或 Kubernetes 上运行。可以在可扩展的开发者 API 之上构建自定义组件和集成。

基于 Ray 构建的机器学习平台示例#

Merlin 是 Shopify 基于 Ray 构建的机器学习平台。它支持快速迭代以及分布式应用的扩展,例如产品分类和推荐。

../_images/shopify-workload.png

Shopify 基于 Ray 构建的 Merlin 架构。#

Spotify 使用 Ray 来构建高级应用,包括个性化主页播客内容推荐和个性化 Spotify Radio 曲目序列。

../_images/spotify.png

Ray 生态系统如何在 Spotify 赋能机器学习科学家和工程师。#

以下重点介绍了利用 Ray 的统一 API 构建更简单、更灵活的机器学习平台的公司。

为机器学习平台部署 Ray#

在这里,我们描述了你如何在你的基础设施中使用或部署 Ray。主要有两种部署模式——选择特定库使用,以及在现有平台内部使用。

核心思想是 Ray 可以补充你现有的基础设施和集成工具。

设计原则#

  • Ray 及其库处理 AI 应用和服务的繁重计算方面。

  • Ray 依赖外部集成(例如 Tecton、MLFlow、W&B)进行存储和追踪。

  • 工作流编排器(例如 AirFlow)是一个可选组件,可用于调度周期性作业、为作业启动新的 Ray 集群以及运行非 Ray 计算步骤。

  • 单个 Ray 应用内的任务图的轻量级编排可以使用 Ray 任务来处理。

  • Ray 库可以独立使用,也可以在现有机器学习平台内部使用,或者用于构建 Ray 原生机器学习平台。

选择你自己的库#

你可以选择想要使用的 Ray AI 库。

如果你是一名机器学习工程师,希望独立使用 Ray 库来解决特定的 AI 应用或服务用例,并且不需要与现有机器学习平台集成,则此模式适用。

例如,Alice 想使用 RLlib 为她的工作项目训练模型。Bob 想使用 Ray Serve 部署他的模型流水线。在这两种情况下,Alice 和 Bob 都可以独立使用这些库,无需任何协调。

此场景描述了 Ray 库目前的大多数用法。

../_images/air_arch_1.svg

在上面的图表中

  • 只使用了一个库——这表明你可以选择使用,并且无需替换整个机器学习基础设施即可使用 Ray。

  • 你可以使用Ray 的多种部署模式之一来启动和管理 Ray 集群和 Ray 应用。

  • Ray AI 库可以从外部存储系统(如 Amazon S3 / Google Cloud Storage)读取数据,也可以将结果存储在那里。

现有机器学习平台集成#

你可能已经拥有一个现有的机器学习平台,但想使用 Ray 机器学习库的某个子集。例如,一位机器学习工程师希望在他们的组织购买的机器学习平台(例如 SageMaker、Vertex)中使用 Ray。

Ray 可以通过与现有流水线/工作流编排器、存储和追踪服务集成来补充现有的机器学习平台,而无需替换整个机器学习平台。

../_images/air_arch_2.png

在上面的图表中

  1. 工作流编排器(如 AirFlow、Oozie、SageMaker Pipelines 等)负责调度和创建 Ray 集群以及运行 Ray 应用和服务。Ray 应用可能是更大编排工作流的一部分(例如,Spark ETL,然后在 Ray 上进行训练)。

  2. 任务图的轻量级编排可以完全在 Ray 内部处理。外部工作流编排器可以很好地集成,但只有在运行非 Ray 步骤时才需要。

  3. Ray 集群也可以用于交互式使用(例如 Jupyter notebooks、Google Colab、Databricks Notebooks 等)。

  4. Ray Train、Data 和 Serve 提供了与 Feast 等特征存储的集成,用于训练和服务。

  5. Ray Train 和 Tune 提供了与 MLFlow 和 Weights & Biases 等追踪服务的集成。