Ray 是一个开源的高性能分布式执行框架,主要旨在为可扩展和并行的 Python 及机器学习应用提供支持。它使开发者能够轻松地将 Python 代码从单机扩展到集群,而无需大幅修改代码。Ray 特别用于超参数调优、大规模训练和服务等机器学习工作负载。
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20250709151919564451/Features-of-RAY-A-Distributed-Computing-Framework.webp">Features-of-RAY-A-Distributed-Computing-FrameworkKey Features of RAY
RAY 的关键特性
- 易于使用的 API:Ray 提供了像 @ray.remote 这样的装饰器,只需极少的代码更改即可并行化任务。它从开发者那里抽象出了底层分布式计算的复杂性。这种 Python 优先的设计使其深受 ML 从业者和数据科学家的喜爱。
- 可扩展的并行性:Ray 支持细粒度和粗粒度的并行,从而能够实现众多并发任务。它可以高效地在集群中的核心和机器之间分配任务。它在 CPU、GPU 和 TPU 之间可以无缝协作。
- 内置库:Ray 包含以 ML 为中心的库,如 Tune、RLlib、Serve 和 Train。这些库有助于超参数调优、强化学习、模型训练和部署。所有库都是完全分布式的,并针对性能进行了优化。
- 容错与检查点:Ray 会自动重试失败的任务并支持检查点。这确保了长时间运行的作业可以在不重启的情况下恢复。对于关键任务的工作负载,它具有高度的可靠性。
- 支持多种后端:Ray 与 PyTorch、TensorFlow、Scikit-learn 等各种框架集成。它支持云原生或本地系统之上的分布式 Actor 和任务。它还可以与 Docker、Kubernetes 以及 AWS/GCP 等云平台良好配合。
RAY 的安装
要安装 Ray,请按照以下步骤操作:
首先,我们在我们的环境中安装 Ray 库。
> !pip install ray
现在,导入该库以使用其函数,并将 Ray 用于各种用例。
> import ray
RAY 的架构
!Architecture-of-RAYArchitecture of RAY – Distributed Computing Framework
1. Ray 集群:Ray 集群由一个头节点和多个工作节点组成。头节点负责管理元数据和任务调度。工作节点则负责执行实际的任务并返回结果。
2. Ray 驱动器:驱动器是我们提交任务到 Ray 集群的 Python 脚本。它与 Ray 运行时交互,以创建和管理远程函数及 Actor。它可以在头节点或任何外部节点上运行。
3. Ray 调度器:Ray 使用全局控制存储和对象存储来管理任务调度。它跟踪任务依赖关系并将任务分配给可用资源。调度器的逻辑是集中的,但操作是分布式的。
4. 任务和 Actors:
- 任务:使用 @ray.remote 远程运行的无状态函数。
- Actors:有状态对象,在多次方法调用之间维护本地状态。
- 两者都可以跨节点并发且独立地运行。
5. 对象存储:对象存储存储远程任务(例如 futures)的结果。它确保零拷贝数据共享和快速进程间通信。每个节点都有一个通过 plasma 连接的本地对象存储。
Ray 程序的工作流程
- 启动 Ray 集群:我们可以通过 ray.init() 在本地启动 Ray,或使用 ray.init(address="…") 连接到集群。头节点初始化运行时;工作节点注册自身。日志和仪表板启动以供监控。
- 定义远程函数:对我们想要并行运行的任何函数使用 @ray.remote 装饰器。Ray 会自动序列化并分发函数调用。函数返回 ObjectRef,这是一个指向结果的类 Future 句柄。
- 并行执行任务:使用 .remote() 调用远程函数,并使用 ray.get() 收集结果。我们可以多次调用 .remote() 来展开并行计算。这对于批处理或模拟非常有用。
- 使用 Actors 处理有状态任务:使用 @ray.remote 定义类,以在调用之间维护状态。Actors 非常适合用于环境、服务或模拟。每个 actor 在单独的进程/机器上运行,并由 Ray 管理。
- 监控执行和日志:我们可以使用 Ray 仪表板查看任务图、内存和 CPU/GPU 使用情况。这有助于跟踪性能并调试分布式应用程序中的问题。Ray 还会自动记录任务失败和重试情况。
一些重要的 Ray 库
- [Ray Tune](h