Prhub

#47105 [XPU] Support ZE_AFFINITY_MASK passthrough in xpu_disagg_acc_test

原始 PR 作者 zhenwei-intel 合并时间 2026-07-01 01:06 文件变更 3 提交数 3 评论 0 代码增减 +57 / -24

执行摘要

XPU 解耦测试支持 ZE_AFFINITY_MASK 透传

允许 XPU disagg accuracy 测试通过外部传递 ZE_AFFINITY_MASK 进行设备选择,以适配不同 GPU 配置环境。

该 PR 为低风险的基础设施优化,建议合并。新增独立 CI job 的设计值得在其他场景推广。

讨论亮点

该 PR 无 review 评论讨论。

实现拆解

  1. 重构设备亲和性逻辑:在 run_xpu_disagg_accuracy_test.sh 中,将原有的 generate_affinity_mask 函数替换为基于 ZE_AFFINITY_MASK 环境变量的解析与索引机制。如果设置了 ZE_AFFINITY_MASK,则将其解析为可用设备列表 AVAILABLE_DEVICES,否则按默认顺序生成设备 ID。新增 compute_gpu_id 函数,根据起始索引和 TP 大小从 AVAILABLE_DEVICES 中提取对应的 GPU ID 字符串。

  2. 更新启动函数:在 launch_baselinelaunch_pd 函数中,使用 compute_gpu_id 动态计算 ZE_AFFINITY_MASK 的值,替换原来的硬编码 0 或独立变量 PREFILLER_ZE_AFFINITY_MASK / DECODER_ZE_AFFINITY_MASK。同时将环境变量名 VLLM_MULTIPROC_EXECUTE_MODEL_TIMEOUT_S 改为 VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS

  3. 拆分 CI job:在 .buildkite/intel_jobs/misc_intel.yaml 中新增一个独立的 job NixlConnector PD accuracy (2 GPUs),专门运行该测试脚本,并配置了 2 个 GPU 资源、num_devices: 2。同时从 .buildkite/intel_jobs/test-intel.yaml 的 "XPU V1 test" job 中移除该测试的调用行,实现关注点分离。

文件 模块 状态 重要度
tests/v1/kv_connector/nixl_integration/run_xpu_disagg_accuracy_test.sh 测试脚本 modified 5.8
.buildkite/intel_jobs/misc_intel.yaml CI 配置 modified 4.22
.buildkite/intel_jobs/test-intel.yaml CI 配置 modified 2.36

关键源码片段

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

核心变更文件,重写设备亲和性逻辑以支持 ZE_AFFINITY_MASK 透传。

# 解析 ZE_AFFINITY_MASK(例如 "2,3")或默认使用 "0,1,..."。
# compute_gpu_id 根据索引从此列表中为每个实例分配设备。
if [[ -n "${ZE_AFFINITY_MASK:-}" ]]; then
  # 以逗号分割用户提供的掩码
  IFS=',' read -r -a AVAILABLE_DEVICES <<< "${ZE_AFFINITY_MASK}"
else
  # 默认生成 0 到 (PREFILLER_TP_SIZE + DECODER_TP_SIZE - 1) 的设备列表
  AVAILABLE_DEVICES=()
  for ((i=0; i<PREFILLER_TP_SIZE + DECODER_TP_SIZE; i++)); do
    AVAILABLE_DEVICES+=("$i")
  done
fi# 从 AVAILABLE_DEVICES 中提取连续的 GPU ID 字符串
compute_gpu_id() {
  local start=$1
  local tp_size=$2
  local gpu_id="${AVAILABLE_DEVICES[$start]}"
  for (( j=1; j<tp_size; j++ )); do
    gpu_id="${gpu_id},${AVAILABLE_DEVICES[$((start + j))]}"
  done
  echo "${gpu_id}"
}
# 在 launch_baseline 和 launch_pd 中使用 compute_gpu_id 动态计算 ZE_AFFINITY_MASK
launch_baseline() {
  local BASELINE_GPU_ID
  BASELINE_GPU_ID=$(compute_gpu_id 0 1) # baseline 始终使用第一个设备
  BASELINE_BASE_CMD="
  ZE_AFFINITY_MASK=$BASELINE_GPU_ID \
  VLLM_WORKER_MULTIPROC_METHOD=spawn \
  VLLM_ENABLE_V1_MULTIPROCESSING=1 vllm serve $MODEL_NAME \
      --host ${BASELINE_HOST} \
      --port ${BASELINE_PORT} \
      --max-model-len ${MAX_MODEL_LEN}\
      --seed 42 \
      -tp 1 \
      --block-size ${BLOCK_SIZE} \
      --gpu-memory-utilization ${GPU_MEMORY_UTILIZATION} \
      --dtype float16 \
      --enforce-eager"
  echo ${BASELINE_BASE_CMD} 
  bash -c "${BASELINE_BASE_CMD}" &
  sleep 10
  wait_for_server ${BASELINE_HOST} ${BASELINE_PORT}
}
​
launch_pd() {
  local PREFILL_GPU_ID
  PREFILL_GPU_ID=$(compute_gpu_id 0 "${PREFILLER_TP_SIZE}")
  local DECODE_GPU_ID
  DECODE_GPU_ID=$(compute_gpu_id "${PREFILLER_TP_SIZE}" "${DECODER_TP_SIZE}")
  # ... 在命令中使用 $PREFILL_GPU_ID 和 $DECODE_GPU_ID
}

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

低风险。变更仅限于测试脚本和 CI 配置,不涉及核心代码。但需要确保新 job 的依赖文件和资源标签正确,避免 CI 调度失败。

影响范围限于 XPU CI 测试。测试的隔离使得 disagg accuracy 测试不再绑定于 V1 常规测试,便于独立调试和资源分配。

CI 配置变更 仅测试脚本改动

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论