Ray 是什么?为什么 AI 数据处理越来越多用 Ray?

第 1219 题 约 3 分钟读完

本文目录
  1. 面试怎么回答
  2. Ray 是什么
  3. 为什么 AI 数据处理适合用 Ray
  4. Spark 仍然擅长的
  5. 实际中怎么分工
  6. 引入 Ray 要考虑的

面试怎么回答

Ray 是一个通用分布式计算框架,用 task 和 actor 把 Python 函数和类分布式执行,上面有 Ray Data、Train、Serve、Tune 等库。AI 数据处理适合用 Ray,是因为一条流水线里 CPU 和 GPU 步骤混在一起,Ray 能为不同步骤分配不同资源;模型可以作为 actor 加载一次常驻复用;流式执行让 GPU 不空等;和 PyTorch 等 Python 生态配合自然。Spark 仍然擅长大规模结构化 SQL 和 ETL,优化器和数据湖集成成熟。实践中通常组合:Spark 做结构化清洗和样本拼接,Ray 做批量 Embedding、多模态推理这类 GPU 处理,结果写回数据湖。引入 Ray 要考虑部署运维、和现有调度权限监控的集成以及学习成本。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

Spark 是大数据批处理的事实标准,但在 AI 团队里,Ray 出现得越来越多:数据预处理、批量推理、分布式训练、模型服务。面试官问这题,想看你能不能讲清 Ray 和 Spark 的定位差异,而不是简单说「Ray 更新更好」。

Ray 是什么

Ray 是一个通用的分布式计算框架,核心是用很少的代码把 Python 函数和类变成分布式执行的任务(task)和有状态的服务(actor)。在此基础上有一组库:

  • Ray Data:分布式数据处理,特别适合「读数据 → 预处理 → 模型推理 → 写结果」这类流水线;
  • Ray Train:分布式训练;
  • Ray Serve:模型在线服务;
  • Ray Tune:超参数调优。

为什么 AI 数据处理适合用 Ray

  1. 异构资源调度:一条流水线里,有的步骤用 CPU(解码、预处理),有的用 GPU(推理)。Ray 可以给不同步骤分配不同的资源,让 CPU 和 GPU 同时满负荷工作;
  2. 有状态的 worker:模型加载一次,作为 actor 常驻,持续处理数据。Spark 的任务模型里,加载大模型并在多个任务之间复用相对别扭;
  3. 流式执行:数据不需要整个阶段完成才进入下一个阶段,边读边处理边推理,内存占用低、GPU 不会空等;
  4. Python 原生:AI 生态(PyTorch、Hugging Face)都是 Python,Ray 和它们配合自然;
  5. 一套框架覆盖多个环节:预处理、训练、推理、服务都可以在 Ray 上做。

Spark 仍然擅长的

  • 大规模结构化数据的 SQL 分析和 ETL;
  • 成熟的优化器、Shuffle、和数据湖生态的集成;
  • 团队已有的大量任务和运维经验。

实际中怎么分工

常见的做法是组合:

  • Spark 做结构化的 ETL、数据清洗、样本拼接,产出 Parquet 或其他表格式;
  • Ray 读取这些数据,做需要 GPU 的处理:批量 Embedding、多模态数据的解码和推理、模型打分;
  • 结果再写回数据湖,供后续分析。

引入 Ray 要考虑的

  • 集群的部署和运维(很多团队用 KubeRay 在 Kubernetes 上运行);
  • 和现有调度系统、权限、监控的集成;
  • 团队的学习成本。