From 6e5b753612079c9a034eb4203935f6299e3988d5 Mon Sep 17 00:00:00 2001 From: Zhou Taichang Date: Wed, 11 Nov 2026 15:43:06 +0900 Subject: [PATCH 1/2] fix(knowledge): correct Cosmos3 PP cache failure and CI evidence --- .../repos/vllm-omni/models/cosmos3/_index.md | 4 +- .../repos/vllm-omni/models/cosmos3/rules.md | 6 +- test/test_cosmos3_knowledge.py | 61 +++++++++++++++++++ 3 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 test/test_cosmos3_knowledge.py diff --git a/knowledge/repos/vllm-omni/models/cosmos3/_index.md b/knowledge/repos/vllm-omni/models/cosmos3/_index.md index 4b7df8e1..831b76ca 100644 --- a/knowledge/repos/vllm-omni/models/cosmos3/_index.md +++ b/knowledge/repos/vllm-omni/models/cosmos3/_index.md @@ -1,7 +1,7 @@ --- title: "Cosmos3" created: 2026-07-20 -updated: 2026-10-06 +updated: 2026-11-11 type: index tags: [vllm-omni, models, diffusion] sources: ["PR #4657", "PR #5001", "PR #5634", "PR #6920", docs/features/session_state_manager.md, recipes/cosmos3/Cosmos3-Nano.md, vllm_omni/diffusion/models/cosmos3/, vllm_omni/diffusion/models/cosmos3/pipeline_cosmos3.py, vllm_omni/experimental/world_models/adapters/state_cosmos3_adapter.py, vllm_omni/platforms/rocm/platform.py, tests/diffusion/models/cosmos3/test_cosmos3_pipeline.py] @@ -55,7 +55,7 @@ request 的 denoise 生命周期内使用,不提供跨请求记忆或并发安 ## 什么时候查这里 -- 审查 Cosmos3 Edge/Distilled scheduler、RNG、guidance、offload、distributed-VAE multi-chunk transfer 或 capability claim。 +- 审查 Cosmos3 Edge/Distilled scheduler、RNG、guidance、offload、distributed-VAE multi-chunk transfer、PP 权重归属与 stale-cache 缺重误报,或 capability claim。 - 同一问题影响多个 diffusion 模型时返回 [Diffusion rules](../../components/diffusion/rules.md)。 sampling state FP32 与 transformer dtype boundary:COSMOS-8a;沿本目录 rules 审查入口核对。 diff --git a/knowledge/repos/vllm-omni/models/cosmos3/rules.md b/knowledge/repos/vllm-omni/models/cosmos3/rules.md index fcf18d5b..77c08e59 100644 --- a/knowledge/repos/vllm-omni/models/cosmos3/rules.md +++ b/knowledge/repos/vllm-omni/models/cosmos3/rules.md @@ -1,7 +1,7 @@ --- title: "Cosmos3 规则" created: 2026-07-20 -updated: 2026-10-23 +updated: 2026-11-11 type: rule tags: [vllm-omni, models, diffusion] sources: ["PR #4657", "PR #5001", "PR #5634", "PR #6049", docs/features/session_state_manager.md, recipes/cosmos3/Cosmos3-Nano.md, vllm_omni/diffusion/models/cosmos3/, vllm_omni/model_extras/cosmos3.py, vllm_omni/model_extras/registry.py, vllm_omni/experimental/world_models/adapters/state_cosmos3_adapter.py, vllm_omni/platforms/rocm/platform.py, tests/diffusion/models/cosmos3/test_session_memory_equivalence.py, tests/diffusion/models/cosmos3/test_cosmos3_pipeline.py, "PR #6107", "PR #5614", "PR #6325", "PR #6913", "PR #6920", "PR #7427", "PR #7971", "PR #7592", "PR #5712", "PR #9304"] @@ -195,8 +195,8 @@ confidence: high ## VLLM-OMNI-PR9304-EDGE-PP-OWNERSHIP — Edge 权重校验必须从活模块读取 PP 归属 - 触发:修改 `vllm_omni/diffusion/models/cosmos3/transformer_cosmos3_edge.py` 的 `validate_loaded_weights` 或 `_weight_marker_is_pp_missing`,或在仓库模型代码中引入上游 `is_pp_missing_parameter` 的权重归属判定。 -- 强制:marker 是否被跳过必须由本 rank 的活模块决定:`language_model.*` 直接 `isinstance(self.language_model, PPMissingLayer)`;`gen_layers.{i}.*` 检查对应 GEN slot 模块本身(UND backbone 是单一模块、只在第一个 PP stage;每个 GEN slot 是独立模块);其余 marker 不跳过,本 rank 拥有的 marker 缺失仍必须报错。机制事实:上游 `is_pp_missing_parameter` 把缺失层名缓存在按 `id(model)` 键控且从不清理的 `_model_to_pp_missing_layer_names`,对象 id 复用会让陈旧空缓存把活 `PPMissingLayer` 报为已加载(AMD CI build 14498 即因此漏报 `gen_layers.1`)。上游 vLLM 保持不动,也不得 vendoring 该 helper。 +- 强制:marker 是否被跳过必须由本 rank 的活模块决定:`language_model.*` 直接 `isinstance(self.language_model, PPMissingLayer)`;`gen_layers.{i}.*` 检查对应 GEN slot 模块本身(UND backbone 是单一模块、只在第一个 PP stage;每个 GEN slot 是独立模块);其余 marker 不跳过,本 rank 拥有的 marker 缺失仍必须报错。机制事实:上游 `is_pp_missing_parameter` 把缺失层名缓存在按 `id(model)` 键控且从不清理的 `_model_to_pp_missing_layer_names`,对象 id 复用会让陈旧空缓存把活 `PPMissingLayer` 误判为本 rank 拥有的实际层,继而对不属于本 rank 的 `gen_layers.1` marker 误报缺少必需权重;[上游 base-fail/head-pass 证据](https://github.com/vllm-project/vllm-omni/pull/9304#issuecomment-6369776059) 给出了该 `ValueError`。上游 vLLM 保持不动,也不得 vendoring 该 helper。 - 禁止:以该 id 键控缓存的返回值决定 marker 归属;在测试中真实写入该进程级全局缓存来构造失败(同一失败会泄漏进后续测试);借修复放宽本 rank 拥有 layer 的必需 marker。 -- 验收:测试以 `monkeypatch.setattr(model_utils, "get_pp_missing_layer_names", lambda _model: [])` 模拟陈旧缓存查找,断言 PP-missing marker 被跳过、`relu2` 等必需 marker 缺失时 `validate_loaded_weights` 仍 fail,且未污染全局缓存;PR 的通过证据是本地 CPU 运行(需预载 cosmos3 包命名空间绕过 API server import),AMD CI 未复跑,不得据此声称真实多 stage PP parity。^[PR #9304] +- 验收:测试以 `monkeypatch.setattr(model_utils, "get_pp_missing_layer_names", lambda _model: [])` 模拟陈旧缓存查找,断言 PP-missing marker 被跳过、`relu2` 等必需 marker 缺失时 `validate_loaded_weights` 仍 fail,且未污染全局缓存;验收必须核对当前 head 的 CI 和后续讨论,不能把较早的本地 CPU 证据(需预载 cosmos3 包命名空间绕过 API server import)当作最终状态。[后续维护者报告](https://github.com/vllm-project/vllm-omni/pull/9304#issuecomment-6371457488) 记录 AMD build #14506 的两个目标测试所在 shard 通过,整体仍因无关 Wan 测试失败;这是维护者报告的 CI 证据,不能据此声称真实多 stage PP parity。^[PR #9304] diff --git a/test/test_cosmos3_knowledge.py b/test/test_cosmos3_knowledge.py new file mode 100644 index 00000000..cd68c5fe --- /dev/null +++ b/test/test_cosmos3_knowledge.py @@ -0,0 +1,61 @@ +"""Source-grounded regressions for the Cosmos3 PR9304 knowledge correction. + +These are content guards, not an execution of Cosmos3 or AMD CI. Evidence: +https://github.com/vllm-project/vllm-omni/pull/9304#issuecomment-6369776059 +https://github.com/vllm-project/vllm-omni/pull/9304#issuecomment-6371457488 +""" + +from pathlib import Path +import unittest + + +ROOT = Path(__file__).resolve().parents[1] +OWNER = ROOT / "knowledge/repos/vllm-omni/models/cosmos3" +RULE_ID = "VLLM-OMNI-PR9304-EDGE-PP-OWNERSHIP" + + +class Cosmos3KnowledgeEvidenceTests(unittest.TestCase): + @classmethod + def setUpClass(cls): + page = (OWNER / "rules.md").read_text(encoding="utf-8") + heading = f"## {RULE_ID} — " + if page.count(heading) != 1: + raise AssertionError("Expected exactly one owner-scoped PR9304 rule") + cls.rule = page.split(heading, 1)[1].split("\n## ", 1)[0] + cls.index = (OWNER / "_index.md").read_text(encoding="utf-8") + + def test_stale_cache_causes_false_missing_weights_not_missed_error(self): + self.assertIn("误报缺少必需权重", self.rule) + self.assertIn("不属于本 rank", self.rule) + self.assertNotIn("报为已加载", self.rule) + self.assertNotIn("因此漏报", self.rule) + + def test_later_amd_evidence_keeps_attribution_and_limits(self): + self.assertIn("维护者报告", self.rule) + self.assertIn("AMD build #14506", self.rule) + self.assertIn("目标测试所在 shard 通过", self.rule) + self.assertIn("整体仍因无关 Wan 测试失败", self.rule) + self.assertIn("issuecomment-6371457488", self.rule) + self.assertIn("不能据此声称真实多 stage PP parity", self.rule) + self.assertNotIn("AMD CI 未复跑", self.rule) + + def test_ownership_and_isolated_regression_contract_are_preserved(self): + for contract in ( + "isinstance(self.language_model, PPMissingLayer)", + "GEN slot 模块本身", + "本 rank 拥有的 marker 缺失仍必须报错", + 'monkeypatch.setattr(model_utils, "get_pp_missing_layer_names", lambda _model: [])', + "且未污染全局缓存", + "不得 vendoring", + "", + ): + with self.subTest(contract=contract): + self.assertIn(contract, self.rule) + + def test_owner_index_routes_pp_ownership_to_existing_rules_page(self): + self.assertIn("PP 权重归属", self.index) + self.assertEqual(self.index.count("(rules.md#direct-代码快速入口)"), 1) + + +if __name__ == "__main__": + unittest.main() From 99d17a277810334d9e9999684ad4794f6a81b898 Mon Sep 17 00:00:00 2001 From: Zhou Taichang Date: Wed, 11 Nov 2026 15:50:26 +0900 Subject: [PATCH 2/2] docs(knowledge): keep Cosmos3 correction Markdown-only --- test/test_cosmos3_knowledge.py | 61 ---------------------------------- 1 file changed, 61 deletions(-) delete mode 100644 test/test_cosmos3_knowledge.py diff --git a/test/test_cosmos3_knowledge.py b/test/test_cosmos3_knowledge.py deleted file mode 100644 index cd68c5fe..00000000 --- a/test/test_cosmos3_knowledge.py +++ /dev/null @@ -1,61 +0,0 @@ -"""Source-grounded regressions for the Cosmos3 PR9304 knowledge correction. - -These are content guards, not an execution of Cosmos3 or AMD CI. Evidence: -https://github.com/vllm-project/vllm-omni/pull/9304#issuecomment-6369776059 -https://github.com/vllm-project/vllm-omni/pull/9304#issuecomment-6371457488 -""" - -from pathlib import Path -import unittest - - -ROOT = Path(__file__).resolve().parents[1] -OWNER = ROOT / "knowledge/repos/vllm-omni/models/cosmos3" -RULE_ID = "VLLM-OMNI-PR9304-EDGE-PP-OWNERSHIP" - - -class Cosmos3KnowledgeEvidenceTests(unittest.TestCase): - @classmethod - def setUpClass(cls): - page = (OWNER / "rules.md").read_text(encoding="utf-8") - heading = f"## {RULE_ID} — " - if page.count(heading) != 1: - raise AssertionError("Expected exactly one owner-scoped PR9304 rule") - cls.rule = page.split(heading, 1)[1].split("\n## ", 1)[0] - cls.index = (OWNER / "_index.md").read_text(encoding="utf-8") - - def test_stale_cache_causes_false_missing_weights_not_missed_error(self): - self.assertIn("误报缺少必需权重", self.rule) - self.assertIn("不属于本 rank", self.rule) - self.assertNotIn("报为已加载", self.rule) - self.assertNotIn("因此漏报", self.rule) - - def test_later_amd_evidence_keeps_attribution_and_limits(self): - self.assertIn("维护者报告", self.rule) - self.assertIn("AMD build #14506", self.rule) - self.assertIn("目标测试所在 shard 通过", self.rule) - self.assertIn("整体仍因无关 Wan 测试失败", self.rule) - self.assertIn("issuecomment-6371457488", self.rule) - self.assertIn("不能据此声称真实多 stage PP parity", self.rule) - self.assertNotIn("AMD CI 未复跑", self.rule) - - def test_ownership_and_isolated_regression_contract_are_preserved(self): - for contract in ( - "isinstance(self.language_model, PPMissingLayer)", - "GEN slot 模块本身", - "本 rank 拥有的 marker 缺失仍必须报错", - 'monkeypatch.setattr(model_utils, "get_pp_missing_layer_names", lambda _model: [])', - "且未污染全局缓存", - "不得 vendoring", - "", - ): - with self.subTest(contract=contract): - self.assertIn(contract, self.rule) - - def test_owner_index_routes_pp_ownership_to_existing_rules_page(self): - self.assertIn("PP 权重归属", self.index) - self.assertEqual(self.index.count("(rules.md#direct-代码快速入口)"), 1) - - -if __name__ == "__main__": - unittest.main()