在 Ray (Modin) 上使用 Pandas#
Modin(以前称为 Pandas on Ray)是一个数据帧操作库,它通过作为即插即用型替代品来使用户能够加速其 pandas 工作负载。Modin 还支持其他 API(例如电子表格)和库,例如 xgboost。
import modin.pandas as pd
import ray
ray.init()
df = pd.read_parquet("s3://my-bucket/big.parquet")
您可以在笔记本电脑或集群上使用 Ray 上的 Modin。在本文档中,我们将说明如何设置兼容 Modin 的 Ray 集群以及如何将 Modin 连接到 Ray。
注意
在 Modin 的早期版本中,您必须在导入 Modin 之前初始化 Ray。从 Modin 0.9.0 开始,情况已不再如此。
将 Modin 与 Ray 的自动扩展器一起使用#
为了将 Modin 与 Ray 的自动扩展器 一起使用,您需要确保在启动时安装了正确的依赖项。Modin 的存储库中有一个 yaml 文件和一组教程笔记本,以确保 Ray 集群具有正确的依赖项。集群启动后,只需导入即可连接 Modin。
import modin.pandas as pd
import ray
ray.init(address="auto")
df = pd.read_parquet("s3://my-bucket/big.parquet")
只要在创建任何数据帧之前初始化 Ray,Modin 就可以连接并使用 Ray 集群。
Modin 如何使用 Ray#
Modin 具有分层架构,数据操作的核心抽象是 Modin Dataframe,它实现了一种新颖的代数,使 Modin 能够处理所有 pandas 功能(有关架构的更多信息,请参阅 Modin 的 文档)。Modin 的内部数据帧对象具有一个调度层,该层能够使用 Ray 对数据进行分区和操作。
数据帧操作#
Modin Dataframe 使用 Ray Tasks 来执行数据操作。与用于数据操作的 actor 模型相比,Ray Tasks 具有许多优势:
多个任务可以同时操作相同的对象
Ray 对象存储中的对象是不可变的,因此可以更轻松地跟踪来源和 lineage
随着新工作节点上线,数据将在任务调度到新节点时进行重新分配
相同的分区无需复制,这对于选择性修改数据的操作(例如
fillna)尤其有利。具有更精细放置控制的更精细并行度
机器学习#
Modin 使用 Ray Actors 来提供其目前提供的机器学习支持。Modin 对 XGBoost 的实现能够为每个节点启动一个 actor,并将该节点上的所有分区聚合到 XGBoost actor。Modin 能够精确指定每个 actor 在创建时的节点 IP,从而对放置进行精细控制——这是分布式训练性能的必备条件。