执行摘要
- 一句话:为AMD CI注册5个服务端1-GPU测试
- 推荐动作:值得合并。这是一次规范的CI测试注册实践:明确筛选条件、逐个验证、缩小范围。对于关注跨平台CI基础设施的读者,可以学习如何安全地将NVIDIA测试迁移到AMD平台。
功能与动机
Register 5 server-style 1-GPU PR-CI tests on AMD's stage-b-test-1-gpu-small-amd suite. All 5 tests are already running on NVIDIA per-commit CI; they use only Triton attention / CPU torch / mocks / default small models — none of FA3, FlashInfer, ModelOpt, Marlin, EAGLE, GDN/KDA kernels, or NSA-FP8 paths that already have AMD exclusions.
实现拆解
-
测试筛选:从12个候选测试中筛选出5个可以在AMD上安全运行的测试。这些测试仅依赖Triton attention、CPU torch、mock对象或默认小模型,不涉及FA3、FlashInfer、ModelOpt等已知AMD不兼容的路径。
-
添加AMD CI注册:在5个测试文件(test_parallel_state.py、test_input_embeds_chunked.py、test_http2_server.py、test_embed_overrides.py、test_radix_cache_hit.py)中,导入 register_amd_ci,并在已有 register_cuda_ci 调用之后添加对应的 register_amd_ci(est_time=..., suite="stage-b-test-1-gpu-small-amd")。具体改动模式:修改import行和新增一行注册调用。
-
验证:在AMD MI300上运行CI并确认5个测试全部PASS(CI run 25480011932)。同时确认未对其他CI产生负面影响。
-
移除不可用的候选:在提交历史中,最初有12个测试被注册,但后续移除了6个因ROCm不兼容而失败的测试,最终只保留5个。
关键文件:
test/registered/distributed/test_parallel_state.py(模块 并行状态;类别 test;类型 test-coverage;符号 register_amd_ci, register_cuda_ci): 注册分布式并行状态测试到AMD CI,该测试使用纯mock验证组构建逻辑,无GPU需求。
test/registered/input_embedding/test_input_embeds_chunked.py(模块 输入嵌入;类别 test;类型 test-coverage): 注册分块输入嵌入回归测试到AMD CI,测试 chunked prefill 和 retraction 形状不匹配bug。
test/registered/openai_server/basic/test_http2_server.py(模块 HTTP2服务器;类别 test;类型 test-coverage): 注册HTTP/2服务器测试到AMD CI,验证Granian服务器启动和健康检查/模型信息/完成接口。
test/registered/prefill_only/test_embed_overrides.py(模块 嵌入覆盖;类别 test;类型 test-coverage): 注册 token 嵌入覆盖单元测试到AMD CI,测试 PositionalEmbeds、convert_embeds_to_tensors 等逻辑。
test/registered/radix_cache/test_radix_cache_hit.py(模块 Radix缓存;类别 test;类型 test-coverage): 注册 Radix 缓存命中测试到AMD CI,验证多轮 cache hit 场景。
关键符号:未识别
关键源码片段
test/registered/distributed/test_parallel_state.py
注册分布式并行状态测试到AMD CI,该测试使用纯mock验证组构建逻辑,无GPU需求。
"""
Tests for distributed parallel state initialization with mocked backend.
"""
from unittest.mock import Mock, patch
import pytest
# 同时导入 AMD 和 NVIDIA 的 CI 注册函数
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
# 注册到 NVIDIA CI(已存在)
register_cuda_ci(est_time=8, suite="stage-b-test-1-gpu-small")
# 注册到 AMD CI(新增行)
register_amd_ci(est_time=8, suite="stage-b-test-1-gpu-small-amd")
parallel_state = pytest.importorskip("sglang.srt.distributed.parallel_state")
评论区精华
由于这是纯测试注册变更,review评论极少,只有amd-bot自动回复CI状态和gemini-code-assist的配额提示。但提交历史揭示了重要设计决策:初始从12个测试开始,作者在AMD CI上验证后删除了6个有ROCm兼容性问题的测试,最终只保留5个确认为安全的测试。这一决策体现了对AMD平台兼容性的谨慎态度,确保不会引入假阳性失败。
风险与影响
- 风险:风险极低:仅修改测试注册文件,不涉及任何生产代码。所有测试已在NVIDIA CI上稳定运行,且只使用CPU/mock/默认小模型,不依赖AMD不兼容的GPU kernel。主要风险是AMD CI环境本身的不稳定性(PR body提及已有pre-existing failures),但与本PR无关。
- 影响:对用户无直接影响。对系统的影响是扩大了AMD PR CI的测试覆盖,确保AMD MI300等平台的基本服务器功能(健康检查、模型信息、完成接口、Radix缓存命中、分块输入嵌入等)在CI中得到验证。对团队来说,减少了AMD平台回归漏测的风险,并统一了NVIDIA和AMD的测试标准。
- 风险标记:仅测试文件变更, 依赖AMD CI环境稳定, 无生产代码改动
关联脉络
- PR #24569 [AMD] Register 8 unit tests for AMD PR CI: 首批1-GPU测试注册,本PR是第二批服务端测试注册。
参与讨论