Prhub

#37142 [Fix] Fix transformer loader fallback test fixture

原始 PR 作者 YAMY1234 合并时间 2026-08-30 23:28 文件变更 1 提交数 1 评论 2 代码增减 +1 / -0

执行摘要

补全 transformer 回退测试 fixture 缺失的 mock

PR body 明确说明动机:'Add the missing should_direct_gpu_weight_load_component mock to the transformer-loader fallback fixture. Restore the unit tests after #37049 introduced the fail-closed component helper.' 即 #37049 引入了 fail-closed 的组件 helper(should_direct_gpu_weight_load_component),但 transformer-loader fallback 单测的 fixture 没有同步该属性,测试已损坏;本 PR 补上 mock 以恢复这些单测。

值得快速浏览(约 1 分钟),不必精读。它展示了上游引入 fail-closed 组件助手后,测试 fixture 需要同步补属性的模式;对维护 diffusion 加载链路测试的工程师有参考价值。

讨论亮点

本 PR 没有 review 评论。Issue 评论区中的有效信息是作者发起 '/rerun-test python/sglang/multimodal_gen/test/unit/test_transformer_loader_fallback.py',github-actions bot 返回 1-gpu-h100 网格上该测试文件通过(workflow run #33319449837),确认 fixture 修复有效,但没有展开设计讨论。

实现拆解

  1. 定位损坏点:python/sglang/multimodal_gen/test/unit/test_transformer_loader_fallback.pyTestTransformerLoaderFallbackAdmission._server_args 构造的 SimpleNamespace 替身没有包含 should_direct_gpu_weight_load_component。由于 #37049 让加载逻辑以 fail-closed 方式访问该属性,fixture 缺失该键会造成属性访问失败或路径判定与真实 ServerArgs 不一致。
  2. 修补 fixture:在 values 字典中新增 should_direct_gpu_weight_load_componentmock.Mock(return_value=False),固定默认不直接走 GPU 权重加载;values.update(overrides) 机制保持不变,仍允许单个用例覆盖该值。
  3. 验证:作者通过 /rerun-test python/sglang/multimodal_gen/test/unit/test_transformer_loader_fallback.py 触发 CI,1 个用例在 1-gpu-h100 网格上通过;无产品代码、配置文件或文档改动。
  4. 影响:恢复被上游重构破坏的单测,未改变任何运行时行为。
文件 模块 状态 重要度
python/sglang/multimodal_gen/test/unit/test_transformer_loader_fallback.py 回退加载 modified 3.28

关键符号

_server_args

关键源码片段

python/sglang/multimodal_gen/test/unit/test_transformer_loader_fallback.py test-coverage

唯一变更文件。为 TestTransformerLoaderFallbackAdmission._server_args fixture 补上 should_direct_gpu_weight_load_component 的 mock,修复 #37049 引入 fail-closed helper 后造成的单测失败。

class TestTransformerLoaderFallbackAdmission(unittest.TestCase):
    @staticmethod
    def _server_args(*, fsdp_requested=False, **overrides):
        # 构造 ServerArgs 的轻量替身。这里特意用 mock.Mock 兜住 ServerArgs
        # 上的辅助方法,让单测不依赖真实 arg_groups 配置。
        values = {
            "component_precisions": {},
            "component_quantizations": {},
            "component_weights_paths": {},
            "component_quantization_ignored_layers": {},
            "transformer_weights_path": None,
            "nunchaku_config": None,
            "quantization": None,
            "pipeline_config": SimpleNamespace(native_only_components=()),
            "tp_size": 1,
            "sp_degree": 1,
            "ulysses_degree": 1,
            "ring_degree": 1,
            "kv_gather_degree": 1,
            "enable_cfg_parallel": False,
            "dp_size": 1,
            "use_fsdp_inference": False,
            "resolve_component_attention_backend": mock.Mock(return_value=(None, None)),
            # 上游 #37049 引入 fail-closed 的 should_direct_gpu_weight_load_component
            # 助手后,fixture 缺该键会让 fallback 判定读取不存在的属性而失败;
            # 这里固定返回 False,表示默认不直接走 GPU 权重加载路径。
            "should_direct_gpu_weight_load_component": mock.Mock(return_value=False),
            "should_use_fsdp_for_component": mock.Mock(return_value=fsdp_requested),
        }
        values.update(overrides)
        return SimpleNamespace(**values)

评论区精华

修复后重跑测试验证 测试

作者在 Issue 评论区发起 /rerun-test python/sglang/multimodal_gen/test/unit/test_transformer_loader_fallback.py,github-actions bot 返回 1-gpu-h100 网格上该测试文件通过。

结论:fixture 补全后测试通过,未引发进一步讨论。 · 已解决

风险与影响

改动限于测试 fixture,不涉及产品代码,总体风险极低。潜在脆弱点:mock 固定返回 False 可能不随真实 ServerArgs 默认值演化;若 #37049 的 fail-closed 语义后续调整(例如默认改为 True),该 fixture 会再次与实现脱节,不过 overrides 覆盖入口仍在,影响可控。另外作者说明本地无法运行 targeted 测试(缺 cloudpickle 依赖),验证依赖上游 CI,存在小验证缺口。

用户与系统:无运行时影响,KV 缓存、调度、加载逻辑均未改动。团队:恢复 diffusion 模块 transformer loader fallback 单测的 CI 稳定性,避免 fixture 缺失导致的假失败,为后续 loader 相关改动提供基线。影响面:仅 1 个测试文件 1 行,集中在 multimodal_gen 测试套件。

测试 fixture 与上游契约耦合 验证依赖 CI(本地缺 cloudpickle)

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论