news 2026/5/14 10:27:35

AI计算引擎:Ray

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI计算引擎:Ray

最近在看 verl 源码时,看到其主要使用了 Ray 实现资源调度和分布式训练的能力,然后看了下其他的强化学习框架,也有很多框架使用了 Ray,感觉 Ray 已经成为了现代强化学习领域实现分布式训练和资源调度的主流选择,所以还是有必要了解下它的一些核心概念和特性,这样看到相关代码时才能大概知道其作用。

Ray 是什么?

“An open source framework to build and scale your ML and Python applications easily.”

Ray 是由加州大学伯克利分校RISELabi开发的,RISELab是大数据和AI领域顶尖的实验室,Spark、vLLM 等也是出自这个实验室,并且这个实验室的成员还创建了Databricks(Spark创始人)、Anyscale(Ray初创成员) 这样的知名公司。

Ray 是一个开源的AI 计算引擎和统一框架,用于轻松构建和扩展机器学习与通用 Python 应用程序。它提供了一套统一的、高性能的分布式计算原语,支持从原型开发到生产部署的全生命周期。

Ray由一个核心分布式运行时(Ray Core)和一组用于简化机器学习计算的人工智能库组成:

核心组件

Ray 采用模块化设计,包含多个高层库,覆盖 ML 全流程:

组件功能关键能力
Ray Core分布式 Python 基础任务(Tasks)、参与者(Actors)、对象存储(Objects)——构建任意分布式应用
Ray Data数据加载与预处理高效、可扩展的数据摄取、转换、批处理(支持文本、图像、LLM 等)
Ray Train分布式模型训练支持 PyTorch、TensorFlow、XGBoost、Hugging Face 等主流框架
Ray Tune任意规模的超参数调优自动调参、实验管理、支持多种搜索算法(Optuna, HyperOpt 等)
Ray Serve模型在线服务低延迟、高并发的模型部署,支持 LLM、多模型组合、动态批处理
Ray RLlib强化学习工业级 RL 算法库,支持单智能体/多智能体、离线/在线训练

✅ 所有组件均基于 Ray Core 构建,共享同一套调度、容错、资源管理机制。

Ray Core

Ray Core 是 Ray 分布式计算框架的核心模块,它提供了一组极简但强大的原语(primitives),用于构建和扩展通用的 Python 分布式应用,能让你只需几行代码,就能将普通的 Python 或 Java 函数及类转换为分布式的无状态任务和有状态参与者。主要包含三个核心概念:

  1. Tasks(任务):远程执行的无状态函数。
  2. Actors(参与者):远程执行的有状态类实例。
  3. Objects(对象):存储在分布式对象存储中的数据。

使用 Task

Task 是在 Ray 集群上并行化你的 Python 函数的最简单方式。要创建和运行一个任务:

  1. 使用@ray.remote装饰函数,使其成为可远程执行的任务。
  2. 使用.remote()调用该函数,而不是进行常规的函数调用
  3. 使用用ray.get()从返回的future对象获取结果。
# Define the square task.@ray.remotedefsquare(x):returnx*x# Launch four parallel square tasks.futures=[square.remote(i)foriinrange(4)]# Retrieve results.print(ray.get(futures))# -> [0, 1, 4, 9]

✅ 优势:自动并行化、跨节点调度、容错。

使用 Actors

Task 是无状态的,而 Actor 则是有状态的,Actor 在方法调用之间会保持其内部状态。当你实例化一个Ray Actor 时:

  1. Ray 会在集群中的某个位置启动一个专用的工作进程
  2. Actor的方法在那个特定的工作进程上运行,并且能够访问和修改其状态
  3. Actor 按照接收方法调用的顺序串行执行这些调用,以保持一致性

要创建和实例化 Actor:

  1. @ray.remote装饰类,创建远程 Actor 实例。
  2. 每个 Actor 在独立进程中运行,维护内部状态。
  3. 方法调用也使用.remote(),按提交顺序串行执行。
# Define the Counter actor.@ray.remoteclassCounter:def__init__(self):self.i=0defget(self):returnself.idefincr(self,value):self.i+=value# Create a Counter actor.c=Counter.remote()# Submit calls to the actor. These calls run asynchronously but in# submission order on the remote actor process.for_inrange(10):c.incr.remote(1)# Retrieve final actor state.print(ray.get(c.get.remote()))# -> 10

✅ 适用场景:状态管理、模型服务、参数服务器等。

Objects

Ray的分布式对象存储能高效地跨集群管理数据。在Ray中处理对象主要有三种方式:

  • 隐式创建:当 Task 和 Actor 返回值时,这些值会自动存储在 Ray 的分布式对象存储中,并返回可在之后被检索的对象引用。
  • 显式创建:使用 ray.put() 将对象直接放入存储中。
  • 传递引用:可以将对象引用传递给其他 Task 和 Actor,这样可以避免不必要的数据复制,并支持延迟执行。
importnumpyasnp# Define a task that sums the values in a matrix.@ray.remotedefsum_matrix(matrix):returnnp.sum(matrix)# Call the task with a literal argument value.print(ray.get(sum_matrix.remote(np.ones((100,100)))))# -> 10000.0# Put a large array into the object store.matrix_ref=ray.put(np.ones((1000,1000)))# Call the task with the object reference as an argument.print(ray.get(sum_matrix.remote(matrix_ref)))# -> 1000000.0

总结

概念作用关键 API
Task无状态并行计算@ray.remote,.remote(),ray.get()
Actor有状态远程对象@ray.remote class, 方法.remote()
Object分布式共享数据ray.put()

Ray Core 的设计哲学:保持 API 极简,但组合能力极强,可构建从简单并行脚本到复杂分布式系统的各类应用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 17:20:40

【计算机毕业设计案例】基于java的校园闲置物品交易平台设计与实现基于Java的校园二手以物换物交易平台的设计与实现(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/5/12 17:22:48

【计算机毕业设计案例】基于Java的书店管理系统的设计与实现图书管理、订单处理、库存同步(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/5/6 20:28:35

《创业之路》-759-用科研思维做生产 → 效率低下、无法交付;用生产标准管科研 → 抑制创新、扼杀突破;用研发模式搞交付 → 成本失控、客户流失。

一、科研(适合大学或基础研究机构)1. 核心定义:科研(Scientific Research)是指在未知或高度不确定的科学领域中,通过系统性探索,试图发现新知识、新原理或新现象的过程。它不以直接应用为目标&a…

作者头像 李华
网站建设 2026/5/5 1:05:25

腾讯云应用服务器迁移:同一账户

介绍的主要是同一账户的服务器迁移,我申请了一个一个月的服务器,现在快到期了。然后我租了一个新的一年服务器。所以要把之前旧的服务器的部署内容转移到新的上面来。所以记录下过程。首先确认自己的新服务器空间是否够放旧的数据,这个很好理…

作者头像 李华
网站建设 2026/4/30 4:04:32

Java毕设选题推荐:基于Java的书店管理系统的设计与实现基于java私人书店管理系统设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/5/11 15:06:28

[BJDCTF2020]Mark loves cat

打开题目便是这样的,查看源代码没有什么发现,进行目录扫描返回如图HTTP 429 Too Many Requests 是一个标准的状态码,表示服务器在特定的时间内收到了来自你 IP 地址的过多请求。为了保护带宽和防止被攻击(如 DDoS 或暴力扫描&…

作者头像 李华