强化学习AI系统的设计实现及未来发展
强化学习作为推动大语言模型进一步提升智能程度的手段,一直是大语言模型训练环节中最核心且复杂的环节。其中的复杂度不仅仅体现在其算法方面,也体现在其系统的整体要求上。
本文整理自阿里巴巴算法专家曹宇今年 6 月 在 AICon 2025 北京站的分享 《强化学习 AI 系统的设计实现及未来发展》。其分享从传统的 RLHF 系统开始,结合算法实践展示出 RL 系统的现状及发展脉络。通过具体的实践,与从业者共同探讨未来超大规模 RL 的发展方向,分享内容既包括理论基础,也包含业界实践,最后开源生态及社区共建也会涉及。
以下是演讲实录(经 InfoQ 进行不改变原意的编辑整理)。
今天我非常高兴能够与大家分享一些关于强化学习(Reinforcement Learning,简称 RL)在大语言模型系统设计中的应用,以及对未来发展的几点初步建议。
RLxF 理论到工程化
从强化学习算法的理论基础来看,它对工程化的需求是多方面的。今天我们的重点更多地放在工程化以及 AI 基础架构(AI Infra)领域,因此在基础算法方面我们会相对简略地提及。首先是算法理论,这部分看似非常抽象且简洁,就像一个循环。强化学习中的 Agent,在过去通常是指强化学习的智能体,但如今,大家所讨论的 Agent 更多是指大语言模型的智能体。强化学习系统算法的工程化成熟度,使得大语言模型与 RL 得以很好地融合。Agent 既是强化学习算法的载体,也是大语言模型作为行动模型(action model)的载体。从本质上讲,算法理论要求我们在策略与环境不断交互的过程中,让大语言模型能够更高效地探索世界,并获得更好的奖励,从而更好地适应环境目标。在策略层面,最关键的是学习算法,即强化学习算法指导策略如何更新梯度,并更好地完成任务。对于环境而言,最重要的命题是奖励函数,即如何对一个问题给予正确的奖励,从而使模型能够学到真正有价值的内容。
从下图左侧看似简单抽象的算法理论来看,其执行逻辑实际上比我们想象的要复杂得多。中间部分是我参与的一个框架——Open RLxF 的执行逻辑图。与左侧的算法理论相比,它明显更为复杂。因为在实际执行过程中,我们有多个算法组件,例如绿色部分是训练态的模型,蓝色部分是推理态的模型。这些模型相互作用、相互影响,帮助模型进行相关训练。这看起来已经有些复杂,但在实际工程实现中,情况更为复杂。感谢蚂蚁集团的 AReaL ,基于它运行的 Open RLxF 的实际工程运行图更是如此。这就是工程化实践的现状。
关于专业化的基础理论,我们可以简单理解,环境指的是 Agent 如何与世界进行交互。在聊天机器人场景中,环境就是大语言模型与人类交互的方式;在编程智能体场景中,环境则是策略网络、代码执行器、浏览器使用等网络工具之间的交互。环境可以理解为大语言模型以及基于大语言模型的 Agent 的对手盘,即它们到底与谁进行交互,这是一个非常重要的概念。此外,策略是我们希望以 Agent 的形式表述的,它是智能体依据当前状态(例如用户给出的输入以及环境的反馈)自主决定下一步如何行动。这正是模型从简单的聊天机器人向 Agent 进化的重要分水岭,即它能够自主选择合适的行为,并根据这些行为采取最优策略。
有了环境和策略之后,我们还需要两个重要因素。首先是奖励函数,如何评判一个行为的好坏是一个非常重要的输入项。在过去一两年里,强化学习在大语言模型中的落地应用,很大程度上离不开奖励函数建模与优化的方式。从常见的人类反馈强化学习,到基于宪法的反馈强化学习,再到如今基于可验证规则的强化学习,这些不断进步的过程,实际上代表着强化学习奖励函数的信号来源日益广泛,同时任务难度也在不断提高。最后一点是算法本身,这是我们算法研究者真正关注的。目前我们看到许多算法,例如大家熟知的 PPO、GRPO、DPO 等等,它们更多地与策略相关,即如何根据状态、动作以及奖励历史函数来更新策略,从而使智能体不断改进。这就是算法方面的总体概述。
在算法方面,业内有一些实践经验。在过去,我们在很大程度上从事人类反馈强化学习,而人类反馈强化学习也是我们今天能够相聚于此的主要原因之一。最早引爆这波大模型热潮的其实是所谓的 Instruct GPT,它正是利用了人类反馈强化学习的信号,在基于 GPT-3 的基础模型上,研发出了一套能够很好地遵循指令并具备理解能力的学习系统。其主要训练方式相对较为原始,即把模型生成的响应的好坏交给人工进行评价和标注,然后用另一个模型(而非人工)去拟合人类对评价好坏的判断,这个模型也是一个大语言模型。在这种情况下,针对未来的 prompt 和响应,我们有了额外的人类反馈信号的近似,从而不断逼近模型能力的上限。这种方法相对而言具有优势,它的模型结构相对简单,训练过程也比较稳定,采用了一种广泛使用的数学函数形式,在大量数据训练下,会有一些泛化能力以及较好的效果。
然而,它也有劣势。在训练过程中,人类的标注和反馈不可能无穷无尽,也无法覆盖人类行为的所有方面,因此会出现所谓的“奖励劫持”(reward hacking)现象,即奖励信号被模型利用,从而出现我们意想不到的情况。在这种前提下,在业界实践中,很多情况下采用了一种将人类反馈与机器反馈相结合的方式。
下面的截图来自 DeepSeek 的生成式奖励模型的最佳实践。它在模型输出奖励模型的好坏之前,会以文字形式输出对分数的解释。这样做的好处是,模型不仅能够根据已有的响应对进行简单评分,还可以解释自己为何做出这样的选择。由于它是一个生成式模型,因此具有一定的泛化性,并且在推理过程中,我们可以通过多采样多条数据来提升模型的能力。除此之外,在业界还有一些使用大语言模型本身作为奖励模型的方式,这种方式更加灵活。例如,在奖励模型评价过程中,我们可以让它关注奖励模型本身的更具体、更细粒度的维度,然后用这些细粒度的维度来满足特定业务场景下领域监督信号的特殊要求。不过,这种方式的成本相对较高,因为它本身是使用大语言模型进行生成式推理。与直接输出类似于 token 数值的模型相比,其成本更高。
核心算法与突破
算法部分的核心在于评估信号的来源,也就是我们的奖励函数究竟如何设计。从全局图来看,整个系统其实还是相对复杂的。图中展示的是一个非常经典且传统的 PPO 算法的全链路过程,涵盖了从推理、评估到训练的各个环节。下图用两条虚线将其划分为三个部分,今天的演讲也将围绕这三部分展开。
首先是最左上角的推理部分。这里的推理可以理解为推理模型的运行,也就是大模型根据输入的 prompt 生成响应的过程。在这个过程中,主要的计算负载来自于模型在预处理(profile)和解码(decoding)阶段的推理引擎。这实际上是模型与环境进行交互的过程。那么,交互完成后如何进行训练呢?中间还涉及一个评估的过程。我们刚刚已经简单介绍过,最传统的方式是利用人工反馈,通过一个奖励模型来进行近似学习。但随着演讲的深入,大家会发现,在大语言模型尤其是强化学习领域,评估环节的价值和耗时占比正变得越来越高。因为我们需要一种更全面、更综合的方法,来全方位地评估模型的能力。中间的评估过程也会涉及与环境之间的复杂交互和验证过程,例如代码执行器等。
右边的部分才是我们真正所说的训练过程。这个过程其实更接近于传统大模型的预训练和监督微调(SFT)。在传统的 SFT 和预训练过程中,数据都是我们离线静态准备好的。而对于强化学习来说,所有的数据都是通过在线的推理和评估过程动态生成的。在这个训练过程中,还涉及多个模型的同时训练。对于经典的 PPO 算法而言,第一个模型就是我们自身的模型。通过一个相对复杂但实际上并不难理解的 PPO 损失函数,其主要目的是限制更新的步长和幅度,同时在梯度较为自信的情况下,基于优势进行策略函数的更新。优势是指某个行为相对于其他行为的平均好坏值。由于 PPO 是基于 Actor-Critic 架构的,它还有一个 Critic 模型。这两个模型训练完成后,会通过高速互联的方式推送回左边的推理模型中,从而形成一个不断循环的多轮交互模式,让模型能够在线提升自身能力。这就是最传统的 RLHF 训练方式。
在后续的实践中,我们的算法探索和实践逐渐走向了两条不同的道路。首先,我们看到了 PPO 算法虽然相对复杂,但在去年早期,强化学习刚兴起不久,由于整个系统的复杂度较高,我们考虑基于我们的 BT 奖励模型,如果信号来源仅限于偏好对,那么我们可以将 PPO 算法的损失函数设计成另一种形式。这种形式避免了奖励模型的训练和 Critic 函数的使用。在某些业务场景中,这种探索的效果相对较好。它的优势在于,我们可以跳过奖励模型的训练和优势估计,也不需要使用 Critic 模型进行训练和推理,能够便捷地在一些特定细分的业务场景中优化偏好对的好坏。然而,它的劣势也很明显。首先,它的假设非常强,即我们的奖励模型必须符合 BT 假设,即一对好坏的假设。但在强化学习过程中,这种假设有时过于严格,因为有些领域并不需要通过比较相对的好坏,例如数学领域本身就存在绝对值。此外,对于 BT 奖励模型而言,它本身并非强假设,只要奖励信号准确,就可以引入。同时,这是一种离线算法,不涉及在训练过程中动态更新模型并推理出新样本进行训练,因此有时容易过拟合。这种算法,如 DPO 算法,大家可能听说过很多,但随着强化学习框架的成熟和算力的进一步提升,以及大家对强化学习技术理解的加深,它逐渐退出了历史舞台。
另一种探索是最近 DeepSeek R1 成功应用的 GRPO 算法。它对传统的 PPO 算法进行了一些演化。主要改进在于 Critic 模型。这里存在一个问题,如果使用 Critic 模型进行估计,那么 Critic 模型本身需要见过相对较多的历史轨迹,从算法层面才能做出更无偏的估计。否则,模型可能会被 Critic 函数带偏,导致策略学习不准确。GRPO 算法非常有意思,它在进行 Critic 估计时,并没有采用模型估计的方法,而是将推理过程重复多次,通过与均值和标准差的关系来估计优势。将 PPO 算法演进成这种方法后,在 RLHF 时代其实并没有体现出太多优势。但 DeepSeek 公司本身更关注像编程场景这种纯推理类场景的效果。这种算法最大的优势实际上是在推理类场景中,能够快速帮助我们避免由于 Critic 函数训练成本以及训练算法稳定性带来的问题。在未来,Critic 函数,也就是价值函数在强化学习中的作用,仍然是一个开放性问题。在大语言强化学习时代之前,价值函数是非常重要的。例如 AlphaGo,它可以在很大程度上节省推理时间,其实质是用一种计算方式换取另一种计算方式。假设这里推理的条数非常多,例如不是 4 条,而是 16 条、32 条甚至 128 条,但通过一个较为准确的函数,我们可以一次性地进行推理。在未来,在多轮长上下文交互的情况下,相比 GRPO,价值函数可能会发挥更好的作用。
超大规模 RL 系统
从宏观角度看,强化学习领域的变化速度远远超出了我们的想象。我们刚刚讨论的内容主要集中在左侧的部分,即人类反馈强化学习在模型安全性、有用性以及表达性等领域的应用,这些工作大多集中在 2022 年底。强化学习领域的进展之快,甚至可以用周来衡量。从 RLHF 到 RLAIF,我们看到强化学习的应用范围迅速扩展,从简单地对齐人类指标转变为追求模型智能的上限,即推理能力。
推理类模型的训练方式与传统强化学习算法相比,算法本身变化不大,但系统架构和训练领域却发生了显著变化。以 DeepSeek 今年春节的成功为例,他们采用了 GRPO 算法,并在可验证领域加大了算力投入,从而实现了智力水平的显著提升。今年,我们看到许多大模型在高考场景中取得了接近 985 大学生的成绩。要知道,去年的时候,大模型还分不清 9.8 和 9.1 哪个更大。这一年间发生了什么?强化学习背后的演进以及基础模型的同步提升发挥了重要作用。
在下一阶段,随着模型自主完成任务能力的增强,端到端的强化学习,如 Deep Research 这种更具自主性的模式,将在业务场景中得到更广泛的探索。这与单纯的做题有很大区别,因为做题是单次交互,通过不断自我思考最终得出答案,然后由强化学习的验证器给出信号,再继续迭代和提升。而强化学习的目的是更宏观的,即希望深入研究某一领域,这是一个开放型的、长期的决策问题,需要多次与互联网、代码执行器甚至更专业的工具进行结合。
这种训练方法对强化学习算法来说是一个更大的挑战。因此,接下来我会结合强化学习在推理、评估和训练方面的需求,为大家做具体介绍。总体而言,我们可以明显看到一个趋势:从单轮、单信号的 RLHF,正逐渐向多轮复杂交互条件下的端到端强化学习(end-to-end RL)进化。强化学习系统不是一个单纯的训练系统,它既包含推理,又包含评估,还涉及多个模型的训练。因此,在迈向超大规模时,每个维度都面临着不断升级的挑战。同时,我们的挑战还在于如何将这一系列系统整合在一起,使其能够兼容彼此,并提高超大规模系统的效率。
超大规模强化学习系统的推理部分。在超大规模强化学习系统中,推理引擎未来将发挥更大的作用。除了推理引擎本身的挑战外,强化学习的推理还面临额外的挑战。首先,我们需要尽可能复用大规模推理系统中取得的进展,例如我们早期的项目曾使用基于 Hugging Face 的低效推理引擎,其效率瓶颈在推理时间较长时会对系统造成较大影响。因此,我们后来将其切换为利用 Page Attention 加速的 VRM 推理引擎。
除此之外,强化学习系统是一个在线系统,其模型权重会随着推理过程不断更新,这与推理系统本身并不完全一致。通常情况下,模型训练完成后,我们会将其部署到推理系统中,加载对应的 CUDA Graph 并进行优化。然而,强化学习系统每训练一步就需要更新权重。对于超大规模强化学习系统来说,这要求系统能够支持权重的动态更新和高效的权重传递。例如,DeepSeek 这种 670 亿参数的模型,其权重需要广播到整个集群,这是一个巨大的挑战。同时,我们还需要更灵活的打断机制,例如在推理过程中,当权重更新时,我们需要通知推理引擎停止推理,因为继续推理得到的数据将是 off-policy 的,对训练没有意义。此外,还有路由机制的问题,因为推理本身是分布式进行的,至少涉及数据并行。在这种情况下,我们如何将数据分配到合适的机器上,以更好地利用 KV Cache 等资源,这也是超大规模系统面临的挑战之一。
另外,还有一些细节需要考虑。在训练过程中,GPU 卡可能会被复用,既用于推理,也用于训练。我们如何让两者和谐共处,尽量减少权重传递带来的额外时间消耗?下图右侧展示了一个实践案例,使用了 CUDA 中的一些先进技术,如 CUDA IPC(Zero copy)的方式,在内存中进行权重同步。在分离式的情况下,服务集的管控和同步也是一个较大的问题。目前,强化学习系统尚未达到超大并发的 PD 分离模式,但随着系统规模的增大,我们很快就会发现瓶颈出现在推理侧。因此,如何将现有的推理系统中与强化学习相关的优化复用起来,并形成一个高效的系统,是我们未来超大规模长期系统中一个非常重要的部分。总体的调优倾向是优先考虑并发,而不是时延,因为这并不是直接面向用户的系统。如果能够通过优化运营策略和算法调整,提高系统的并发能力,那么我们在训练侧的瓶颈就会更小一些。
在推理侧的部分,目前我们正在探索一些较为前沿的技术,旨在解决强化学习中特有的数据分布不一致性问题。具体而言,我们用蓝色标记了一条数据的推理过程,这一过程源自蚂蚁集团无意团队开发的 AReaL 框架。该框架主要解决的问题是:在训练过程中,推理的样本长度参差不齐,有的样本很长,而有的则相对较短。为了组成一个批次进行训练,最糟糕的情况是所有较短的样本必须等待最长的样本完成,这无疑会导致大量的时间浪费,因为这些等待时间无法得到有效利用。
这种模式在当前较为常见的推理框架中较为典型,例如类似 vLLM 的框架就是如此操作的:等待一批推理完成后再进行收集和训练,训练结束后将所有权重更新至模型,随后继续推进。为了缓解这种时间浪费问题,有一种方法被称为“一步离策略”(one step off policy)。具体而言,就是先完成推理,然后开始训练,在训练的同时,让另一组 CPU 继续进行推理。然而,即便如此,仍会存在一些空跑现象,因为数据本身的结束时间是无法预测的,这是大语言模型自回归特性所导致的。
在 AReaL 框架以及后续的相关工作中,提出了推理方面的一些全新挑战,即推理过程必须是可以被打断的。例如,在推理过程中,当推理进行到一半时,如果模型更新了,我们该怎么办?此时需要中断推理,暂停当前的推理进程,等待权重更新完成后再重新计算 KV Cache,然后继续进行推理。推理部分的挑战是巨大的,因为在这里,我们所面对的可能是一个大规模的集群,拥有数百甚至数千张 GPU 卡。
除了推理部分,评估环节也是我们目前重点探索的领域。目前,我们的评估方式相对简单,主要基于 CPU 进行推理。然而,从行业发展趋势来看,随着应用场景的日益复杂,未来必然需要更多 GPU 的参与,因为我们需要模拟的场景将变得越来越复杂。目前,我们仅使用简单的规则来进行评分,这并不需要 GPU 的强大计算能力,CPU 就足以胜任。但展望未来,比如让模型玩游戏或在元宇宙中进行模拟,评估场景将需要同时使用 CPU 和 GPU,构建一个庞大的评估系统。
我简单列举了一些相关内容,这些其实都是为了让我们在超大规模强化学习中更贴近现实场景而做的前期准备。在评估部分,有两篇比较前沿的论文值得大家关注。第一篇是由 OpenAI 研究员姚顺宇撰写的《The Second Half》,其中提到,未来大语言模型的竞争将不再仅仅是预训练数据量的比拼,而是看谁能收集到更多现实交互中的经验。这些经验以及相应的演变过程,其实与我之前提到的是相对应的。如果大家认同我们的模型将越来越自主地与世界进行交互,那么下一步评估部分的需求肯定会不断增加。
训练部分看似最为常规,但其中也存在诸多挑战。在超大规模训练中,我们需要考虑的最重要因素是什么?其实,我们需要在框架的兼容性和效率之间做出权衡。如果大家是行业从业者,那么在进行预训练和 SFT 时,基本都会在不同框架之间做出选择,要么是功能强大的 Megatron,要么是像 DeepSpeed 这样较为轻量级的、基于 Hugging Face 体系的框架。但选择并非随意,因为像 Megatron 这样高效的框架,其维护成本较高,同时在兼容性方面也必然会牺牲一些与 Hugging Face 生态系统的互动性。而 FSDP 和 DeepSpeed,大家都知道在强化学习领域,现在很多人都倾向于使用 FSDP,包括 FSDP2 这种类似于 ZeRO-3 的方式。然而,这其中存在很多历史惯性问题,比如 DeepSpeed 中的 ZeRO-3 和 FSDP 到底该如何选择等,这些问题都是我们在训练过程中需要仔细考虑的重要因素。
下面这张图是由蚂蚁集团的黑石同学提供的,非常感谢他。在我们讨论完这部分内容后,大家可能会好奇,这三者之间究竟是如何协同工作的呢?其实,这涉及到调度方面的问题。在业内,比较通行的做法是使用 Ray 这个框架,我就不做过多具体介绍了。它其实很容易帮助我们实现 SPMD 的方式。具体来说,虽然这段代码看起来是在同一台机器的进程中运行,但在物理机集群上,它实际上是分配到不同节点上的。正如我们之前提到的,强化学习中一部分模型可能在一台机器的 GPU 卡上运行,而另一台机器则在做不同的事情,如何将它们联合起来其实是一个非常棘手的问题。Ray 可以避免我们手动编写大量的 RPC 代码,同时也不需要直接使用底层的通信库(如 MPI 或 NCCL)来实现节点之间的通信。
开源生态及社区共建
我最早参与的开源社区项目名为 Open RLHF,当时我们的第一版叫 Open LLaMA2。那时 LLaMA2 刚刚推出,表现十分出色,我们觉得有必要打造一个类似的项目,以便国内社区能够有所借鉴和使用。因为当时确实缺乏相关的框架,大家都不清楚该如何入手,可以说是“不识庐山真面目”。于是,我们开发了一套非常简单的系统,它基于 Ray 调度框架,结合了当时在所有领域中效率最高且兼容性最好的调度方式。我们采用了 vLLM 作为推理引擎,DeepSpeed 作为训练引擎,并兼容了 Hugging Face 的整个生态系统,就这样启动了强化学习项目。直到后来,强化学习领域发展迅猛,字节跳动推出了一个名为 VeRL 的框架。VeRL 是基于一篇论文的开源实践,它融合了单控制器的核心优势以及多控制器的灵活性和效率。目前,这一领域生态良好,得到了广泛的应用。此外,还有 AReaL 框架,它侧重于性能优先的异步性,性能表现极为出色。其设计思路与手动拆分模型的方法有所不同,更多地采用了类似“货柜”的方式,将开源社区中的优质资源进行整合。
阿里巴巴也推出了一个名为 Roll 的框架,由淘天集团主导开发。它的主要特点是针对 Agentic 方式进行了设计,借鉴了强化学习中 RL Gym 的模式,帮助用户快速搭建 Agentic 的工作流程,有兴趣的用户可以尝试使用。最后是 Slime,它的理念是用最简单的方式去做最大规模的事情,通过将 SGLang 与 Megatron 结合,以生成为中心进行开发。
本质上,这些框架之间的区别并没有那么大,因为它们都是对超大规模系统设计的一种思考。它们都是从 RLHF 时代逐渐演进而来,主要的区别在于它们采用了什么样的调度引擎、训练引擎,推理是如何设计的,以及它们各自的特点。如果大家感兴趣,可以自行下载并进行实验,因为它们都是开源的。中国的厂商在这个领域表现得非常勤奋,推出了许多高质量的框架,为用户提供了丰富的选择。
结 语
强化学习的算法和系统在过去几年中发生了巨大的变化。我们从简单的人类反馈发展到环境反馈,完成了多轮的持续提升。每一次技术变革,我们都能看到模型迭代的变化,例如从 O1 到 O3,再到 R1 等等。所有这些算法都离不开背后的超大规模强化学习系统以及算法工程师的努力。我认为,未来我们的开源系统需要在几个方面进行共建。首先,推理需要更高效、更灵活。例如,在推理过程中,能否根据序列长度动态调整并行化策略,实现自动化的张量并行(Tensor Parallelism)。其次,评估目前还处于相对早期的阶段,未来评估系统所占的算力将大幅提升。最后,虽然我们在训练方面已经有了解决方案,但还没有完全兼顾到性能和生态之间的平衡,还有很大的提升空间。我认为要打造一个生态活跃且具有业务价值的强化学习系统,仍需要算法和系统的协同设计。欢迎大家积极参与到我们的整体设计共建中来。
本文来自微信公众号 “InfoQ”(ID:infoqchina),作者:曹宇,36氪经授权发布。















