Prhub

#37616 [ROCm][CI] Fix flaky Cohere/OpenAI embedding parity test

vllm-project/vllm · 作者 AndreasKaratzas · 合并时间 2026-03-25 18:55

分析状态 已生成
文件变更 4提交数 4 · 评论 14
代码增减 +8 / -4
rocm test bugfix ci

执行摘要

为 ROCm 平台添加 ROCM_EXTRA_ARGS 到两个测试文件并早期验证 pooling params,修复 flaky 的嵌入测试。

修复 ROCm 平台上的 flaky 测试,特别是在 'mi325_1: Entrypoints Integration (Pooling)' 中失败。PR body 中引用 buildkite 链接显示失败,并提及相关 issue #33123 和 PR #34839,以解决批量不变性问题。

建议关注测试设计的权衡,尤其是 ROCM_EXTRA_ARGS 的使用是否应更明确标注或跳过相关测试。同时,异常处理更改值得了解,可参考相关 issue 以跟踪批不变性问题进展。

讨论亮点

讨论主要集中在两个核心点:1. gemini-code-assist[bot] 担忧ROCM_EXTRA_ARGS 中的 --max-num-seqs 1 会禁用批处理,可能掩盖批不变性问题,建议明确跳过相关测试。作者回应已有 issue #27433 跟踪,但当前测试组焦点不在批处理机制,认为这适合上下文。2. DarkLight1337 和 noooop 的疑问:为什么需要在 serving.py 中添加验证?作者解释是为了防止异常传播导致 ASGI app 崩溃,特别是时序问题在 ROCm 上更明显。这揭示了潜在的竞争条件,但具体根因未解决。

实现拆解

实现分为三个关键部分:1. 测试文件修改:在 test_cohere_openai_parity.pytest_online_dimensions.pyserver() 函数中添加 ROCM_EXTRA_ARGS(包含 --max-num-seqs 1 等参数),以在 ROCm 上禁用批处理。2. 服务层优化:在 vllm/entrypoints/pooling/base/serving.py_prepare_generators 方法中添加 pooling_params.verify(self.model_config),早期验证参数避免后续异步异常传播导致崩溃。3. 调试增强:在 vllm/entrypoints/utils.pycreate_error_response 函数中添加调试日志,辅助错误处理。

文件 模块 状态 重要度
tests/entrypoints/pooling/embed/test_cohere_openai_parity.py tests modified 4.0
vllm/entrypoints/pooling/base/serving.py entrypoints/pooling modified 5.0
vllm/entrypoints/utils.py entrypoints modified 3.0
tests/entrypoints/pooling/embed/test_online_dimensions.py tests modified 4.0

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

关键符号

_prepare_generators create_error_response server

评论区精华

ROCM_EXTRA_ARGS 对批处理测试的影响 测试

gemini-code-assist[bot] 指出添加 --max-num-seqs 1 会禁用批处理,可能掩盖批不变性问题,建议明确跳过 test_batch_parity。作者回应有 issue #27433 跟踪,但测试组焦点不在批处理机制。

结论:作者认为这适合当前测试上下文,但批不变性问题仍有待解决。 · 已解决

为什么需要在 serving.py 中添加早期验证 设计

DarkLight1337 询问为什么添加 try-except 块来验证 pooling params,作者解释是为了防止异常传播导致 ASGI app 崩溃,特别是在时序问题下。

结论:已被采纳以修复特定错误,确保错误处理正确。 · 已解决

测试在不同平台上的时序差异 正确性

noooop 质疑测试在 NVIDIA GPU 上是否通过,作者解释是时序问题,更易在 ROCm 上触发,揭示潜在的竞争条件。

结论:没有明确解决方案,但提示了异步环境下的脆弱性。 · unresolved

风险与影响

主要风险在于测试修改:ROCM_EXTRA_ARGS 的添加可能导致 test_batch_parity 测试不再有效验证批处理,从而隐藏真正的批不变性问题(如 issue #27433)。此外,早期验证 pooling params 改变了错误处理流程,但已被确认修复特定崩溃问题,无重大兼容性或性能风险。调试日志添加无副作用。

对用户无直接影响,因为是内部测试修复。对系统影响:提高了 ROCm 平台的 CI 测试稳定性,减少了 flaky 失败。对团队影响:维护者需要关注批处理测试的覆盖完整性,以及异常处理逻辑在异步环境下的可靠性。

批处理测试覆盖不足 潜在竞争条件

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

该 PR 通过在 ROCm 平台的测试中添加 ROCM_EXTRA_ARGS 禁用批处理,并在服务层早期验证 pooling params,修复了 flaky 的 Cohere/OpenAI 嵌入测试。虽然稳定了 CI,但可能掩盖批不变性问题,建议关注测试设计权衡。

功能与动机

修复在 ROCm 平台上因批量不变性导致的 flaky 测试,特别是在 mi325_1: Entrypoints Integration (Pooling) 中失败。PR body 引用 buildkite 链接显示失败,并提及 issue #33123 和 PR #34839,目标是提高 CI 可靠性。

实现拆解

  • 测试文件修改:在 test_cohere_openai_parity.pytest_online_dimensions.pyserver() 函数中,添加 ROCM_EXTRA_ARGS(包含 --max-num-seqs 1 等参数)以禁用批处理。
  • 服务层优化:在 vllm/entrypoints/pooling/base/serving.py_prepare_generators 方法中插入 pooling_params.verify(self.model_config),提前验证参数,防止异常传播导致 ASGI app 崩溃。
  • 调试增强:在 vllm/entrypoints/utils.pycreate_error_response 中添加调试日志,辅助错误诊断。

评论区精华

  • gemini-code-assist[bot] 指出:> "This change adds ROCM_EXTRA_ARGS, which includes --max-num-seqs 1. This effectively disables batching... it could mask an underlying batch invariance issue." 作者回应有 issue 跟踪,但测试焦点不在批处理。
  • DarkLight1337 询问:> "Why is this needed? We now use app level error handlers..." 作者解释是为了防止异常传播,特别是在 ROCm 上的时序问题。
  • noooop 质疑:测试在 NVIDIA GPU 上是否通过?作者解释是时序差异,揭示了潜在的竞争条件。

风险与影响

  • 风险ROCM_EXTRA_ARGS 的使用可能让 test_batch_parity 失效,掩盖批不变性问题;早期验证 pooling params 虽然修复了崩溃,但可能改变错误处理行为。
  • 影响:对用户无直接影响,但提高了 ROCm CI 的稳定性;团队需注意批处理测试的真实性和异步错误处理的健壮性。

关联脉络

  • 关联 PR #34839,同为稳定 Cohere 测试的 follow-up,显示批量不变性问题的持续修复。
  • 近期历史 PR 如 #37483 和 #37640 也涉及 ROCm 平台测试修复,表明 vLLM 仓库在优化 AMD 硬件支持上的趋势。
  • issue #27433 被提及为批不变性跟踪点,未来可能需进一步解决。

参与讨论