[V1][BugFix] Exit properly if engine core fails during startup (#16137)
Signed-off-by: Nick Hill <nhill@redhat.com>
This commit is contained in:
@@ -3,8 +3,10 @@
|
||||
import asyncio
|
||||
import time
|
||||
import uuid
|
||||
from threading import Thread
|
||||
from typing import Optional
|
||||
|
||||
import psutil
|
||||
import pytest
|
||||
from transformers import AutoTokenizer
|
||||
|
||||
@@ -245,3 +247,42 @@ async def test_engine_core_client_asyncio(monkeypatch: pytest.MonkeyPatch):
|
||||
await core_client.call_utility_async("echo", None, "help!")
|
||||
|
||||
assert str(e_info.value) == "Call to echo method failed: help!"
|
||||
|
||||
|
||||
@pytest.mark.timeout(10)
|
||||
def test_startup_failure(monkeypatch: pytest.MonkeyPatch):
|
||||
|
||||
with monkeypatch.context() as m, pytest.raises(Exception) as e_info:
|
||||
m.setenv("VLLM_USE_V1", "1")
|
||||
|
||||
engine_args = EngineArgs(model=MODEL_NAME)
|
||||
vllm_config = engine_args.create_engine_config(
|
||||
usage_context=UsageContext.UNKNOWN_CONTEXT)
|
||||
executor_class = Executor.get_class(vllm_config)
|
||||
|
||||
# Start another thread to wait for engine core process to start
|
||||
# and kill it - simulate fatal uncaught process exit.
|
||||
this_proc = psutil.Process()
|
||||
children_before = set(this_proc.children())
|
||||
|
||||
def kill_first_child():
|
||||
while True:
|
||||
time.sleep(0.5)
|
||||
children = set(this_proc.children()) - children_before
|
||||
if children:
|
||||
child = children.pop()
|
||||
print("Killing child core process", child.pid)
|
||||
child.kill()
|
||||
break
|
||||
|
||||
Thread(target=kill_first_child, daemon=True).start()
|
||||
|
||||
_core_client = EngineCoreClient.make_client(
|
||||
multiprocess_mode=True,
|
||||
asyncio_mode=True,
|
||||
vllm_config=vllm_config,
|
||||
executor_class=executor_class,
|
||||
log_stats=True,
|
||||
)
|
||||
|
||||
assert "Engine core initialization failed" in str(e_info.value)
|
||||
|
||||
Reference in New Issue
Block a user