Repository navigation
feat(serving): replicated dynamo.vllm behind the Dynamo frontend + LiveKit 2xTP4 arm / 多副本 dynamo.vllm 与 LiveKit 2xTP4 配置 - #38
Open
DinhKhangHoang wants to merge 8 commits into
Conversation
|
Thanks for the contribution!
中文感谢你的贡献!
|
A serving YAML can now run `python3 -m dynamo.vllm` as its engine with `replicas: N` behind `python3 -m dynamo.frontend`: - render: dynamo.vllm is a Dynamo engine (framework vllm, router profile dynamo). - schema: replicas > 1 with the Dynamo frontend is allowed for dynamo.vllm only, without a --kv-events-config of its own; DYN_SYSTEM_PORTS and DYN_KV_EVENT_PORTS are reserved. - launch_hardware-hcm.sh: one Dynamo system port (<= 32767) and one KV event port per replica, for the bench step only. - serve_generic.sh: one engine per GPU slice, each with its own system port and --kv-events-config; health wait per replica; aiperf scrapes every replica. - benchmarks/dynamo-vllm/Dockerfile: vllm/vllm-openai:v0.31.0 + ai-dynamo 1.6.0.dev20261018 (first release that routes Gemma-4's hybrid KV groups). - serving/gemma4-livekit-2tp4-dyn-kv-sa.yaml: LiveKit 111868 v1 on 2x TP4 with the KV router and hard session affinity, c96. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Khang Hoang <khanghd@greennode.ai>
The stock ai-dynamo-runtime leaks an empty `<|channel>thought\n<channel|>` into content on the turn after a tool result when Gemma 4 thinking is off (ai-dynamo/dynamo#16781). The -g4strip image reinstalls a patched runtime that keeps the gemma4 reasoning parser on, matching vllm serve. Performance is unchanged; Dockerfile.g4strip documents the build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Khang Hoang <khanghd@greennode.ai>
…turn A LiveKit run's p95 is set by each room's first turn (whole system prompt uncached), which aiperf's aggregate hides. livekit_ttft.py reads a run's profile_export.jsonl per conc with the trace's plan CSV and prints TTFT for first and later turns, the 5 s-timeout turns, and first turns by uncached length. The plan is fetched from the dataset lock as <dataset>-plan (v1 and v2 entries added, same HF repo as the traces); --plan takes a local CSV. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Khang Hoang <khanghd@greennode.ai>
…ench skill The English procedures page got the LiveKit results line in 73b483c; the zh page and the serving-bench skill's Results section now say the same, so an agent reading a LiveKit run reports first and later turns too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Khang Hoang <khanghd@greennode.ai>
A fresh agent reading run 39270751257 through the serving-bench skill had to work around the Results section: the agentic artifact has no results/ subdir, replicas add server.<i>.log, the aggregate (agg_bmk.json) and its fields were not named, tp in names is the YAML's gpus, readiness 503s before warmup look like failures, livekit_ttft.py needs pyyaml and huggingface_hub, and the time estimate left out the runner queue. The skill and both procedures pages now say so; a second fresh-agent pass read the run without workarounds on the skill side. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Khang Hoang <khanghd@greennode.ai>
The best 2x TP4 LiveKit arm from the rbench Slurm study (job 4382, c96 TTFT p95 0.53 s vs 0.64 for dyn-kv-sa): before a room's first turn the client sends that prompt minus the unknown first utterance (64 tokens) with max_tokens 1, and the engines run 8192-token steps with a 2048 long-prefill threshold. The warm-up takes the ~14k-token first prefill off the user's path; the smaller steps cut the later-turn tail. - lock: livekit-111868-v1-warm (+ -plan), trace and plan at HF b2b84e6c (mkwarm.py 64 3000; sha256 = the trace Slurm ran). - scenarios: custom-agentic-livekit111868-v1-warm, in the golden check. - serving: gemma4-livekit-2tp4-dyn-kv-sa-warm-chunk (c96). - livekit_ttft.py: warm=1 plan rows leave every TTFT view and get their own line (p50..max, share done within 0.5/1/1.5/2 s), since a warm-up must finish before the first turn. On job 4382 it prints p95 0.53, warm-ups p50 0.63 / p95 1.11. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Khang Hoang <khanghd@greennode.ai>
…cation launch_hardware-hcm.sh sizes its salloc from measured use (8 CPUs + 64 GB per GPU plus the engines' host KV pools). A serving YAML can now set host_cpus / host_mem_gb (whole job: engines, router, sidecars, aiperf) to ask for something else; unset keeps that default. The livekit warm-chunk arm asks for 64 CPU / 192 GB instead of the default 512 GB: rbench job 4382 (same arm, c96) peaked at ~70 GB RSS over its Slurm steps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Khang Hoang <khanghd@greennode.ai>
DinhKhangHoang
force-pushed
the
feat/serving-dynamo-vllm-replicas
branch
from
October 21, 2026 02:59
f1aa16e to
3d0e5ec
Compare
CI's Lint runs ruff@latest format --check on infx; five files had drifted. The router/storage runner checks now name hcm-rtx6000pro_* as well, so the two schema tests assert the updated message. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Khang Hoang <khanghd@greennode.ai>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Serving YAMLs can run
dynamo.vllmengines withreplicas: Nbehind the Dynamo frontend (KV router). This PR adds the LiveKit 111868 arm on that path, plus a script that reads LiveKit results.Engine/launcher (9bb5712)
render/schema:python3 -m dynamo.vllmis a Dynamo engine (framework vllm, router profile dynamo).replicas > 1with the Dynamo frontend is allowed fordynamo.vllmonly, and only without a--kv-events-configof its own.DYN_SYSTEM_PORTS/DYN_KV_EVENT_PORTSare reserved.launch_hardware-hcm.shreserves one Dynamo system port and one KV-event port per replica.serve_generic.shstarts one engine per GPU slice, each with its own--kv-events-config.benchmarks/dynamo-vllm/Dockerfile:vllm/vllm-openai:v0.31.0+ ai-dynamo 1.6.0.dev20261018. This is the first ai-dynamo release that routes Gemma-4's hybrid KV groups.LiveKit arm (bdc706b)
serving/gemma4-livekit-2tp4-dyn-kv-sa.yaml: Gemma-4-31B FP8, 2× TP4dynamo.vllm(8×H200).--router-prefill-load-scale=16and hard session affinity.custom-agentic-livekit111868-v1, c96.vcr.vngcloud.vn/108942-public69/dynamo-stack/vllm-runtime:0.31.0-dyn1.6.0.dev20261018-g4strip. It is public;Dockerfile.g4stripdocuments the build.<|channel>thought\n<channel|>that leaks intocontentafter a tool result ([BUG]: Gemma 4 with thinking off leaks an empty<|channel>thought\n<channel|>intocontentafter a tool result ai-dynamo/dynamo#16781).Results tooling (73b483c, 21fa1e6, b48f97a)
utils/serving/livekit_ttft.py: TTFT per conc, split by a room's first turn vs later turns. First turns carry the whole system prompt uncached and set the p95 tail.dataset.txtto pick the plan CSV, then fetches it from the lock.livekit-111868-{v1,v2}-plan: same HF repo and revision as the traces, public.serving-benchskill §4 andserving-yaml-procedures(en/zh) now describe the artifacts a run really uploads:results/subdir;server.<i>.logper replica;agg_bmk.jsonand the fields to read in it;tpin artifact names =gpus;Evidence: run 39270751257, c96, on hardware-hcm-8x_02.
-g4stripimage passed a tool-call smoke test on Slurm.Related Issue
ai-dynamo/dynamo#16781 (upstream bug the
-g4stripimage patches)Type of Change
Checklist
utils/test_serving_{livekit_ttft,fetch_dataset,to_matrix,router,render,launcher_hcm}.pypass.test_serving_schema.pypasses excepttest_router_needs_hardware_hcm_runner/test_storage_needs_hardware_hcm_runner, which already fail onvng-benchmark(stale message after the rtx6000pro runner was added).utils/serving/dispatch.sh, not the changelog sweep, and earlierserving/*.yamlcommits carry no entry either./reuse-sweep-run: N/A (no sweep).中文
Serving YAML 现可在 Dynamo frontend(KV router)后以
replicas: N运行dynamo.vllm引擎。本 PR 在此路径上新增 LiveKit 111868 配置,以及读取 LiveKit 结果的脚本。render/schema支持dynamo.vllm。launch_hardware-hcm.sh与serve_generic.sh为每个副本分配独立的 system port 与 KV-event port。benchmarks/dynamo-vllm/Dockerfile。gemma4-livekit-2tp4-dyn-kv-sa.yaml,2× TP4,KV router + hard session affinity,c96。-g4strip修补 [BUG]: Gemma 4 with thinking off leaks an empty<|channel>thought\n<channel|>intocontentafter a tool result ai-dynamo/dynamo#16781,不影响性能。utils/serving/livekit_ttft.py按房间首轮与后续轮次拆分 TTFT,plan CSV 从锁文件获取。serving-benchskill 与 procedures 文档(中英)已按实际产物更新。test_serving_schema.py的两个失败在vng-benchmark上已存在。🤖 Generated with Claude Code