Repository navigation
ci(atomesh): Add aggregated-service CI, AgentX runtime fixes and Kimi-K3 2P1D/agg cells - #2528
Merged
Merged
Conversation
Contributor
🏷️ CI GuideRuns automatically on every eligible PR before approval:
Heavy model tests:
|
…m bs=1 (#2417) * fix(ci-mesh): align Kimi-K3 AgentX cells with the recipe (#2382) Sync the K3 P/D nightly cells with recipes/Agentic-Kimi-K3.md as of d8cdd4e: - ATOM_USE_FLYDSL_FP8_PREFILL_ATTN=1 on every band - PrefillDelayer (ATOM_PREFILL_DECODE_INTERVAL=4, ATOM_PREFILL_DELAYER_MAX_QUEUE_MS=5000) from CONC 16 up - `cudagraph: auto` captures the dense range from bs=1 instead of 2 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(ci-mesh): drop PrefillDelayer env from K3 P/D cells Its benefit was measured on the aggregated recipe server; on the P/D split the decode instance never installs it and the prefill instance has no decode batch to protect, so keep the cells unchanged there. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: ganyi <ygan@amd.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Rename the agentic column to "P90 E2E Normalized Interactivity" (1/p90(ITL + TTFT/OSL)). - Add a "P90 Interactivity" column (1/p90(ITL)) from interactivity_p90_itl; "--" for fixed ISL/OSL rows. - Dashboard: parse old and new headers, read the new column, and use both names in axis, popup and table labels.
- Compute input/output/total tok/s as the summed ISL/OSL of the successful profiling records over the span from the first request start to the last request end, as InferenceX's compute_throughput_stats does. AIPerf's time-sliced *_token_throughput reads lower on agentic runs
…ker AITER_JIT_DIR With AITER_JIT_DIR set, aiter imports modules only from that dir, so the empty per-worker dir made every worker JIT-rebuild modules the image already ships (e.g. a 300 s stall at the first CUDA-graph capture), and any module first needed mid-benchmark stalled the engine. Unsetting the override is not an option: for a non-root uid aiter then copies the whole 7.3 GB jit dir into HOME and fails on the root-only FlyDSL cache files. Symlink the image's .so files into the writable dir instead; modules it lacks still build there. Co-authored-by: Cursor <cursoragent@cursor.com>
Add a 1P1D C88 cell (max_num_seqs 176, 192 GiB CPU tier, as from C56 up). Drop the 1P1D C40 and 2P1D C64 cells; the 2P1D anchor moves to C72, so C72/C128/C256 resolve unchanged. The case_names help also listed K3 C12, C14 and C80, which no suite defines, and omitted the agg C72 cell. ATOM_WARMUP_GEMM_M_BUCKETS on that cell has no reader on main. Co-authored-by: Cursor <cursoragent@cursor.com>
wanzhenchn
force-pushed
the
zwan/feat-k3-pd-disagg-ci-pr
branch
from
October 11, 2026 02:23
7442af9 to
7543b17
Compare
Jasen2201
added a commit
that referenced
this pull request
Oct 11, 2026
… its start main's #2528 adds an aggregated mode to the launcher: one server, no P/D roles, a start_aggregated branch ahead of the P/D branches. Two things of this PR meet it there: - MOONCAKE_STORE starts the Store from start_prefill, and an aggregated cell has no prefill, so its server would run silently without the offload the case asked for. validate_mooncake_store_settings now refuses that combination before anything starts. - Every branch installs its EXIT trap before its first start (the rebase moved the aggregated branch's trap ahead of start_aggregated, so the rule holds there too). The launcher test now finds nine branches and counts start_aggregated as a start. The Store-env command-line test also stubs build_torch_profiler_args and ATOM_SOURCE_ENV, which #2528 added to start_prefill and start_decode. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Jasen2201
added a commit
that referenced
this pull request
Oct 12, 2026
… its start main's #2528 adds an aggregated mode to the launcher: one server, no P/D roles, a start_aggregated branch ahead of the P/D branches. Two things of this PR meet it there: - MOONCAKE_STORE starts the Store from start_prefill, and an aggregated cell has no prefill, so its server would run silently without the offload the case asked for. validate_mooncake_store_settings now refuses that combination before anything starts. - Every branch installs its EXIT trap before its first start (the rebase moved the aggregated branch's trap ahead of start_aggregated, so the rule holds there too). The launcher test now finds nine branches and counts start_aggregated as a start. The Store-env command-line test also stubs build_torch_profiler_args and ATOM_SOURCE_ENV, which #2528 added to start_prefill and start_decode. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Summary
ATOMesh CI updates for the Kimi-K3 AgentX benchmarks:
Features
agglaunches one server that answers both roles. The server reads thedecodeservice block andenv.decode, starts without a router, and gets no default KV connector.pd_matrix.pyderives adisaggregatedflag from the topology name.process_result.pyand the dashboard count an aggregated cell's GPUs as that one server's, not prefill plus decode.kimi-k3-mxfp4-agg-tp8-dcp8-agentic-lmcache-1m-c72as the aggregated counterpart of the 1P1D C72 cell.--prefill-policy dp_sticky, keyed onX-Session-ID), so later turns land on the prefill that holds their prefix.profilesuite withkimi-k3-mxfp4-1p1d-tp8-dcp8-agentic-lmcache-1m-c72-torch-profile.ATOMESH_TORCH_PROFILE_START,ATOMESH_TORCH_PROFILE_DURATIONandATOMESH_TORCH_PROFILE_ROLESopen astart_profile/stop_profilewindow on the prefill and decode servers.atom_sourcedispatch inputmounted(the default) runs the checkout;imageruns the copy installed in the image (/app/ATOM).atompackage the servers will import and fails fast if it does not match the choice.Fixes
atomesh-cicd. Removes the hard-codedATOMESH_NODE_POOLand its membership checks.autolets Slurm choose idle nodes; an explicit node list still pins the job.ATOM_USE_FLYDSL_FP8_PREFILL_ATTN=1) on every band.cudagraph: autocaptures from bs=1 instead of bs=2.--usercontainer could not read them. Each new prefill M bucket then compiled at runtime and stalled the engine for 8-60 s.FLYDSL_RUNTIME_CACHE_DIRat it.AITER_JIT_DIR.AITER_JIT_DIRset, aiter imports only from that directory, so an empty one made every worker rebuild modules the image already ships (for example, a 300 s stall at the first CUDA-graph capture)..sofiles are now symlinked into the writable directory. Modules the image lacks still build there.Benchmark reporting
1/p90(ITL). It shows--for fixed ISL/OSL rows.1/p90(ITL + TTFT/OSL). The dashboard reads both the old and the new header.compute_throughput_stats. Input, output and total tok/s are the summed ISL/OSL of the successful profiling records, divided by the span from the first request start to the last request end. AIPerf's time-sliced throughput reads lower on agentic runs.Kimi-K3 case changes
ATOM_PREFILL_DECODE_INTERVAL=4,ATOM_PREFILL_DELAYER_MAX_QUEUE_MS=5000) to match InferenceX.max_num_seqs: 176and the 192 GiB CPU tier used from C56 up.case_nameshelp text with the suites: removes C12, C14 and C80, which no suite defines, and adds the aggregated C72 cell.Testing
pytest tests/test_atomesh_*.py: 57 passed, 70 subtests passed.models_atomesh.yamlandatomesh-benchmark.yamlparse at every commit, and the Kimi-K3case_nameslist matches the defined cells one-to-one.pd_matrix.py --suite nightly --case kimi-k3-mxfp4-1p1d-tp8-dcp8-agentic-lmcache-1m-c88resolves to one cell.