Ray是一个开源分布式计算框架,旨在扩展人工智能和Python工作负载。它提供了一个统一的编程模型,用于构建和运行分布式应用,涵盖从数据处理到模型训练和服务的各个环节。Ray最初由伯克利人工智能研究实验室和多伦多大学开发,于2018年首次公开发布。它已成为机器学习生态系统中的基础工具,被OpenAI、Anthropic和亚马逊网络服务等组织用于管理复杂的并行任务。
该框架通过抽象出集群管理和任务调度等底层细节,简化了分布式计算。开发者编写的代码看起来是顺序执行的,但实际上在集群中的多台机器上并行运行。Ray支持构建在其核心之上的多种库,包括用于超参数调优的Ray Tune、用于模型服务的Ray Serve,以及用于分布式数据处理的Ray Data。其设计强调容错性、动态任务调度和高效内存共享,使其适用于研究和生产环境。
架构与核心组件
Ray的架构由几个关键组件组成。Ray Core提供了基本原语:任务、Actor和对象。任务是无状态函数,在远程执行,而Actor是有状态的工作进程,可以在调用之间保持状态。对象是存储在分布式对象存储中的不可变值,支持任务之间的高效数据共享。Raylet是节点级组件,负责管理资源、调度任务并与其他节点协调。全局控制存储(GCS)维护集群元数据,并作为中央协调点。
Ray还包括Ray集群,可以在单台机器、本地或谷歌云和Azure等云平台上启动。该框架与Kubernetes和YARN等流行集群管理器集成,支持从笔记本电脑无缝扩展到数千个节点。这种灵活性使Ray成为需要大规模并行的深度学习工作负载的热门选择。
库与生态系统
Ray拥有丰富的库生态系统,针对AI生命周期的不同阶段量身定制。Ray Tune自动化超参数优化,支持分布式执行,并与PyTorch和TensorFlow等框架集成。Ray Serve支持可扩展的模型服务,处理请求路由、批处理和自动缩放。Ray Data提供分布式数据处理API,允许用户加载、转换并将大型数据集输入训练管道。此外,Ray RLlib是一个强化学习库,提供可扩展算法并支持多智能体环境。
这些库构建在Ray Core之上,确保一致性和互操作性。例如,用户可以使用Ray Data预处理数据,使用TensorFlow等框架训练模型,使用Ray Tune调优超参数,并使用Ray Serve部署模型,所有这些都在同一集群内完成。这种统一方法减少了运维开销并加速了开发。
采用与行业应用
Ray已被工业界和学术界广泛采用。OpenAI和Anthropic等公司使用Ray训练和服务大型语言模型,利用其处理跨数百个GPU的分布式训练能力。亚马逊网络服务提供Amazon SageMaker Ray,这是一项将Ray与其ML平台集成的托管服务。谷歌云和Azure也支持Ray集群,使其对广泛用户可访问。
除了科技巨头,Ray还用于金融、医疗保健和自动驾驶领域。例如,Waymo已将Ray用于模拟和数据处理,而直觉外科将其用于医学影像分析。该框架的灵活性也使其成为学术研究的主要工具,麻省理工学院计算机科学与人工智能实验室、斯坦福人工智能实验室和卡内基梅隆大学的出版物在分布式系统和AI研究中引用了Ray。
性能与可扩展性
Ray专为高性能和可扩展性而设计。它使用分布式调度器,每秒可处理数百万个任务,具有低延迟和高吞吐量。对象存储使用共享内存和零拷贝序列化,以最小化数据传输开销。Ray还支持动态资源分配,允许任务请求特定资源(如GPU或内存),并可在空闲时缩减到零。
基准测试表明,Ray在许多工作负载下可以实现近线性扩展。例如,使用Ray Tune训练神经网络模型可以将超参数搜索时间比顺序执行减少一个数量级。在生产环境中,Ray集群已扩展到数千个节点,如uber和Netflix等公司的部署所示。
社区与开发
Ray作为Apache 2.0许可下的开源项目开发,拥有活跃的贡献者社区。该项目托管在GitHub上,已获得数千颗星和来自全球开发者的贡献。核心团队最初来自加州大学伯克利分校的RISELab,继续推动创新,定期发布新功能和改进。社区维护广泛的文档、教程和示例,使新手易于上手。
Ray的治理由Ray项目监督,包括指导委员会和技术顾问委员会。主要版本在项目博客上发布,社区每年举办Ray Summit等会议,分享最佳实践和使用案例。这种积极开发确保Ray保持在AI分布式计算领域的前沿。
结论
Ray已确立为AI领域分布式计算的领先开源框架。其简单性、可扩展性和丰富生态系统的结合,使其成为研究人员和工程师的首选。随着AI模型规模和复杂性的增长,Ray在实现高效并行计算方面的作用可能会扩大,巩固其在现代AI基础设施栈中的地位。