权重传输¶
vLLM 提供了一套可插拔的权重传输系统,用于在强化学习 (RL) 工作流程中将模型权重从训练进程同步到推理引擎。这对于 RLHF、GRPO 以及其他在线 RL 方法至关重要,因为在这些方法中,策略模型会在训练期间迭代更新,并且更新后的权重必须反映在推理引擎中以进行 rollout 生成。
架构¶
权重传输系统遵循两阶段协议,并采用可插拔的后端设计
- 初始化 (
init_weight_transfer_engine):在训练器和推理工作进程之间建立通信通道。在训练循环开始前调用一次。 - 权重更新 (
update_weights):将更新后的权重从训练器传输到推理引擎。在每个训练步骤(或一批步骤)后调用。
可用后端¶
| Backend | 传输方式 | Use Case |
|---|---|---|
| NCCL | NCCL 广播 | 训练和推理使用独立的 GPU |
| IPC | CUDA IPC 句柄 | 在同一 GPU 上协同部署训练和推理 |
配置¶
通过 WeightTransferConfig 指定权重传输后端。后端决定了由哪个引擎负责权重同步。
编程方式(离线推理)¶
from vllm import LLM
from vllm.config import WeightTransferConfig
llm = LLM(
model="my-model",
weight_transfer_config=WeightTransferConfig(backend="nccl"), # or "ipc"
)
CLI(在线服务)¶
backend 字段接受 "nccl"(默认)或 "ipc"。
API 端点¶
当以 HTTP 服务器模式运行 vLLM 时,以下端点可用于权重传输
| 端点 | 方法 | 描述 |
|---|---|---|
/init_weight_transfer_engine | POST | 使用后端特定信息初始化权重传输引擎 |
/update_weights | POST | 使用后端特定元数据触发权重更新 |
/pause | POST | 在权重同步前暂停生成,以处理正在进行的请求 |
/resume | POST | 权重同步后恢复生成 |
/get_world_size | GET | 获取推理工作进程数量(有助于 NCCL 世界大小计算) |
注意
HTTP 权重传输端点要求设置 VLLM_SERVER_DEV_MODE=1。
训练器侧 API¶
两个后端都提供了训练器用于发送权重的静态方法。通用模式如下:
# 1. Initialize the transfer engine (backend-specific)
EngineClass.trainer_init(init_info)
# 2. Send weights to inference workers
EngineClass.trainer_send_weights(
iterator=model.named_parameters(),
trainer_args=backend_specific_args,
)
有关后端特定的训练器 API 和完整示例,请参阅 NCCL 和 IPC 页面。
扩展系统¶
权重传输系统被设计为可扩展的。您可以通过继承 WeightTransferEngine 并将其注册到工厂中来实现自定义后端。详情请参阅 基类 页面。