在 Ray 上使用 Pandas (Modin)#

Modin(以前称为 Pandas on Ray)是一个 dataframe 操作库,允许用户通过作为 pandas 的直接替代品来加速他们的 pandas 工作负载。Modin 还支持其他 API(例如 spreadsheet)和库,如 xgboost。

import modin.pandas as pd
import ray

ray.init()
df = pd.read_parquet("s3://my-bucket/big.parquet")

你可以在笔记本电脑或集群上使用 Modin on Ray。本文档介绍了如何设置与 Modin 兼容的 Ray 集群以及如何将 Modin 连接到 Ray。

注意

在 Modin 的先前版本中,你必须在导入 Modin 之前初始化 Ray。从 Modin 0.9.0 版本开始,情况已不再如此。

将 Modin 与 Ray 的自动伸缩器一起使用#

为了将 Modin 与 Ray 的自动伸缩器 一起使用,你需要确保在启动时安装了正确的依赖项。Modin 的仓库中有一个示例 yaml 文件和一组教程 notebooks,以确保 Ray 集群具有正确的依赖项。集群启动后,只需导入即可连接 Modin。

import modin.pandas as pd
import ray

ray.init(address="auto")
df = pd.read_parquet("s3://my-bucket/big.parquet")

只要在创建任何 dataframe 之前初始化 Ray,Modin 就能够连接并使用 Ray 集群。

Modin 如何使用 Ray#

Modin 采用分层架构,数据操作的核心抽象是 Modin Dataframe,它实现了一种新颖的代数,使 Modin 能够处理所有 pandas 操作(有关架构的更多信息,请参阅 Modin 的文档)。Modin 的内部 dataframe 对象具有调度层,能够使用 Ray 对数据进行分区和操作。

Dataframe 操作#

Modin Dataframe 使用 Ray 任务执行数据操作。与 actor 模型相比,Ray 任务在数据操作方面具有许多优势:

  • 多个任务可以同时操作同一对象

  • Ray 对象存储中的对象是不可变的,更容易跟踪来源和谱系

  • 随着新 worker 上线,数据混洗将在任务调度到新节点时发生

  • 相同的分区无需复制,这对于选择性修改数据的操作(例如 fillna)尤其有利。

  • 更细粒度的并行性以及更细粒度的放置控制

机器学习#

Modin 使用 Ray Actors 提供当前的机器学习支持。Modin 对 XGBoost 的实现在每个节点上启动一个 actor,并将该节点上的所有分区聚合到 XGBoost Actor。Modin 能够在创建时精确指定每个 actor 的节点 IP,从而提供细粒度的放置控制——这对于分布式训练性能至关重要。