目录

Ray框架介绍

机器学习平台

Ray Core

示例

示例2

示例3

Ray Data组件

Ray Train组件

具体应用

相关资料


Ray框架介绍

Ray 是一个开源分布式计算框架,在 机器学习基础设施中发挥着至关重要的作用。Ray 促进分布式机器学习训练,使机器学习从业者能够有效利用多个 GPU 的能力。

Ray 允许开发者编写可以在集群上运行的分布式应用程序,并且可以指定任务运行时需要使用的GPU数量,而不必处理底层通信和同步的复杂性。

Ray可与Nvidia-docker等技术相结合,以实现在使用Ray进行分布式计算时,每个任务都在自己的隔离环境中。

Ray 最显着的优势之一是它能够无缝扩展 ML 工作负载。无论您是训练具有数十亿参数的模型还是执行复杂的计算,Ray 都能提供必要的弹性。这种可扩展性确保了即使模型规模和复杂性增加,机器学习模型也能快速有效地进行训练。

Ray 的核心是一个分布式任务调度器,可以智能地将任务分配到集群中的不同节点上

机器学习平台

Ray 及其 AI 库为希望简化 ML 平台的团队提供统一的计算运行时。Ray 的库(例如 Ray Train、Ray Data 和 Ray Serve)可用于组成端到端 ML 工作流程,提供用于数据预处理(作为训练的一部分)以及从训练过渡到服务的功能和 API。

Ray Core

  1. 任务和演员:Ray将计算工作分为任务(无状态函数)和演员(有状态的类实例),以便进行分布式执行。

  2. 分布式对象存储:Ray利用内存对象存储来共享数据,支持高效的数据访问和通信。

  3. 灵活的调度:Ray自动管理任务和资源调度,允许无缝扩展计算工作负载。

  4. 容错性:Ray通过数据和任务的自动复制实现高可靠性。

示例

# Define the square task.
@ray.remote
def square(x):
    return x * x

# Launch four parallel square tasks.
futures = [square.remote(i) for i in range(4)]

# Retrieve results.
print(ray.get(futures))
# -> [0, 1, 4, 9]

在分布式环境中执行一个简单的数值平方任务

示例2

# 定义一个叫Counter的actor类。
@ray.remote
class Counter:
    def __init__(self):
        self.i = 0  # 初始值设为0

    def get(self):
        return self.i  # 返回当前值

    def incr(self, value):
        self.i += value  # 将当前值增加指定的数值

# 创建一个Counter actor的实例。
c = Counter.remote()

# 提交调用到actor。这些调用在远程actor进程中异步执行,但按提交顺序执行。
for _ in range(10):
    c.incr.remote(1)  # 对i进行10次增量操作,每次增加1

# 获取最终actor状态。
print(ray.get(c.get.remote()))  # -> 10 打印最终的i值

这个代码演示了如何在Ray中定义和使用actor来进行状态的存储和异步操作。它创建了一个简单的计数器actor,通过10次远程调用增加其内部计数,最后检索并打印出这个计数器的最终值。 

示例3

import numpy as np

# 定义一个任务,用于计算矩阵中的值之和。
@ray.remote
def sum_matrix(matrix):
    return np.sum(matrix)  # 使用numpy的sum函数计算矩阵的总和

# 使用具体的参数值调用任务。
print(ray.get(sum_matrix.remote(np.ones((100, 100)))))  # -> 10000.0
# 此行输出100x100的全1矩阵的元素和,即10000.0

# 将一个大数组放入对象存储中。
matrix_ref = ray.put(np.ones((1000, 1000)))  # 创建1000x1000的全1矩阵并获取其引用

# 使用对象引用matrix_ref 作为参数调用任务。
print(ray.get(sum_matrix.remote(matrix_ref)))  # -> 1000000.0
# 此行输出1000x1000的全1矩阵的元素和,即1000000.0

Ray Data组件

Ray Data 是一个适用于 ML 工作负载的可扩展数据处理库。

Ray Data 和 Apache Spark的离线计算有一些相似之处,但也有重要的区别。Ray Data的设计更加灵活,能够更好地与机器学习和AI工作流程集成。此外,Ray Data支持的动态任务调度和弹性扩展能力在某些方面超越了Spark。总体而言,尽管二者在处理大规模数据方面有共通之处,但它们的设计理念、优化点和适用场景存在差异。

Ray Data 是一个适用于 ML 工作负载的可扩展数据处理库,特别适合以下工作负载:

它为分布式数据处理提供灵活且高性能的API:

Ray Data 构建在 Ray 之上,因此它可以有效地扩展到大型集群,并为 CPU 和 GPU 资源提供调度支持。Ray Data 使用流式执行来高效处理大型数据集。

Ray Train组件

Ray Train组件为TensorFlow、PyTorch和Keras提供了分布式训练的封装。它使得在多GPU或多节点环境中进行模型训练变得简单,无需深入了解底层的分布式计算细节。Ray Train自动管理数据的分布和同步,优化资源分配,并提供了一套简洁的API来透明地实现数据并行和模型并行。这允许开发者专注于模型的设计和训练,而不是分布式系统的复杂性。

具体应用

商业化架构设计

相关资料

滴滴基于 Ray 的 XGBoost 大规模分布式训练实践

Key Concepts — Ray 2.8.0

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐