1、基于Verl框架的训练性能优化龚迪洪 腾讯金融科技OverviewVerl 简要介绍基于 Verl 提出 Megatron+Sglang 设计方案Parameter Sharding 算法Rollout 加速算法Verl1.VeRL就是一个主要面向RL的训练框架,支持例如REINFORCE/GRPO/DPO。2.使用 Ray 作为分布式计算框架,现在流行的RL框架如VeRL和OpenRLHF都依托Ray管理RL中复杂的Roles(比如PPO需要四个模型)和分配资源。3.RL即强化学习,是大模型领域的当红技术,提升模型推理能力的关键。4.RL 的与传统SFT关键差异在于训练样本是由被训练模型动态
2、采样生成的(Rollout),而SFT是预先准备好的QA对。强化学习算法示例Source:DeepSeekMath:Pushing the Limits of Mathematical Reasoning in Open Language ModelsMegatron+Sglang 设计方案Sglang 进程组1.从 verl 创建ActorRolloutWorker对象2.一共创建#Egines 个父进程3.每个父进程创建 tp_size 个子进程4.因此整个系统的子进程数量 world_size=#Engines*tp_sizeMegatron 进程组1.Megatron与Sglang共享
3、子进程组2.通过 init_process_group()来创建Megatron 通信组,以支持模型训练二二阶进阶进程程组组架构架构二二阶进阶进程程组组的的设计设计Motivations1.第一阶进程组兼容当前 verl 的架构,对应 ActorRolloutWorker。2.第二阶进程组的设计是为了支持 Megatron,因为 Sglang 的模型切片策略与 Megatron 不同,因此需要二阶进程组来分别处理 Sglang 与 Megatron。3.底层进程共享:虽然 sglang 与 megatron对应不同的进程分组,但是它们都由相同的底层进程,这种共享机制避免了参数同步的 时候不必要
4、的数据序列化。Megatron+Sglang 设计方案Rollout 的数据并行模式的数据并行模式1.在rollout阶段,数据被平均分成#Engines份,每个Sglang engine处理其中一份2.多个 Sglang engines 之间独立工作3.每个 engine 内部有多个分布式进程以支持tensor_parallel4.所有engines完成rollout之后再汇总返回driverMegatron+Sglang 设计方案分布式多机多卡分布式多机多卡 Rollout1.每个 engine 可能使用多台机器(例如 deepseek R1千亿大模型就需要多机器)2.通过模型切片克服单机
5、器不能容纳完整大模型的显存瓶颈3.Sglang 内部使用 tensor_parallel 来连接模型切片Megatron+Sglang 设计方案分布式分布式训练训练Actor1.使用 Megatron 作为训练引擎2.模型切片方式:tensor parallel+pipeline parallel+data parallel3.使用 alibaba/Pai-Megatron-Patch 来支持Megatron训练与模型转换Megatron+Sglang 设计方案训练训练数据构造数据构造Actor1.数据迭代器构造:构造一份全局 训练数据,同步到每个进程,然后每个进程根据自己的rank来获取正确
6、的数据切片。2.数据 packing:将不等长的训练数据pack到一个训练batch,不适用padding以提升有效计算的FLOPs。3.数据均衡:通过分配算法使得每个dp worker得到数量相近的packing数据。Megatron+Sglang 设计方案训练训练LossActor1.往 Megatron 移植了 verl 的 Loss 计算函数2.同时将 Loss 计算需要的变量都传入到每个 megatron worker3.各自 worker 根据自己的 rank(dp/pp/tp)来计算相应的 lossMegatron+Sglang 设计方案M