一、general AI时代的新训练
在general AI的情况下,我们会有很多新的变化,根据这张图,我们做了一个简单的概括,从训练来说,我们常规的认为在AI中数据、算力和算法这三个是迭代上升的过程,在今天general AI情况下,我们发现算力已经不仅仅是GPU卡的问题。我们看到尤其是在大模型时代下,整个算力的变化极大,比如我们有国产的各种各样的芯片出来,有nv的各种各样迭代的芯片出来,而且芯片的规模会越来越大,传统上是用单机几台卡就可以做一个类似CBA模型的训练。
今天我们发现做一个大模型训练需要有几千卡甚至上万卡,并需要长时间的跑,而整个工程难度会变得越来越大。第二部分我们发现网络也会变得越来越多,刨除单机训练,在多机进行训练的时候,网络通信也成为整个训练最大的瓶颈。包括存储的变化,各种各样云上的存储,尽量减少整个通信的节奏和各种各样多地域。
从整个训练来看,几b一直到几百b的模型越来越多,最近meta发布了lama 3405b也是一个业内比较知名的事情,scle law在整个模型中影响会越来越大,模型的整个变化以及任务的类型比较多,而算力越来越大意味着整个成本越来越高,如何能把算力用的越来越好?在传统时,我们可能只是做一些大模型,但大模型中间的阶段还可以做其他的,如何根据模型的任务更好的分配整个算力?第三部分是训练的各种各样的变化,以及训练已经从传统做基础的模型的预训练,变成要做funting或continue training持续训练到后来做一些alinement,并根据整个市场进行变化,所以今天在各种各样的变化下,在云上所有的开发者需要解决的最核心的问题是效率问题,即以PAI0模型训练服为例,我们要给客户解决效率的问题,即在一个平台上把上面所有的问题解决掉,而这就是PAI训练服务核心要解决的问题。
二、PAI最稳定的训练
接下来,首先是超大规模,它的稳定性很重要,今天我们不可否认,对游戏开发者来说硬件在集群建设中比较少见,但今天在AI训练的超大规模,大家可以看到各种各样的paper,比如我们可以看到meta 405b当时也写到了有多少人feelover各种各样的故障,出现了训练模型,像微软有各种各样的训练的模型,像谷歌出了各种各样的report和paper来去解释这个模型怎么训练的,其中都提到了一点它的稳定性。
今天唯一可以确定的是它的故障会实时发生。刚刚已经说到,在PAI上面有10万卡,实际上每个月平均大概有100多企业硬件故障,这是baydesign的一个逻辑,实际上最多会有更高的时候,我们核心就是要解决这100多次故障怎么更小的影响客户整个的训练情况不要中断。现在有两部分,第一部分是在运行任务跑起来的时候有一个AI maker叫自动容错可以把任务自动重新拉起,快速发现底层的硬件故障,所以对客户来说是一直无感的,我们可以在分钟级发现有问题的一台机器或一张卡,快速把这张卡call down掉,同时再拉起一台新的机器加入新的训练中,这个过程客户完全无感,让训练能够持续。
在去年的早些时候,比如说做初始化模型,其中一个重要的指标就是能不能训练14天、30天甚至是更长时间,实际上核心解决时间的问题就是靠这个技术。同时刚刚也说到了,不仅仅是训练模型整个要跑GPU的问题,还有通信的问题,我们有时候发现网络也往往成为瓶颈,甚至网络偶尔会出现hang的问题就是它没有坏,只是卡住了,所以我们又推出了一个新的功能——3D check,我们叫健康检测,在提交任务之前,我们会快速分析任务卡的规模下整个网络通信情况,现在大概千卡在两分钟以内就可以跑出来一个报告,这个报告会显示千卡是否会影响训练任务,整体来说通过这种方式最终实现了在线上自愈率超98%,即98%以上的客户对发现问题,解决问题的过程无感,这是训练最核心关键的指标,我们认为这也是超高稳定性的一个代表。
三、PAI最具性价比的训练
刚刚提到了在今天做大模型训练最核心的是大规模的跑任务,这意味着要有大量的算力资源,并且怎么把算力资源用的更好、更经济、更有价值是我们平台需要核心解决的问题,下一部分是最具性价比的训练。实际上有几种方法,第一,刚刚也提到了有一个概念叫资源配额,通过资源配额这个概念将所有的算力进行抽象,比如我们可以把不同的卡型、不同的资源都抽象成算力资源的一个规格内部叫做cota,然后通过cota进行分配,这么做的好处是通过这种方式扩大性分配变成树形结构,如此就可以通过复杂的调度策略来完成算力从而更好的进行调度,比如说有智能调度, FIFA就是先进先出round robin各种各样的调度策略来让任务跑的更高效,同时因为是树形结构,往往在不同的大一点的公司我们会有一些分卡的策略,即不同的团队会分不一样规模的卡,比如总共有1000张卡,可能a团队分500张,b团队分500张,往往会出现在a团队特别紧急的时候,这500张不够用,这时候b的团队是有空闲的,所以又同时提供了共享的能力,即在整个用了pad的系统里,a团队在紧急的时候可以用b团队空闲的资源,同时在b的团队想使用的时候又很高效的把资源回收,a团队的任务会自动进行拆换,这样的好处是尽量压榨所有的算力资源,让大家把算力利用的更好。
今天我们这么多的算力,不可能时时刻刻都在做AI,你会发现AI不仅仅包含了训练阶段,还有很多数据处理和很多阶段,比如我们传统用的slurm,基本上在原来很多大学里面做高精尖的测绘、气象、很多都是用slurm,这是HTC的一种方式,slurm实际上是一种调度的策略,是整个调度引擎和框架的策略,还有比如说比较火的Ray做了很多数据处理,如今PAI把这两种作为框架引入到整个的pad的平台里面做成了云原生化,底层都是基于K8s通过aPAI的整个AI调度器来实现slurm跟 Ray整个的计算运行。从客户使用来说没有任何变化,他只是在提交一个DLC的标准任务,选择了一个对应的框架,用原来的slurm或Ray正常的命令就可以跑起来,这样的方式相当于我们希望在训练服给大家提供更多种多样的框架,大家可以在PAI一个平台上干所有的事情,训练里面所有的东西都能在这里面使用。所以在GPU使用的时候,如果CPU有贡献,你可以用你的CPU,同时PAI在整个调度策略也会做GPU跟CPU的分散跟整个的调度策略,比如说GPU比较多的时候,我们可以按照各个不同的机器的GPU进行一些打散和分散的调度,让每台机器跑的足够满,用力足够多。
最后一部分因为PAI本身是一个偏开发的平台,整个训练服务都会有进行代码,进行代码很重要的一部分就是整个的可调试性和debug性,在调度层面我们可以提供很多能力,第一,我们提供大概300多个各种各样的指标,而且都是云原生的做实时的采集,大家可以做各种各样的告警、定制,首先从指标层面给大家提供丰富的指标维度考核;第二部分在调度每次任务的进入的队列跟出队时,队列持续很长,我们可以快速给客户一个很简单的检测,告知客户调度在哪个阶段发生了什么问题,应该解决什么问题;第三部分我们还做了一个马上要发布的能力——进行各种各样的算力迁移。这有一点像传统的Windows电脑有一个碎片整理的概念,因为算力大家一直在使用,毫无疑问他会变得越来越碎,我们会有类似一种算力迁移的能力,把整个碎片进行整理从而让算力更完整,这样整个后面使用的效率也会更高。
最后一部分,刚刚也提到了我们整个竞价任务,这里就不再赘述,只是简单说一点,竞价任务的核心是为了给大家进一步开放更多资源,最终通过各种各样的方式实现整个AI尤其大卡在一些大模型场景下的开源节流的能力,让大家有更多的机会接触AI,同时能发现能有更多算力实现AI,竞价任务也可以让大家尝试AI不需要投入太大的资源建立构建新的算力池。
四、PAI最优性能的训练
下一部分是提供的最优训练,最优的训练的性能有两种,一种是基于传统的开源框架在发展,比如metro,deep speed做各种各样的优化能力,还有一个是我们本身在同时闭源或者自研的引擎在不停的发展,这里在各个方面也会有很多能力的建设,而这一部分,下一位嘉宾会深度剖析和解析这部分框架以及怎么去做?
五、PAI DLC训练框架底层的训练引擎
今天主要给大家介绍两个,一个是AI训练加速引擎,即PAI-TorchAcc,另外一个是Alignment的训练引擎:PAI-ChatLearn。
1. AI训练加速引擎:PAI-TorchAcc
PAI-TorchAcc是基于便于自动编译化技术来构建的一套训练体系,它会通过在编译化成绩自动算子融合通信优化、浅层优化以及分布式运行技术来实现Aid高度的优化。左边是架构图,我们第一步会通过graph capture技术,一般是通过laid patuture技术来捕获一个execution图,然后转换成IR,然后我们会在IR层经过各种各样的编译化的技术,包括算子融合,通信优化等以及浅层优化和自动的分布式优化来实现高效的分布式的技术。
TorchAcc的特点主要有几个,第一个是在分布式上,除了支持分布式的变形策略,比如数据并行ftp、PPT,psp,也支持content这些最近在长训练中使用比较多的编译策略,同时我们也支持自动的编译策略,就是可以自动的推导,比如说我的tp怎么样做拆分是最优的,这样用户使用起来会更为简单。在自动编译优化这方面,我们会去结合编译化的技术以及结合高效的kener实现,比如像flash attention、flash attention2、flash attention3等算子来实现最优的计算效率,同时我们也会在里面进行自动的,比如说重算自动的offloading,以及会做自动显存规划和管理,增加显存的副用来降低训练过程中的显存的丰泽显存的碎片,像大模型训练过程中显存其实有时候是一个非常大的屏蔽点,我们通过这样一些技术可以大大降低显存的使用效率。最后我们还会通过自研的balayLLm来做动态设备的支持,因为在编译化里面有一个比较难的事情是怎么样支持动态的写入,像现在的训练中,比如说我要做一个单train,输入可能变长了,这个时候它的shift就是一个动态的shift,传统的编译化以可能会受到一些挑战,所以我们通过智能的技术来解决这些问题。
PAI-TorchAcc使用上比较简单,我们提供了一个Torchslurmvitor的方法,用户不需要修改它自己的模型,只需要在原有模型的基础上增加一行wap的调用,我们就可以完成整个模型的高效加速,可以一键支持和加速PAI-Torch的模型,同时我们也能够无缝的支持HuggingFace这种模型,因为现在开源的大模型非常多,大家一般使用的模型都来源于HuggingFace,使用这样一个技术之后,我们就可以非常容易用一行代码的改动支持到HuggingFace模型进行高效的分布式训练。在信念之上,左边是在常见的一些模型上的加速,包括像常见的lama一些模型都有20%~200%加速,同时我们在长序列上,给于知识的各种各样对应策略以及各种各样的显存优化技术,能够支持百万级的长序列的训练,在一个1兆的序列长度下,我们的费用能达到51.7%,这个使用效率是非常高的。
2.Alignment训练引擎:PAI-ChatLearn
先给大家看一下Alignment训练方式的演进。Alignment训练方式是从OPPO推出的GPT之后开始火起来的,GPT用的是RLHF的训练方式,也是基于人类的原来反馈的强化学习,这个可能大家已经比较熟悉了,了解一下它里面会有多个模型同时进行训练或者是推理。这两年的Alignment的训练方式也发生了极大的演进,比如推出各种各样的简化的训练方式,比如像DPO IPO是用来直接基于正负样本量来进行选择,去掉强化学习的过程来加速训练的流程。
正负样本对数据比较难准备,KTO是用来解决这个问题的,它可以单独学习正样本、负样本,这样能够进一步的加快训练的效率,还有像ORPO可以提出优势比损失函数,这样进一步减少了reference模型的参与,训练过程中会更简单,但这种简化之后效果会有一些损失,所以我们也会结合Online DPO、GRPO的技术来进一步提升效果,Online DPO是在DPO基础之上结合online的Policy模型和Reward模型来实时的生成训练的数据,训练过程之中police模型或圈内模型也会进行参数定期的同步达到半在线的状态,它的效果也会更好一点。GRPO可以去做full group的学习,它的效果类似于RLHF,也比较好。
Alignment的训练左边是一个Rhf训练的端到端的流程,主要分成三个步骤,前面两个步骤大家可能用的比较多,第一个是训练一个SFT的模式,第二部分是基于SFT的模型来训练一个Reward模型,第三步才是最难的,Alignment的训练跟以前的训练范式已经不太一样,不像pretrain,第一个是他训练过中既有训练也有推理,所以它有两个阶段参与,第二训练和推理之间还有交互,所以相比以前复杂性会大大提升,这里面会有多个模型,比如说有Policy模型,它既参与训练又参与推理,Value模型也是既参与训练又参与推理,还有reference模型和Reward模型,一共有六个模型在里面训练,这会带来一些新的挑战,比如说有这么多模型,怎么样来高效的调度和交互,怎么样来给用户使用,用户怎么搭建一个流程能够把它串起来。
第二个是怎么样提高训练的性价比,多个模型分别进行训练和推理的时候,对资源、显存、通信的需求都是不一样的,怎么样提高训练效率跟之前的pretrain场景也是不太一样的。另外是模型个数的增加,它的资源也会线性增加,本来模型规模扩大需要的资源就已经在线性增加了,个数增加之后,又有个维度需要额外增加资源,这个时候怎么样节约资源也是一个比较大的难点。另外像Alignment训练的发展其实还处于一个非常快速的迭代的过程中,这两年有很多方法,然后像最近open i又发出了OI模型,接下来Alignment的训练方式还会有一波非常快的迭代和发展,所以怎么样让我们的框架能够快速的帮助用户定义和实现新的Alignment方法,这里需要高扩展性,也是训练框架的一个非常大的挑战。
基于此,我们自研了PAI-ChatLearn训练框架,它是一个灵活应用高效的大规模的Alignment的训练框架,左边是架构图,第一个是我们已经内置的像RLHF、DPO、Online DPO、GRPO等我们验证过的Alignment训练方式,同时我们也会支持用户定义model执行的flow,后面我会介绍怎么来定义。第二是会议里面支持不同的计算backend来进行模型的建模,大家都有个概念,比如说像训练中用Magatron会比较快,推理的时候用vLLm会比较快,那不同的backend在一个模型训练一个东西的时候如果能同时参与,我们就需要这个框架能够支持不同的backend并行的参与进来完成模型的加速。最开始我们在里面做了一个基础,这里面底层是基于Ray调度提出来的一个概念,来分装各种各样的不同的backend进行高效的训练。
另外我们可以支持不同的模型配置不同的并行策略,支持灵活的资源调度以及高效的资源共享,这个也是非常重要的。因为模型比较多,比如说需要跑一个100b的模型,有六个模型,就需要600b的位层,它对显存的需求是非常大的,所以我们需要有高效的资金共享的策略,后面也会进一步的进行介绍。另外我们可以支持任意的模型规模的扩展,比如像当前业界有一些Alignment的训练框架,它在扩展到比如说70B+70以后的更大规模就会跑不下去了。
接下来看一下我们是怎么支持多Backend的,第一个是我们在里面内置了一些不同的Backend封装,用户可以选择使用,比如说有Magatron有vLLM,有Deep Speed,有我们自己的TorchAcc还有等等一些,在这个过程之中,用户训练可以选用Magatron,推理可以选用vLLM,另外每个里面可以按照自己的Backend配置自己的并行策略,整个框架来负责整体的调度,包括数据样本的切分分配、中间计算结果的汇总和再分发。
另外在Alignment的训练中,其他训练测的模型,每隔一段时间需要把参数同步给推理测量模型,这样在不同Backend时候最难的一点是怎么样做参数的映射,所以我们在做参数映射的时候,通常同时增加了一个叫参数mapping的功能,它会去解决Backend上模型定义结构的差异以及并行策略的差异,因为通常像Magatron或者是像vLLM的模型定义的结构是有差别的,所以我们会帮大家完成自动的转换。在资源之上我们可以容许训练推介资源,就是下面这个可以完全充分的共享资源,比如说有六个模型,六个模型全共享使用同一份资源,这样可以极大的降低追踪使用效率,同时我们也支持更灵活的使用策略,我可以去独占,然后提供更高效的训练加速比,里面支持创建流水的执行,我们也可以部分的共享,这样也可以达到一个更高的训练效率。
第二点是我们要完成模型的定制,定制的Alignment训练方式这里把它称之为定义训练的一个Engine,每一个Engine代表着一种不同的Alignment的训练方式,我们在里面抽象出来几个方法来进行封装,比如说env computer flow是用来解决推理测量模型的执行流程,trainat computer flows来定义训练的执行流程,evaluator flows来定义评估的流程,因为在训练过程之中,有时候也需要实时的看一下整个模型的训练效果怎么样,所以这里面还支持训练跟踪评估模型的实际效果。关于模型之间的参数同步,我们增加了一个sat parameter sync的方法,只需要用户调用一行,就可以完成整个参数的同步过程。
这边准备了两个事例,比如说一个Online DPU的,一个GRPO的事例,其实这两个差不多。我们可以看GRPO这个事例,比如说我想在上面那个element里面定义这四个模型,就是在推理这四个模型的数据执行流,用户只需要自定义每个模型之间的数据流,现在框架底层会自动捕获这段代码来解析模型间的关系,然后来完成任务的调度,比如说我想在GRPO上增加数学的Reward,因为大家知道常用的LLM的Reward在数学上的效果比较差一点,这个时候就可以在这里额外定一个数学的Reward,而后让LLM的Reward和数学的Reward同时进行工作,这样来提升模型的训练效果。
最后来看一下现在训练的性能和效果。我们这里也是采用了一个N+N的模型的配置,这个是什么意思?就是在一个Alignment的训练过程中,reference模型和Policy模型是一样大小的,value的模型和Reward模型的大小是一样的,所以通常我们可以指定Policy模型和Reward模型的大小来代表整个Alignment的训练规模,所以这边Policy和Reward配置是一样的,我们实测中也发现Reward模型的大小最好是不要小于Policy模型,因为Reward模型比较小的时候,实际训练出来的效果是Reward会过快的拟合,评估的效果比较差,实际训练出来的Alignment的效果也不好,所以一般是Reward的模型大小至少大于等于Policy模型的大小。在这样一个基础之上,我们对比了不同规模的模型进行RLHF训练的性能,我们这边比较了业界的比如说SOTA开源出来的训练框架,在不同的像7b和7b加70b在规模上都有两到三倍性能的提升,我们实测是规模越大提升会越多,这里是因为Base LLM跑的规模最多只有这么大,所以就只放了这些数据。
我们可以支持到300B+300B规模的训练,Base LLM这边通常都已经跑不下去了。现在PAI-ChatLearn已经在Qwen上完全使用了,我这里放的数据要稍微的旧一点,前天发布的会议上发布了Qwen2.5的数学模型和Qwen2.5的72B的模型,那个效果会比这个更好一些。像Qwen2的72B我们之前是采用Online DPO的Alignment的训练方式切换的max模型,我们是采用GRPU的训练模式,最新发布的Qwen2.5会比Qwen2的效果还要再好一点,我们现在看到在这种数学模型的效果上,我们比一众开闭源的模型效果还是要好一点,但是最近欧亚发的Owe one的模型的效果也很强,但他没有完全开放,后面在这基础上可能又会引领一波Alignment进一步的发展。
最后做一个简单的总结,比如PAI-TorchAcc是基于自动编译优化技术来实现的高效的训练加速引擎,在常见的模型上有不同加速的效果,并且也支持百万级别长序列的训练,比如我们在做图像模型收纳这一类模型上都是比较有用的,第二是推出的PAI-ChatLearn高效的Alignment训练框架,它支持各种各样的Alignment训练,还支持灵活的定制,相比业内SOTA系统也有两到三倍性能的提升,并且我们的PAI-TorchAcc之前已经开源了,PAI-ChatLearn最近也已经开源出来了,欢迎大家积极使用和体验。