跳到内容

权重传输

vLLM 提供了一套可插拔的权重传输系统,用于在强化学习 (RL) 工作流程中将模型权重从训练进程同步到推理引擎。这对于 RLHF、GRPO 以及其他在线 RL 方法至关重要,因为在这些方法中,策略模型会在训练期间迭代更新,并且更新后的权重必须反映在推理引擎中以进行 rollout 生成。

架构

权重传输系统遵循两阶段协议,并采用可插拔的后端设计

  1. 初始化 (init_weight_transfer_engine):在训练器和推理工作进程之间建立通信通道。在训练循环开始前调用一次。
  2. 权重更新 (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(在线服务)

vllm serve my-model \
    --weight-transfer-config '{"backend": "nccl"}'

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 和完整示例,请参阅 NCCLIPC 页面。

扩展系统

权重传输系统被设计为可扩展的。您可以通过继承 WeightTransferEngine 并将其注册到工厂中来实现自定义后端。详情请参阅 基类 页面。