[diffusion] Keep Cosmos3 Nano resident on high-memory GPUs (#36000)

This commit is contained in:
Xiaoyu Zhang
2026-08-24 08:51:58 +08:00
committed by GitHub
parent 447048dba2
commit b2eb0fa51e
3 changed files with 68 additions and 0 deletions
@@ -62,6 +62,12 @@ sglang serve \
--num-gpus 1
```
With `--performance-mode auto`, a Cosmos3 Nano checkpoint keeps its DiT and
VAE resident when every selected GPU has at least 120 GiB available at
startup. Below that threshold, auto mode retains the conservative DiT
component-offload policy. This high-memory override is limited to Nano;
Cosmos3 Super checkpoints keep their existing multi-GPU placement defaults.
For `Cosmos3-Super`, split the model across multiple GPUs:
```bash Command
@@ -19,6 +19,9 @@ from sglang.multimodal_gen.configs.pipeline_configs.base import (
ModelTaskType,
PipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.model_deployment_config import (
ModelDeploymentConfig,
)
COSMOS3_EDGE_BACKBONE_TYPE = "cosmos3_edge_nemotron_dense"
@@ -165,3 +168,12 @@ class Cosmos3Config(PipelineConfig):
# and action-capable checkpoints. The loaded transformer validates that
# an action head is actually present when an action request is submitted.
return True
def get_model_deployment_config(self) -> ModelDeploymentConfig:
if "cosmos3-nano" not in self.model_path.lower():
return ModelDeploymentConfig()
return ModelDeploymentConfig(
keep_resident_min_available_gb=120,
keep_resident_components=("dit", "vae"),
)
@@ -16,6 +16,7 @@ from sglang.multimodal_gen.configs.pipeline_configs.base import (
ModelTaskType,
PipelineConfig,
)
from sglang.multimodal_gen.configs.pipeline_configs.cosmos3 import Cosmos3Config
from sglang.multimodal_gen.configs.pipeline_configs.hunyuan import FastHunyuanConfig
from sglang.multimodal_gen.configs.pipeline_configs.lingbot_world import (
LingBotWorldCausalDMDConfig,
@@ -1383,6 +1384,9 @@ class TestOffloadDefaults(unittest.TestCase):
def test_pipeline_configs_declare_auto_tune_hints(self):
qwen_deployment = QwenImagePipelineConfig().get_model_deployment_config()
cosmos3_deployment = Cosmos3Config(
model_path="nvidia/Cosmos3-Nano"
).get_model_deployment_config()
wan_deployment = WanT2V480PConfig().get_model_deployment_config()
mova_deployment = MOVAPipelineConfig().get_model_deployment_config()
zimage_deployment = ZImagePipelineConfig().get_model_deployment_config()
@@ -1394,6 +1398,9 @@ class TestOffloadDefaults(unittest.TestCase):
self.assertIsNone(qwen_deployment.fsdp_auto_min_available_memory_gb)
self.assertEqual(qwen_deployment.dit_layerwise_offload_modes, ())
self.assertEqual(cosmos3_deployment.keep_resident_min_available_gb, 120)
self.assertEqual(cosmos3_deployment.keep_resident_components, ("dit", "vae"))
self.assertIsNone(wan_deployment.fsdp_auto_min_available_memory_gb)
self.assertEqual(wan_deployment.dit_layerwise_offload_modes, ("memory",))
self.assertEqual(wan_deployment.keep_resident_min_available_gb, 60)
@@ -1842,6 +1849,49 @@ class TestOffloadDefaults(unittest.TestCase):
["text_encoder", "image_encoder"],
)
def test_auto_cosmos3_keeps_dit_resident_on_high_memory_gpu(self):
args = self._from_dict_with_pipeline_config(
Cosmos3Config(model_path="nvidia/Cosmos3-Nano"),
available_memory_gb=139,
kwargs={
"model_path": "nvidia/Cosmos3-Nano",
"performance_mode": "auto",
},
)
self.assertFalse(args.dit_cpu_offload)
self.assertFalse(args.vae_cpu_offload)
self.assertEqual(
args.layerwise_offload_components,
["text_encoder", "image_encoder"],
)
def test_auto_cosmos3_offloads_dit_below_resident_threshold(self):
args = self._from_dict_with_pipeline_config(
Cosmos3Config(model_path="nvidia/Cosmos3-Nano"),
available_memory_gb=100,
kwargs={
"model_path": "nvidia/Cosmos3-Nano",
"performance_mode": "auto",
},
)
self.assertTrue(args.dit_cpu_offload)
self.assertFalse(args.vae_cpu_offload)
def test_auto_cosmos3_super_keeps_default_offload_policy(self):
args = self._from_dict_with_pipeline_config(
Cosmos3Config(model_path="nvidia/Cosmos3-Super"),
available_memory_gb=139,
kwargs={
"model_path": "nvidia/Cosmos3-Super",
"performance_mode": "auto",
},
)
self.assertTrue(args.dit_cpu_offload)
self.assertFalse(args.vae_cpu_offload)
def test_memory_sana_wm_layerwise_offload_adds_dit(self):
args = self._from_dict_with_pipeline_config(
SanaWMPipelineConfig(),