Repository navigation
Conversation
|
I have updated this branch with main; the current head is |
|
@nvcnvn Could you help review this serving-benchmark streaming-error fix or route it to the appropriate maintainer? The updated head is When a Chat Completions SSE response carries an error (including after partial content), the benchmark currently can count the request as successful. The fix rejects these error responses rather than allowing them to inflate success metrics. The two error-handling regressions fail against the pre-fix implementation; all 13 focused streaming tests pass on the updated branch in a fresh environment on my local 5090 machine. The repository-version isort, selected Ruff rules, formatting, codespell, CI test-registration validation, and Could an authorized maintainer enable |
A1.7 is met in T4 once aborted requests are counted as failed; the throughput ranking there is inside the noise. sgl-project/sglang#40881 already fixes the chat path of the in-stream-error accounting, so the fix is not opened as a competing PR and --goodput stands on its own. Adds the limits found on a second reading: 50 s runs, joint against per-SLO attainment, post hoc SLO sets for T2.
Hi, I'm just a random guy with a single contrib, last time I ask @BBuf on slack about this and he help me to review the PR. |
|
Thanks @nvcnvn for clarifying and pointing me toward the right reviewer. @BBuf, could you review this serving-benchmark fix or route it to its owner, and help authorize run-ci for head 36264a7? It rejects Chat Completions SSE error events so failed requests are not counted as successful. The current-head lint check is green, but PR Test stops at the missing run-ci label before CPU/GPU tests execute. The focused local regression results are recorded in the existing PR description and September 30 update; I am not claiming an upstream test pass. |
Motivation
An OpenAI-compatible Chat Completions endpoint can send an
errorevent after starting an HTTP 200 SSE response. SGLang emits this format for streaming generation failures.The benchmark client currently treats that event as an empty-choices chunk, skips it, and marks the request successful at EOF. An error-only stream followed by
[DONE]is reported assuccess=True, output_len=64for a 64-token request, despite producing no text. This inflates completed-request and output-token totals and can hide failed warmup requests.Modifications
Reject a non-null SSE
errorbefore processing usage or choices, using the existing exception-to-failed-request path. Add loopback HTTP regressions for errors before content, errors after partial content (including exclusion from aggregate metrics), and a valid chunk witherror: null.Only the benchmark client and its existing registered CPU test file change.
Accuracy Tests
Based on
d4dcce12d4fcdb3eb694d54d6afd31628c2eb7ce.The invalid GPU ordinal hides the accelerator on the test machine. The current base's test-utils import fails with an empty CUDA_VISIBLE_DEVICES value, which is outside this change.
Environment: Ubuntu 22.04, Python 3.12.14, PyTorch 2.13.0+cu130. No model-forward or sampling changes.
Speed Tests and Profiling
No performance claim. This fixes benchmark success/token accounting; inference kernels are unchanged.
Checklist
run-ci).pre-commit run --all-fileswas executed in an isolated validation worktree. All checks other than four Rust hooks passed. Those four could not run because this environment has nocargo/rustup: rustfmt-sgl-model-gateway, rustfmt-sgl-router, clippy-rust-workspace, and rustfmt-rust-workspace. No Rust files change. The upstream lint workflow has since passed for commit9a2827bb08c9e1122332d82f1fdbe66ea43abf58: https://github.com/sgl-project/sglang/actions/runs/35837114793. Hardware CI still requires the repository's authorizedrun-ciprocess.CI States
Latest PR Test (Base): ❌ Run #36746890992
Latest PR Test (Extra): ❌ Run #36746890533
Latest PR Test (AMD ROCm 10): ❌ Run #36746891116