RFork 指南¶
本指南说明如何在 vLLM Ascend 中将 RFork 用作模型加载器插件。
概述¶
RFork 是 vLLM Ascend 的预热启动权重加载路径。它不会总是从存储中读取模型权重,而是允许新实例向外部规划器请求一个兼容的 seed 实例,然后通过 YuanRong TransferEngine 直接从该 seed 拉取权重。
当前实现中,RFork 的加载流程如下:
- vLLM 使用
--load-format rfork启动。 - RFork 根据模型标识和部署拓扑构建 seed key。
- RFork 向规划器请求与该 key 匹配的可用 seed。
- 如果返回了 seed,新实例会在本地 NPU 上初始化模型结构,注册本地权重内存,从 seed 获取远程传输引擎元数据,并将权重批量传输到本地参数缓冲区。
- 如果没有可用 seed,或任何步骤失败,RFork 会清理并回退到默认加载器。
- 实例完成加载后,会启动本地 seed 服务,并定期向规划器上报心跳,以便后续实例可以复用它。
流程图¶

应用场景¶
- 首次成功加载后扩容:第一个实例可能仍然从存储加载,但具有相同部署标识的后续实例可以将其作为 seed 复用,从而缩短启动时间。
- 弹性服务集群:由于 RFork 会向规划器请求可用 seed,因此适用于实例动态创建和回收的集群。
- 拓扑敏感型部署:RFork 会将
kv_role、node_rank、可选的pp_rank、tp_rank、可选的ep_rank以及可选的draft角色编码到 seed key 中,因此只会匹配拓扑兼容的实例。
使用方法¶
要启用 RFork,请传入 --load-format rfork,并通过 --model-loader-extra-config 以 JSON 字符串形式提供 RFork 配置。
RFork 前置条件¶
- 在每个 RFork 实例上安装运行时依赖
YuanRong TransferEngine。 - 运行一个实现 RFork seed 协议的规划器服务。
rfork_planner.py提供了一个简单的 mock 规划器脚本。
配置字段¶
| 字段名称 | 类型 | 描述 | 允许值 / 说明 |
|---|---|---|---|
| model_url | String | 用于构建 RFork seed key 的逻辑模型标识。 | RFork 传输必需。需要共享 seed 的实例必须使用相同值。 |
| model_deploy_strategy_name | String | 与 model_url 一起用于构建 seed key 的部署策略标识。 |
RFork 传输必需。需要共享 seed 的实例必须使用相同值。 |
| rfork_scheduler_url | String | 用于 seed 分配、释放和心跳的规划器服务基础 URL。 | 基于规划器匹配时必需。示例:http://127.0.0.1:1223。 |
| rfork_seed_timeout_sec | Number | 启动后等待本地 seed HTTP 服务变为健康状态的超时时间。 | 可选。默认值:5.0。必须大于 0。无效值会回退到默认值。 |
| rfork_seed_key_separator | String | 构建 RFork seed key 字符串时使用的分隔符。 | 可选。默认值:$。兼容实例之间保持相同值。 |
RFork 如何匹配 Seed¶
RFork 不会仅根据 model_url 匹配实例。本地 seed key 由以下部分组成:
model_urlmodel_deploy_strategy_name- 从
kv_transfer_config.kv_role或kv_both推导出的分离模式 node_rank- 当流水线并行大小大于 1 时的
pp_rank tp_rank- 当 MoE 模型启用专家并行时的
ep_rank - 当 worker 作为 draft 模型运行时的可选
draft后缀
这意味着两个实例必须在模型标识和部署拓扑上都一致,规划器才会将它们视为可互换的 seed。 对于没有流水线并行或专家并行的部署,现有 seed-key 格式保持不变。
量化模型¶
对于量化模型,RFork 传输的是 Ascend 权重后处理之后的张量,而不是原始 checkpoint 参数。接收端首先构建与 seed 相同的加载后张量布局,然后 RFork 复制推理使用的实时 NPU 张量。
该路径处理 Ascend 量化变更,例如权重转置、NZ 格式转换、打包权重、派生 scale 张量,以及 W_UV 和 W_UK_T 等 MLA/SFA 运行时张量。在后处理期间释放的空张量不会包含在传输清单中。
在验证量化模型的 RFork 时:
- 对 seed 实例和接收端实例应用相同的 vLLM Ascend 代码。
- 更改 RFork 代码后,重启规划器和所有 vLLM 实例,因为现有 seed 会保留旧的传输元数据。
- 更改模型参数或 RFork 代码后,使用新的
model_deploy_strategy_name,以免规划器将接收端与不兼容的旧 seed 匹配。 - 成功的 RFork 传输会记录
transfer weights starts和transfer weights time。回退路径会记录RFork transfer failed。
已测试模型¶
下表记录了已明确使用 RFork 权重传输测试过的模型。只有当 RFork 传输成功且加载后的实例通过基本推理验证后,才应将模型添加到此处。
| 模型 | 精度 / 量化 | 硬件 | 验证状态 | 说明 |
|---|---|---|---|---|
| Qwen2.5-7B | BF16 | A2 | 已测试 | RFork 传输已验证。 |
| Qwen3-32B | BF16 | A2 | 已测试 | RFork 传输已验证。 |
| Qwen3-235B-A22B | BF16 | A2 | 已测试 | RFork 传输已验证。 |
| DeepSeek-V4-Flash-W8A8-MTP | W8A8 | A2 | 已测试 | 带 MTP draft 模型的 RFork 传输已验证。 |
| GLM5-W4A8 | W4A8 | A2 | 已测试 | RFork 传输已验证。 |
| 模型 | 精度 / 量化 | 硬件 | 验证状态 | 备注 |
|---|---|---|---|---|
| Kimi2.5-W4A8 | W4A8 | A2 | 已测试 | RFork 传输已验证。 |
示例命令与占位符¶
运行前,请替换
<...>中的部分。
1. 安装 YuanRong TransferEngine¶
2. 启动规划器¶
在 rfork_planner.py 中提供了一个简单的规划器实现。
3. 启动 vLLM 实例¶
在同一部署中,第一个实例和后续实例都应使用相同的 RFork 启动命令。
对于第一个实例,规划器通常还没有兼容的种子,因此 RFork 会回退到默认加载器。加载完成后,该实例会启动本地种子服务,并向规划器报告自身。
对于后续实例,如果规划器能够分配一个兼容的种子,RFork 会先尝试从现有种子实例传输权重,然后再回退到默认加载器。
export RFORK_CONFIG='{
"model_url": "<model_url>",
"model_deploy_strategy_name": "<deploy_strategy>",
"rfork_scheduler_url": "http://<planner_ip>:<planner_port>"
}'
vllm serve <model_path> \
--tensor-parallel-size 1 \
--served-model-name <served_model_name> \
--port <port> \
--load-format rfork \
--model-loader-extra-config "${RFORK_CONFIG}"
占位符说明¶
<model_path>:传递给vllm serve的模型路径或模型标识符。<served_model_name>:vLLM 暴露的服务名称。<planner_ip>:RFork 规划器的 IP 地址或主机名。<planner_port>:RFork 规划器的监听端口。<model_url>:用于构建 RFork 种子键的稳定模型标识字符串。<deploy_strategy>:用于构建 RFork 种子键的稳定部署策略名称。<port>:正在启动的 vLLM 实例的服务端口。
注意事项与说明¶
- RFork 在运行时依赖
YuanRong TransferEngine。如果缺少该包,RFork 将无法初始化传输后端。 - 如果使用 RFORK,每个工作进程都必须绑定一个监听端口。该端口会随机分配。
- RFork 权重传输不支持动态 EPLB,因为在种子服务启动后,专家权重和放置可能会发生变化。如果
eplb_config.dynamic_eplb或eplb_config.expert_map_record_path启用了动态 EPLB,则 RFork 传输会被绕过,模型将通过默认模型加载器加载。 - 示例
rfork_planner.py只是一个简单的模拟实现。如果你需要更强的调度、容量管理或生产级可用性行为,请基于 RFork 种子协议实现自己的规划器。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 vl/vllm-ascend