Prhub

#33878 [diffusion] fix output-rank test fixture

原始 PR 作者 mickqian 合并时间 2026-08-07 09:33 文件变更 1 提交数 1 评论 1 代码增减 +1 / -1

执行摘要

修复输出物化测试 fixture 对齐输出 rank 契约

PR body 明确说明:修复 GPUWorker.__new__() 单测 fixture,使其模拟 _materialize_file_path_transport 实际使用的 output-rank 契约;GPUWorker.is_output_rank 是 disaggregated output ownership 引入的属性,而旧 fixture 设置的 rank = 0 与该契约无关,导致测试没有真实触发目标代码路径。

低优先,快速浏览即可。值得留意两点:其一,测试 fixture 必须建模被测代码真实依赖的属性(is_output_rank),而不是形似的 rank;其二,即使一行测试修改,也通过 /tag-and-rerun-ci extra 验证了多规模 CI,说明该仓库对测试维护的严谨态度。

讨论亮点

本 PR 无 reviewer 评审评论,唯一的评论是作者 mickqian 使用 /tag-and-rerun-ci extra 请求 extra 规模 CI。Base 与 Extra 两次 CI 均显示通过,因此没有形成需要记录的设计争论。

实现拆解

  1. 定位变更点:python/sglang/multimodal_gen/test/unit/realtime/test_output_materialization.pytest_file_path_transport_clears_in_memory_outputs 测试。
  2. 核心改动:把 GPUWorker.__new__(GPUWorker) 之后模拟输出 rank 的 worker.rank = 0 替换为 worker.is_output_rank = True,使 fixture 反映代码运行时真实依赖的属性。
  3. 原因分析:_materialize_file_path_transport 内部依据 is_output_rank 决定是否执行文件路径物化与内存清理;旧 fixture 设置 rank 不会改变 is_output_rank 的默认值,无法覆盖目标逻辑。
  4. 验证配套:仅测试文件变更,无配置、依赖或部署改动;作者通过 /tag-and-rerun-ci extra 触发远程 CI,Base 与 Extra 均通过。
文件 模块 状态 重要度
python/sglang/multimodal_gen/test/unit/realtime/test_output_materialization.py 输出物化 modified 3.42

关键符号

test_file_path_transport_clears_in_memory_outputs _materialize_file_path_transport

关键源码片段

python/sglang/multimodal_gen/test/unit/realtime/test_output_materialization.py test-coverage

测试 fixture 修正,使 `GPUWorker.__new__()` 创建的实例通过 `is_output_rank = True` 模拟真实输出 rank 契约,确保 `_materialize_file_path_transport` 测试真正行使目标代码路径。

def test_file_path_transport_clears_in_memory_outputs():
    # GPUWorker 通过 __new__ 绕过 __init__ 构造,需手动配置输出 rank 契约
    worker = GPUWorker.__new__(GPUWorker)
    # _materialize_file_path_transport 实际读取 is_output_rank 属性(disaggregated
    # output ownership 引入)来判断当前 worker 是否拥有输出物化权;旧 fixture 设置
    # rank = 0 与该契约无关,无法真正触发目标分支
    worker.is_output_rank = True
​
    output_batch = OutputBatch(
        output=[object()],
        audio=torch.zeros(1),
        audio_sample_rate=16000,
    )
​
    # 模拟保存输出文件路径的回调
    def save_output_paths(batch):
        batch.output_file_paths = ["/tmp/output.png"]
​
    # 触发文件路径物化传输,随后应清空内存中的 output / audio 引用
    worker._materialize_file_path_transport(output_batch, save_output_paths)
​
    assert output_batch.output_file_paths == ["/tmp/output.png"]
    assert output_batch.output is None
    assert output_batch.audio is None
    assert output_batch.audio_sample_rate is None

评论区精华

请求额外 CI 验证 other

作者 mickqian 在 PR 内评论 `/tag-and-rerun-ci extra`,请求运行 extra 规模 CI。

结论:Base 与 Extra CI 均通过,变更验证完成。 · 已解决

风险与影响

风险极低。变更只涉及单测 fixture 的一行属性赋值,不触碰生产代码。唯一长期风险是测试与 GPUWorker.is_output_rank 语义绑定,若未来该属性行为调整或改名,测试可能再次失真;建议届时在 _materialize_file_path_transport 侧补充对 is_output_rank 校验分支的显式断言。

影响范围仅限 python/sglang/multimodal_gen/test/unit/realtime/test_output_materialization.py 单个测试函数。对用户与线上服务无影响;对团队的意义在于恢复 test_file_path_transport_clears_in_memory_outputs 的有效性,确保 disaggregated output ownership 下文件路径物化与内存清理逻辑有真实回归保护。

test-only 变更 无运行时影响 fixture 契约对齐

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论