Prhub

#51160 [XPU][Test] Support MultiConnector accuracy testing on XPU

原始 PR 作者 zhenwei-intel 合并时间 2026-08-06 13:49 文件变更 2 提交数 1 评论 3 代码增减 +20 / -5

执行摘要

XPU 上支持 MultiConnector 正确性测试

PR body 明确目标为“Support MultiConnector accuracy testing on XPU”。原脚本硬编码 CUDA_VISIBLE_DEVICES 且没有 KV buffer 设备选项,无法在 Intel XPU 上复用;本 PR 旨在补齐这一平台覆盖,使 MultiConnector(NixlConnector + OffloadingConnector)的正确性验证能在 XPU 环境执行。

该 PR 体量小且为纯测试变更,不值得精读。若关注测试脚本如何做跨平台设备抽象,可留意 DEVICE_VISIBILITY_ENV 的切换方式和 kv_buffer_device 配置注入;整体设计直白,无需深入。

讨论亮点

PR 没有实质性的代码 review 讨论。作者在 issue 评论中请求 @NickLucche、@jikunshang 查看;维护者 jikunshang 回复 /ci run 触发 Buildkite CI,随后直接批准合并。claude[bot] 因 PR 来自 fork 而自动禁用 review,未产生技术评论。结论:维护者认为改动风险低,审批通过,无未解决疑虑。

实现拆解

实现分四步:

  1. run_multi_connector_accuracy_test.sh 中新增 MAX_MODEL_LEN(默认 8192)与 KV_BUFFER_DEVICE(默认 cuda)环境变量,并在文件头注释补充说明;随后根据 KV_BUFFER_DEVICE 是否等于 xpu,将设备可见性变量 DEVICE_VISIBILITY_ENV 选择为 ZE_AFFINITY_MASKCUDA_VISIBLE_DEVICES
  2. KV_CONFIG_NORMALKV_CONFIG_CROSS_LAYERS 两份 JSON 配置中,为内层 NixlConnector 增加 kv_buffer_device 字段,其值来自 KV_BUFFER_DEVICE,确保 MultiConnector 内层连接器的 KV buffer 落到正确设备。
  3. run_tests_for_model 中,将 prefill 与 decode 两个 vllm serve 命令的设备前缀从硬编码 CUDA_VISIBLE_DEVICES 替换为 $DEVICE_VISIBILITY_ENV,并统一追加 --max-model-len 参数;同时把 get_num_gpus 的 fallback 从 1 改为 2,因为本测试始终需要两张卡。
  4. test_accuracy.py 中将 NUM_CONCURRENT 从常量 100 改为 int(os.getenv("NUM_CONCURRENT", "100")),允许 XPU 场景下调低 lm-eval 并发避免资源竞争。
文件 模块 状态 重要度
tests/v1/kv_connector/nixl_integration/run_multi_connector_accuracy_test.sh KV 连接器 modified 5.11
tests/v1/kv_connector/nixl_integration/test_accuracy.py KV 连接器 modified 3.42

关键符号

get_num_gpus run_tests_for_model

关键源码片段

tests/v1/kv_connector/nixl_integration/run_multi_connector_accuracy_test.sh test-coverage

主变更文件:新增 KV_BUFFER_DEVICE/MAX_MODEL_LEN 环境变量、设备可见性切换、NixlConnector 的 kv_buffer_device 注入,以及 serve 命令的 --max-model-len 参数,是 XPU 支持的核心所在。

# 从环境变量读取 KV buffer 设备,XPU 场景需设为 xpu
KV_BUFFER_DEVICE=${KV_BUFFER_DEVICE:-cuda}
MAX_MODEL_LEN=${MAX_MODEL_LEN:-8192}# 设备可见性变量:XPU 用 ZE_AFFINITY_MASK,CUDA/ROCm 用 CUDA_VISIBLE_DEVICES
if [[ "$KV_BUFFER_DEVICE" == "xpu" ]]; then
  DEVICE_VISIBILITY_ENV=ZE_AFFINITY_MASK
else
  DEVICE_VISIBILITY_ENV=CUDA_VISIBLE_DEVICES
fi# 将 kv_buffer_device 注入 NixlConnector 配置,MultiConnector 内层连接器
# 才能把 KV buffer 放到正确设备(XPU 上为 xpu)
KV_CONFIG_NORMAL='{
  "kv_connector":"MultiConnector",
  "kv_role":"kv_both",
  "kv_connector_extra_config":{
    "connectors":[
      {"kv_connector":"NixlConnector","kv_role":"kv_both",
       "kv_buffer_device":"'$KV_BUFFER_DEVICE'"},
      {"kv_connector":"OffloadingConnector","kv_role":"kv_both",
       "kv_connector_extra_config":{"cpu_bytes_to_use":1000000000}}
    ]
  }
}'
# 去除空白,保证 CLI 传参安全
KV_CONFIG_NORMAL=$(echo "$KV_CONFIG_NORMAL" | tr -d '[:space:]')

评论区精华

无实质 review 讨论,维护者直接审批 other

作者 @zhenwei-intel 在 issue 评论中请 @NickLucche、@jikunshang 查看;@jikunshang 回复 `/ci run` 触发 Buildkite CI,之后直接批准。claude[bot] 因 fork PR 自动禁用 review,没有技术评论。

结论:维护者认可改动,批准合并,没有留下未解决问题。 · 已解决

风险与影响

本 PR 只改测试脚本,不涉及产品代码。主要风险点:

1) get_num_gpus 的 fallback 从 1 改为 2 后,在无法探测 GPU 数量的环境(如容器)会默认返回 2,可能因实际只有单卡导致后续启动失败;
2) MAX_MODEL_LEN 默认 8192 会改变既有非 XPU 场景的测试行为(之前未显式传参);
3) 脚本仍假设两张卡且设置 UCX_NET_DEVICES=all,XPU 环境下 UCX 网络设备的兼容性未在 CI 中专门验证。以上风险均局限于测试基础设施。

对生产用户无影响;对测试团队,脚本成为在 Intel XPU 上验证 MultiConnector(NixlConnector + OffloadingConnector)正确性的标准入口;对 vLLM 社区,扩展了 KV 传输多连接器在非 NVIDIA/AMD 平台的测试覆盖,属于跨平台支持的一部分。

测试脚本行为变更 默认参数影响既有路径 仅测试覆盖

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论