Skip to content

Commit 0ffd1a8

Browse files
[Test][RFork] Fix native EPLB loader config test (vllm-project#11361)
### What this PR does / why we need it? This PR fixes the RFork native EPLB loader unit test setup. The test constructed a lightweight `vllm_config` without `parallel_config`, then set `vllm_config.parallel_config.enable_eplb = True`, which failed during test setup with `AttributeError` before exercising the loader fallback path. The change adds a minimal parallel config helper for RFork loader tests, uses it in `_vllm_config()`, and makes EP/PP rank tests use keyword-only parallel settings so the tested dimension is explicit. ### Does this PR introduce _any_ user-facing change? No. This is test-only. ### How was this patch tested? - `python -m py_compile tests\ut\model_loader\rfork\test_rfork_loader.py` - `python -m ruff check tests\ut\model_loader\rfork\test_rfork_loader.py` - `git diff --check -- tests\ut\model_loader\rfork\test_rfork_loader.py` - vLLM version: v0.23.0 - vLLM main: vllm-project/vllm@a30addc Signed-off-by: yangsonglin13 <yangsonglin566@gmail.com>
1 parent b9a4eee commit 0ffd1a8

1 file changed

Lines changed: 30 additions & 12 deletions

File tree

tests/ut/model_loader/rfork/test_rfork_loader.py

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -70,23 +70,39 @@ def test_rfork_seed_timeout_bool_falls_back_to_default(monkeypatch, config_value
7070
assert loader.seed_timeout_sec == 5.0
7171

7272

73-
def _vllm_config(model_config=None, scheduler_config=None):
73+
def _parallel_config(
74+
*,
75+
enable_eplb=False,
76+
enable_expert_parallel=False,
77+
pipeline_parallel_size=1,
78+
is_moe_model=True,
79+
):
80+
return SimpleNamespace(
81+
enable_eplb=enable_eplb,
82+
enable_expert_parallel=enable_expert_parallel,
83+
pipeline_parallel_size=pipeline_parallel_size,
84+
is_moe_model=is_moe_model,
85+
)
86+
87+
88+
def _vllm_config(model_config=None, scheduler_config=None, parallel_config=None):
7489
return SimpleNamespace(
7590
additional_config=None,
7691
device_config=SimpleNamespace(device="cpu"),
7792
model_config=model_config or SimpleNamespace(),
93+
parallel_config=parallel_config or _parallel_config(),
7894
scheduler_config=scheduler_config or SimpleNamespace(),
7995
)
8096

8197

8298
def _parallel_vllm_config(
83-
enable_expert_parallel,
8499
*,
100+
enable_expert_parallel=False,
85101
pipeline_parallel_size=1,
86102
is_moe_model=True,
87103
):
88104
return SimpleNamespace(
89-
parallel_config=SimpleNamespace(
105+
parallel_config=_parallel_config(
90106
enable_expert_parallel=enable_expert_parallel,
91107
pipeline_parallel_size=pipeline_parallel_size,
92108
is_moe_model=is_moe_model,
@@ -103,7 +119,7 @@ def fail_if_ep_group_is_accessed():
103119
fail_if_ep_group_is_accessed,
104120
)
105121

106-
assert _get_ep_rank(_parallel_vllm_config(False)) is None
122+
assert _get_ep_rank(_parallel_vllm_config()) is None
107123

108124

109125
def test_rfork_ep_rank_comes_from_ep_group(monkeypatch):
@@ -112,7 +128,7 @@ def test_rfork_ep_rank_comes_from_ep_group(monkeypatch):
112128
lambda: SimpleNamespace(rank_in_group=7),
113129
)
114130

115-
assert _get_ep_rank(_parallel_vllm_config(True)) == 7
131+
assert _get_ep_rank(_parallel_vllm_config(enable_expert_parallel=True)) == 7
116132

117133

118134
def test_rfork_ep_rank_is_not_added_for_dense_model(monkeypatch):
@@ -124,7 +140,7 @@ def fail_if_ep_group_is_accessed():
124140
fail_if_ep_group_is_accessed,
125141
)
126142

127-
assert _get_ep_rank(_parallel_vllm_config(True, is_moe_model=False)) is None
143+
assert _get_ep_rank(_parallel_vllm_config(enable_expert_parallel=True, is_moe_model=False)) is None
128144

129145

130146
def test_rfork_requires_initialized_ep_group(monkeypatch):
@@ -137,7 +153,7 @@ def raise_uninitialized_ep_group():
137153
)
138154

139155
with pytest.raises(RuntimeError, match="EP group is not initialized"):
140-
_get_ep_rank(_parallel_vllm_config(True))
156+
_get_ep_rank(_parallel_vllm_config(enable_expert_parallel=True))
141157

142158

143159
def test_rfork_pp_rank_is_not_added_when_pipeline_parallelism_is_disabled(monkeypatch):
@@ -149,7 +165,7 @@ def fail_if_pp_group_is_accessed():
149165
fail_if_pp_group_is_accessed,
150166
)
151167

152-
assert _get_pp_rank(_parallel_vllm_config(False)) is None
168+
assert _get_pp_rank(_parallel_vllm_config()) is None
153169

154170

155171
def test_rfork_pp_rank_comes_from_pp_group(monkeypatch):
@@ -158,7 +174,7 @@ def test_rfork_pp_rank_comes_from_pp_group(monkeypatch):
158174
lambda: SimpleNamespace(rank_in_group=3),
159175
)
160176

161-
assert _get_pp_rank(_parallel_vllm_config(False, pipeline_parallel_size=2)) == 3
177+
assert _get_pp_rank(_parallel_vllm_config(pipeline_parallel_size=2)) == 3
162178

163179

164180
def test_rfork_requires_initialized_pp_group(monkeypatch):
@@ -171,7 +187,7 @@ def raise_uninitialized_pp_group():
171187
)
172188

173189
with pytest.raises(RuntimeError, match="PP group is not initialized"):
174-
_get_pp_rank(_parallel_vllm_config(False, pipeline_parallel_size=2))
190+
_get_pp_rank(_parallel_vllm_config(pipeline_parallel_size=2))
175191

176192

177193
def test_rfork_seed_key_preserves_non_ep_format():
@@ -485,8 +501,10 @@ def test_rfork_native_eplb_uses_default_loader(monkeypatch):
485501
load_config = DummyLoadConfig({"model_url": "model", "model_deploy_strategy_name": "tp8"})
486502
loader = RForkModelLoader(load_config)
487503
model_config = SimpleNamespace(dtype=torch.float32, model="/models/test")
488-
vllm_config = _vllm_config(model_config=model_config)
489-
vllm_config.parallel_config.enable_eplb = True
504+
vllm_config = _vllm_config(
505+
model_config=model_config,
506+
parallel_config=_parallel_config(enable_eplb=True),
507+
)
490508
vllm_config.additional_config = None
491509

492510
def fail_if_rfork_worker_is_created(*args, **kwargs):

0 commit comments

Comments
 (0)