IPC 引擎¶
IPC 权重传输引擎使用 CUDA IPC(进程间通信)句柄,直接在同一节点和同一 GPU 上的训练器与推理工作进程之间共享 GPU 内存。这避免了任何数据拷贝,使其成为在主机上同时部署训练和推理任务时的高效选择。
何时使用 IPC¶
- 在同一 GPU 上进行训练和推理(同置部署)
- 希望通过原地(in-place)共享张量来最小化内存开销
工作原理¶
- 训练器为每个权重创建 CUDA 张量,并使用
torch.multiprocessing.reductions.reduce_tensor生成 IPC 句柄。 - IPC 句柄通过 Ray.remote() 或 HTTP POST 发送至推理引擎。
- 推理工作进程从句柄重建张量,直接读取训练器的 GPU 内存。
警告
IPC 句柄涉及发送序列化的 Python 对象。使用 HTTP 传输时,必须在服务器和客户端上均设置 VLLM_ALLOW_INSECURE_SERIALIZATION=1。这是因为 IPC 句柄在 HTTP 传输前会被进行 pickle 处理并进行 base64 编码。
初始化¶
IPC 后端在两侧均无需初始化。init_transfer_engine 调用对于 IPC 而言是一个空操作(no-op)。
发送权重¶
IPC 支持两种传输模式来交付这些句柄:
Ray 模式¶
当 vLLM 作为 Ray Actor 运行时使用
from vllm.distributed.weight_transfer.ipc_engine import (
IPCTrainerSendWeightsArgs,
IPCWeightTransferEngine,
)
trainer_args = IPCTrainerSendWeightsArgs(
mode="ray",
llm_handle=llm_actor_handle,
)
IPCWeightTransferEngine.trainer_send_weights(
iterator=model.named_parameters(),
trainer_args=trainer_args,
)
在 Ray 模式下,引擎通过 Ray 的序列化机制直接调用 llm_handle.update_weights.remote(...) 并传递 IPC 句柄。
HTTP 模式¶
当 vLLM 作为 HTTP 服务器运行时使用
trainer_args = IPCTrainerSendWeightsArgs(
mode="http",
url="https://:8000",
)
IPCWeightTransferEngine.trainer_send_weights(
iterator=model.named_parameters(),
trainer_args=trainer_args,
)
在 HTTP 模式下,IPC 句柄会被 pickle、进行 base64 编码,并作为 JSON 发送到 /update_weights 端点。
请参阅 IPCTrainerSendWeightsArgs 获取完整的可配置字段列表。
示例¶
- 使用 IPC 权重同步的 RLHF(离线,Ray) - 使用 Ray 放置组和 CUDA IPC 句柄在单个 GPU 上进行同置训练和推理
- 使用 IPC 权重同步的 RLHF(在线服务,HTTP) - 使用 vLLM HTTP 服务器进行权重传输,其中服务器和训练器共享同一个 GPU