执行摘要
稳定 ROCm 上 LLM GC 弱引用测试
ROCm 平台下 fixture 清理后 LLM 对象偶尔未被立即 GC,导致 weakref 断言间歇性失败。直接强制循环收集会掩盖测试本意检测的循环引用问题。
值得合并,方案简洁有效。重试条件精确,不会弱化测试的检测能力。
无 review 讨论。
ROCm 平台下 fixture 清理后 LLM 对象偶尔未被立即 GC,导致 weakref 断言间歇性失败。直接强制循环收集会掩盖测试本意检测的循环引用问题。
值得合并,方案简洁有效。重试条件精确,不会弱化测试的检测能力。
无 review 讨论。
在 tests/basic_correctness/test_basic_correctness.py 的 test_vllm_gc_ed 函数上添加 @pytest.mark.flaky 装饰器,仅在 ROCm 条件下对 AssertionError 进行最多 2 次重试,每次间隔 5 秒。
| 文件 | 模块 | 状态 | 重要度 |
|---|---|---|---|
tests/basic_correctness/test_basic_correctness.py |
测试 | modified | 4.01 |
tests/basic_correctness/test_basic_correctness.py
test-coverage
为 `test_vllm_gc_ed` 添加 pytest flaky 重试,仅针对 ROCm 平台的 AssertionError。
# ROCm 可以偶尔在 fixture 清理后保留对象。仅重试该断言;
# 在此处收集循环垃圾会掩盖此测试旨在捕获的循环引用。
@pytest.mark.flaky(
reruns=2,
reruns_delay=5,
only_rerun="AssertionError", # 只对断言错误重试
condition=current_platform.is_rocm(), # 仅 ROCm 平台生效
)
def test_vllm_gc_ed():
"""Verify vllm instance is GC'ed when it is deleted"""
llm = LLM("hmellor/tiny-random-LlamaForCausalLM")
weak_llm = weakref.ref(llm)
del llm
# 如果有任何对 vllm 的循环引用,此断言会失败
assert weak_llm() is None
当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。
风险极低:仅修改测试逻辑,不影响生产代码。重试条件精确限定在 ROCm 平台和断言错误,不会掩盖其他类型的失败。
影响范围仅限于 ROCm CI 中 test_vllm_gc_ed 测试的稳定性,减少因偶发 GC 延迟导致的误报。
当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。
参与讨论