跳转至

Netloader 指南

本指南提供了在 vLLM Ascend 中使用 Netloader 作为权重加载插件以实现加速的操作说明。


概述

Netloader 利用 NPU 卡之间的高带宽对等(P2P)传输来加载模型权重。它作为插件实现(通过 vLLM 0.10 中添加的 register_model_loader API)。工作流程如下:

  1. **服务器**预加载模型。
  2. 新的**客户端**实例请求权重传输。
  3. 验证模型和分区匹配后,客户端使用 HCCL 集合通信(send/recv)按照模型存储的相同顺序接收权重。

服务器通过子线程以及 vLLM 中的 stateless_init_torch_distributed_process_group 与正常推理任务并行运行。因此,客户端接管权重初始化,无需从存储加载。

流程图

Netloader 流程图

时序图

Netloader 时序图

应用场景

  • 降低启动延迟:通过复用已加载的权重并在 NPU 卡之间直接传输,Netloader 相比传统的远程/本地拉取策略,大幅缩短了模型加载时间。
  • 减轻网络和存储负载:避免从远程仓库重复下载权重文件,从而减轻中央存储的压力和网络流量。
  • 提高资源利用率并降低成本:更快的加载速度减少了对备用计算节点的依赖;资源扩缩容更加灵活。
  • 增强业务连续性与高可用性:在故障恢复中,新实例可以快速接管而无需长时间停机,提升了系统的可靠性和用户体验。

用法

要启用 Netloader,请传递 --load-format=netloader 并通过 --model-loader-extra-config(作为 JSON 字符串)提供配置。以下是支持的配置字段:

字段名称 类型 描述 允许值 / 备注
SOURCE 列表 权重数据源。每一项是一个包含 device_idsources 的映射,指定 rank 及其端点(IP:端口)。
示例:{"SOURCE": [{"device_id": 0, "sources": ["10.170.22.152:19374"]}, {"device_id": 1, "sources": ["10.170.22.152:11228"]}]}
如果省略或为空,则回退到默认加载器。此处的 SOURCE 具有第二优先级。
包含 device_id: intsources: List[str] 键的对象列表
MODEL 字符串 模型名称,用于验证客户端和服务器之间的一致性。 如果未指定,默认为 --model 参数的值。
LISTEN_PORT 整数 服务器监听器的基础端口。 实际端口 = LISTEN_PORT + RANK。如果省略,将选择一个随机有效端口。有效范围:1024–65535。如果超出范围,该服务器实例将不会开启监听器。
INT8_CACHE 字符串 量化模型中处理 int8 参数的行为。 可选值为 ["hbm", "dram", "no"]
- hbm: 将原始 int8 参数复制到高带宽内存(HBM)(可能会消耗大量 HBM)。
- dram: 复制到 DRAM。
- no: 不进行特殊处理(可能导致结果偏差或不可预测的行为)。默认值:"no"
INT8_CACHE_NAME 列表 应用 INT8_CACHE 的参数名称(即过滤)。 默认值:None(意味着不进行过滤——应用于所有参数)。
OUTPUT_PREFIX 字符串 在服务器模式下,写入每个 rank 监听地址/端口文件的前缀。 如果设置,每个 rank 将写入到 {OUTPUT_PREFIX}{RANK}.txt(文本文件),内容为 IP:Port
CONFIG_FILE 字符串 指定上述配置的 JSON 文件路径。 如果提供,此文件内的 SOURCE 具有**第一优先级**(覆盖其他配置中的 SOURCE)。

示例命令与占位符

运行前请替换 `<...>` 中的部分内容。

服务器

VLLM_SLEEP_WHEN_IDLE=1 vllm serve <model_file> \
  --tensor-parallel-size 1 \
  --served-model-name <model_name> \
  --enforce-eager \
  --port `<port>` \
  --load-format netloader

客户端

export NETLOADER_CONFIG='{"SOURCE":[{"device_id":0, "sources": ["<server_IP>:<server_Port>"]}]}'

VLLM_SLEEP_WHEN_IDLE=1 ASCEND_RT_VISIBLE_DEVICES=<device_id_diff_from_server> \
  vllm serve <model_file> \
  --tensor-parallel-size 1 \
  --served-model-name <model_name> \
  --enforce-eager \
  --port <client_port> \
  --load-format netloader \
  --model-loader-extra-config="${NETLOADER_CONFIG}"

占位符说明

  • <model_file>: 模型文件路径
  • <model_name>: 模型名称(服务器和客户端必须一致)
  • <port>: 服务器的基础监听端口
  • <server_IP> + <server_Port>: Netloader 服务器的 IP 和端口(来自服务器日志)
  • <device_id_diff_from_server>: 客户端设备 ID(必须与服务器不同)
  • <client_port>: 客户端监听的端口

启动后,您可以通过发布 HCCL_BUFFERSIZE 的推理请求并比较输出来测试一致性。


注意与警告

  • 如果使用 Netloader,**每个工作进程**都必须绑定一个监听端口。该端口可以由用户指定或随机分配。如果是用户指定的,请确保其可用。
  • Netloader 需要额外的片上内存来建立 HCCL 连接(即 --gpu-memory-utilization,默认约为 200 MB)。用户应预留足够的容量(例如通过 VLLM_SLEEP_WHEN_IDLE=1)。
  • 建议设置 ](https://github.com/vllm-project/vllm/issues/16660) 以减轻连接/传输不稳定或缓慢的问题。相关信息请参见:vLLM Issue #16660, [vLLM PR #16226