Skip to content

Commit 9607f45

Browse files
committed
fix(misc): surface failed async inference requests
Signed-off-by: Yu Yao <yaoyu.094@gmail.com>
1 parent ffa5b7b commit 9607f45

2 files changed

Lines changed: 46 additions & 0 deletions

File tree

‎scripts/inference/async_text_generation.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ async def _generate(
116116
) as llm:
117117
if llm.is_primary_rank:
118118
results = await asyncio.gather(*(llm.generate(prompt, sampling_params) for prompt in prompts))
119+
failed_results = [result for result in results if result.failed()]
120+
if failed_results:
121+
details = ", ".join(f"request {result.request_id}={result.status.name}" for result in failed_results)
122+
raise RuntimeError(f"Async inference failed: {details}")
119123
print_rank_0("======== ASYNC GENERATED TEXT OUTPUT ========")
120124
for idx, result in enumerate(results):
121125
print_rank_0(f"[{idx}] Prompt: {prompts[idx]}")

‎tests/unit_tests/scripts/test_async_text_generation_entrypoint.py‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ async def generate(self, prompt: str, sampling_params: object) -> types.SimpleNa
6060
generated_log_probs=[-0.3],
6161
prompt_top_n_logprobs=[{"prompt-token": -0.1}],
6262
generated_top_n_logprobs=[{"generated-token": -0.3}],
63+
failed=lambda: False,
6364
)
6465

6566

@@ -151,3 +152,44 @@ def test_generate_prints_requested_log_probabilities(
151152
assert "Generated log probs: [-0.3]" in rendered
152153
assert "Prompt top-n logprobs: [{'prompt-token': -0.1}]" in rendered
153154
assert "Generated top-n logprobs: [{'generated-token': -0.3}]" in rendered
155+
156+
157+
@pytest.mark.unit
158+
def test_generate_rejects_failed_inference_requests(
159+
async_text_generation_entrypoint: types.ModuleType,
160+
monkeypatch: pytest.MonkeyPatch,
161+
) -> None:
162+
async def _failed_generate(_self, _prompt, _sampling_params):
163+
return types.SimpleNamespace(
164+
request_id=7,
165+
status=types.SimpleNamespace(name="FAILED"),
166+
generated_text="",
167+
failed=lambda: True,
168+
)
169+
170+
monkeypatch.setattr(_AsyncLLM, "generate", _failed_generate)
171+
args = types.SimpleNamespace(
172+
max_seq_length=32,
173+
max_new_tokens=2,
174+
max_batch_size=None,
175+
tp=1,
176+
block_size_tokens=8,
177+
kv_cache_buffer_size_gb=1.0,
178+
max_tokens=None,
179+
return_log_probs=False,
180+
enable_chunked_prefill=False,
181+
coordinator_host=None,
182+
coordinator_port=None,
183+
)
184+
tokenizer = types.SimpleNamespace(tokenize=lambda prompt: [1, 2])
185+
186+
with pytest.raises(RuntimeError, match="request 7.*FAILED"):
187+
asyncio.run(
188+
async_text_generation_entrypoint._generate(
189+
args,
190+
model=object(),
191+
tokenizer=tokenizer,
192+
prompts=["prompt"],
193+
sampling_params=object(),
194+
)
195+
)

0 commit comments

Comments
 (0)