[CI/Build] Fix LoRA testing (#47242)

Signed-off-by: Jee Jee Li <jeejeelee@inferact.ai>

Jee Jee Li committed Jul 1, 2026 at 15:36 UTC 8f82be5705692f5e45b65186051e8bcf7f8ef8c2
1 file changed +17 -2
tests/lora/test_default_mm_loras.py
+17 -2
@@ -42,7 +42,11 @@ VLLM_RUNNER_BASE_KWARGS = {
42 }
43
44
45 -def run_test(vllm_runner, audio_assets, lora_request, expected_suffix, **kwargs):
45 +def run_test(
46 + vllm_runner, audio_assets, monkeypatch, lora_request, expected_suffix, **kwargs
47 +):
48 + monkeypatch.setenv("VLLM_WORKER_MULTIPROC_METHOD", "spawn")
49 +
50 inputs = [([AUDIO_PROMPT], [audio_assets[0].audio_and_sample_rate[0]])]
51
52 # Apply any additional kwargs as overrides to the base kwargs
@@ -66,11 +70,13 @@ def run_test(vllm_runner, audio_assets, lora_request, expected_suffix, **kwargs)
70 def test_active_default_mm_lora(
71 vllm_runner: type[VllmRunner],
72 audio_assets: AudioTestAssets,
73 + monkeypatch: pytest.MonkeyPatch,
74 ):
75 """Ensure that we can use the default audio lora."""
76 run_test(
77 vllm_runner,
78 audio_assets,
79 + monkeypatch,
80 lora_request=None,
81 default_mm_loras={"audio": AUDIO_LORA_PATH},
82 expected_suffix=RESPONSE_SUFFIX_WITH_LORA,
@@ -84,12 +90,14 @@ def test_active_default_mm_lora(
90 def test_inactive_default_mm_lora(
91 vllm_runner: type[VllmRunner],
92 audio_assets: AudioTestAssets,
93 + monkeypatch: pytest.MonkeyPatch,
94 ):
95 """Ensure that modalities are filtered properly."""
96 # Default image lora won't be active since we only pass audio
97 run_test(
98 vllm_runner,
99 audio_assets,
100 + monkeypatch,
101 lora_request=None,
102 default_mm_loras={"image": IMAGE_LORA_PATH},
103 expected_suffix=RESPONSE_SUFFIX_WITHOUT_LORA,
@@ -103,11 +111,13 @@ def test_inactive_default_mm_lora(
111 def test_default_mm_lora_succeeds_with_redundant_lora_request(
112 vllm_runner: type[VllmRunner],
113 audio_assets: AudioTestAssets,
114 + monkeypatch: pytest.MonkeyPatch,
115 ):
116 """Ensure that redundantly providing the lora works."""
117 run_test(
118 vllm_runner,
119 audio_assets,
120 + monkeypatch,
121 lora_request=LoRARequest("audio", 1, AUDIO_LORA_PATH),
122 default_mm_loras={"audio": AUDIO_LORA_PATH},
123 expected_suffix=RESPONSE_SUFFIX_WITH_LORA,
@@ -121,12 +131,14 @@ def test_default_mm_lora_succeeds_with_redundant_lora_request(
131 def test_default_mm_lora_fails_with_overridden_lora_request(
132 vllm_runner: type[VllmRunner],
133 audio_assets: AudioTestAssets,
134 + monkeypatch: pytest.MonkeyPatch,
135 ):
136 """Ensure that if the lora_request conflicts with default_mm_loras,
137 we use the lora_request."""
138 run_test(
139 vllm_runner,
140 audio_assets,
141 + monkeypatch,
142 lora_request=LoRARequest("speech", 2, AUDIO_LORA_PATH),
143 default_mm_loras={"audio": IMAGE_LORA_PATH},
144 expected_suffix=RESPONSE_SUFFIX_WITH_LORA,
@@ -134,7 +146,10 @@ def test_default_mm_lora_fails_with_overridden_lora_request(
146
147
148 @create_new_process_for_each_test()
137 -def test_default_mm_lora_does_not_expand_string_reqs(vllm_runner):
149 +def test_default_mm_lora_does_not_expand_string_reqs(vllm_runner, monkeypatch):
150 + # See run_test: force spawn to avoid the forked-child CUDA re-init crash.
151 + monkeypatch.setenv("VLLM_WORKER_MULTIPROC_METHOD", "spawn")
152 +
153 class MockEngineException(Exception):
154 pass
155