ray.data 是基于 ray core 的一层封装。依赖 ray.data,用户用简单的代码,就可以实现数据大规模的异构处理(主要指同时使用 CPU 和 GPU)。一句话总结:很简单好用,同时也有很多坑。
在 上一篇中,我们从用户接口出发,浅浅地梳理了一下 ray.data 的主要接口。本篇,我们从宏观的角度,大概串一下 ray.data 的基本原理。之后,我们再用几篇,结合代码细节和使用经验,探讨下比较重要的几块内容:执行调度、数据格式和避坑指南。
本文来自我的专栏《系统日知录》,如果你觉得文章还不错,欢迎订阅支持我。
概述
从高层来理解,ray.data 的一次数据处理任务大致可以分成前后相继的三阶段:
- 数据加载:将数据从系统外部读到 ray 的 Object Store 中 (如 read_parquet)
- 数据变换:利用各种算子在 Object Store 中对数据进行变换(如 map/filter/repartition)
- 数据写回:将 Object Store 中的数据写回外部存储(如 write_parquet)