[Rebase] Rebase to vllm 0.27.0 (#5976)
Signed-off-by: tzhouam <tzhouam@connect.ust.hk> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
584d78c673
commit
2ce15ab7a0
55 files changed
+1335
-93
No files matched your search
@@ -12,7 +12,7 @@ import traceback
|
||||
import uuid
|
||||
import wave
|
||||
from collections.abc import Iterable
|
||||
from dataclasses import dataclass
|
||||
from dataclasses import dataclass, replace
|
||||
from datetime import datetime
|
||||
from typing import Any, Literal
|
||||
from urllib.parse import parse_qsl, urlencode, urlsplit, urlunsplit
|
||||
@@ -1542,6 +1542,7 @@ async def benchmark(
|
||||
ready_check_timeout_sec: int = 600,
|
||||
ssl_context: ssl.SSLContext | bool | None = None,
|
||||
self_timed: bool = False,
|
||||
probe_request_rate: float = 0.0,
|
||||
):
|
||||
try:
|
||||
request_func = ASYNC_REQUEST_FUNCS[endpoint_type]
|
||||
@@ -1687,6 +1688,31 @@ async def benchmark(
|
||||
async with semaphore:
|
||||
return await request_func(request_func_input=request_func_input, session=session, pbar=pbar)
|
||||
|
||||
# Ported from upstream vLLM v0.27.0 (vllm/benchmarks/serve.py), which added
|
||||
# the probe_request_rate background probe; this file is the patched copy of
|
||||
# that module and tracks its upstream base.
|
||||
probe_outputs: list[MixRequestFuncOutput] = []
|
||||
probe_stop = asyncio.Event()
|
||||
|
||||
async def probe_loop():
|
||||
probe_input = replace(
|
||||
test_input,
|
||||
prompt="Hi",
|
||||
prompt_len=1,
|
||||
output_len=1,
|
||||
multi_modal_content=None,
|
||||
chat_messages=None,
|
||||
)
|
||||
interval = 1 / probe_request_rate
|
||||
while not probe_stop.is_set():
|
||||
probe_outputs.append(await request_func(request_func_input=probe_input, session=session))
|
||||
await asyncio.sleep(interval)
|
||||
|
||||
probe_task: asyncio.Task | None = None
|
||||
if probe_request_rate > 0:
|
||||
print(f"Probe request rate: {probe_request_rate} req/s")
|
||||
probe_task = asyncio.create_task(probe_loop())
|
||||
|
||||
benchmark_start_time = time.perf_counter()
|
||||
tasks: list[asyncio.Task] = []
|
||||
|
||||
@@ -1752,6 +1778,10 @@ async def benchmark(
|
||||
)
|
||||
outputs: list[MixRequestFuncOutput] = await asyncio.gather(*tasks)
|
||||
|
||||
if probe_task is not None:
|
||||
probe_stop.set()
|
||||
await probe_task
|
||||
|
||||
if pbar is not None:
|
||||
pbar.close()
|
||||
|
||||
@@ -1819,11 +1849,19 @@ async def benchmark(
|
||||
"input_lens": [output.prompt_len for output in outputs],
|
||||
"errors": [output.error for output in outputs],
|
||||
}
|
||||
duplex_request_metrics = [metric for output in outputs for metric in (output.duplex_request_metrics or [])]
|
||||
# Plain-vLLM backends (e.g. the vLLM-text perf config) return upstream
|
||||
# RequestFuncOutput objects without the Mix duplex fields; read them
|
||||
# tolerantly or the whole benchmark result is discarded ("fallback to
|
||||
# template", completed=0) after every request already succeeded.
|
||||
duplex_request_metrics = [
|
||||
metric for output in outputs for metric in (getattr(output, "duplex_request_metrics", None) or [])
|
||||
]
|
||||
if duplex_request_metrics:
|
||||
result["duplex_request_metrics"] = duplex_request_metrics
|
||||
duplex_session_metrics = [
|
||||
output.duplex_session_metrics for output in outputs if output.duplex_session_metrics is not None
|
||||
session_metrics
|
||||
for output in outputs
|
||||
if (session_metrics := getattr(output, "duplex_session_metrics", None)) is not None
|
||||
]
|
||||
if duplex_session_metrics:
|
||||
result["duplex_session_metrics"] = duplex_session_metrics
|
||||
|
||||
Reference in new issue
Block a user