vLLM 原生 RL API 发布

vLLM 原生 RL API 发布

vLLM 已发布原生强化学习(RL) API,旨在标准化训练和推理之间的权重同步并稳定异步 RL 工作负载。这些更新解决了常见问题:在各种框架中,权重同步曾以临时、重复的方式实现;此外,异步 RL 设置在规模扩大时变得脆弱,尤其是在 P/D 和 DPEP 部署中。

原生权重同步 API

为了确保在线 RL 中的 rollout 使用最新的模型权重生成,vLLM 现在提供了一种标准化的权重传输接口,取代了对特定框架工作器扩展的需求。

权重传输生命周期

权重传输过程被划分为四个不同的阶段,并采用可插拔的后端:

  1. Initialization (init_weight_transfer_engine): 在训练循环开始之前,在训练器和推理工作器之间建立通信通道。
  2. Start weight update (start_weight_update): 准备 vLLM 工作器接收权重,通常在每个训练步骤后调用。
  3. Update weights (update_weights): 将训练器的全部或部分权重传输到推理引擎,支持分块传输。
  4. Finish weight update (finish_weight_update): 执行必要的后处理,例如量化。

支持的后端和自定义

vLLM 目前支持两个主要的权重传输后端,两者均使用经过优化的打包实现以减少序列化开销:

  • NCCL: 用于通过广播操作在不同 GPU 上的训练和推理工作器之间进行权重传输。
  • IPC: 通过共享内存句柄使用 CUDA IPC 在同一设备上进行权重传输。

开发者可以通过注册自定义的 WeightTransferEngine 抽象来实现自己的传输逻辑,将传输机制与工作器实现分离。

改进的异步 RL 支持

异步 RL 需要在推理请求仍在进行过程中更新权重。vLLM 引入了新机制来处理此过程,而不会中断客户端请求或导致系统死锁。

"Keep Mode" 介绍

vLLM 为 pause_generationresume_generation 方法(以及对应的 /pause/resume HTTP API)添加了 keep mode。这使得引擎可以在保持状态的情况下暂停正在进行的请求并停止调度器,确保客户端无需重试请求。

模式 说明 客户端影响 是否支持异步 RL?
abort 中止所有正在进行的请求 客户端必须处理重试
wait 等待所有正在进行的请求 客户端无需重试
keep 暂停正在进行的请求 客户端无需重试

解决 DPEP 部署中的死锁

在数据并行(DP)部署中,当某些引擎接收到暂停信号而其他引擎正在处理请求并等待同步时,以前会出现死锁。vLLM 通过以下两项主要更改来解决此问题:

  1. EngineCore Integration: 将暂停逻辑从 AsyncLLM 入口层移动到 EngineCore 内部的调度器,以减少竞争条件。
  2. 两阶段暂停/恢复协议
    • 第一阶段(局部暂停):引擎暂停调度,但继续响应 START_DP_WAVE 请求以参与所需的前向传播。
    • 第二阶段(全局暂停):引擎执行定期的 all-reduce(每 32 步一次)以验证所有排名是否处于“局部暂停”状态。达到共识后,它们一起过渡到全局暂停。

验证与性能

框架集成

新 API 已集成到 SkyRL 中,使用 DAPO 配方实现 Qwen3-1.7B 的异步训练。

大规模部署

Prime-RL 团队在 P/D 分离部署中使用 zai-org/GLM-5.1-FP8 模型验证了这些 API。该部署覆盖了 16 个 8xH200 节点(2 个副本,每个副本为 4P+4D,并使用 DPEP32 进行预填充和解码),并利用 CPU KV 缓存卸载(每节点 1TB)。该设置在超过 100 个训练步骤中保持稳定,权重更新一致且评估性能不断提升。

Sources