大模型训练部署利器--开源分布式计算框架Ray原理介绍

目录

Ray是什么?

如何做到分布式?

集群

remote方法

worker进程

多worker进程实现分布式

worker资源申请

如何做到弹性伸缩?

Kubernetes中的Ray

Ray使用简介

资源设置

模型组合

Ray不能做什么

参考

写在最后


本文首先介绍Ray分布式的原理,对原理有了一定认识后,具体到使用就相对简单了,因此本文只会对使用做简要介绍,最后再说一下Ray的不足。文章的目的是让大家对Ray能有基本的了解,供大家判断Ray是否适合用于解决手头的问题。

Ray是什么?

Ray是一个开源统一框架,为机器学习和大数据处理相关程序提供了用于并行处理的计算层,降低了大规模端到端机器学习工作流的开发难度。

大模型训练部署利器--开源分布式计算框架Ray原理介绍_第1张图片

Ray提供了在数据预处理、分布式训练、超参数调优、模型服务和强化学习几个方面的并行方法,分别对应上图的Data、Train、Tune、Serve和RLib模块,用户只需要在原有代码中新增几行代码,即可实现方法的并行操作。

同时,通过KubeRay可以将Ray程序很容易的移植到Kubernetes集群中,利用云原生生态中的基础能力对Ray任务进行更精细的管理。

如何做到分布式?

集群

大模型训练部署利器--开源分布式计算框架Ray原理介绍_第2张图片

Ray通常是以集群的方式部署在多台服务器上。Head node是主节点,Worker node是工作节点,上图展示了由1个Head node和2个Worker node组成的Ray集群。

remote方法

Ray任务在执行的过程中,可以根据用户在代码中的定义,判断将哪些无状态方法(Task)或者有状态类(Actor)进行分布式处理。

以方法举例,在方法上面加入一行@ray.remote装饰器,普通方法便成为了remote方法,可以被多个worker进程同时处理。并且可以指定每个worker进程所需要的资源,比如@ray.remote(num_cpus=4, num_gpus=2),指定需要worker具备4个cpu核心和2个gpu,同时可以指定小于1的资源,比如@ray.remote(num_cpus=0.5, num_gpus=0.5)。

# By adding the `@ray.remote` decorator, a regular Python function
# becomes a Ray remote function.
@ray.remote
def my_function():
    return 1

worker进程

现在介绍一下worker进程,这是帮助理解Ray工作原理的核心概念。首先要把worker进程和worker node区分开,worker node指的是服务器,而worker进程是worker node上运行的进程,一个worker node可以运行多个worker进程。

Ray v2 Architecture中如下介绍worker进程:

  1. One or more worker processes, responsible for task submission and execution. A worker process is either stateless (can be reused to execute any @ray.remote function) or an actor (can only execute methods according to its @ray.remote class). Each worker process is associated with a specific job. The default number of initial workers is equal to t

你可能感兴趣的:(machine,learning,机器学习,云计算,云原生,chatgpt,语言模型)