Repository navigation
feat(agentx): Kimi-K3 ATOM mono decode at C1/C2 and on-demand state cache at C48+ / Kimi-K3 ATOM AgentX 在 C1/C2 启用 mono decode,C48 及以上启用按需 state 缓存 - #4307
Conversation
…ache at C48+ - Concurrency 1 and the new concurrency 2 run ATOM mono decode, with the fp32 SSM state and BF16 projection excludes it requires; every other point pins ATOM_MONO_ENABLE=0. - Concurrency 48, 56 and 72 enable on-demand state checkpoints, a 224 GB per-rank LMCache pool and a 128 GB state cap inside it (dram-utilization 0.6 -> TOTAL_CPU_DRAM_GB 1799). Image unchanged: mono at C1/C2 needs ROCm/ATOM#2626, which is not yet in a nightly. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Thanks for the contribution!
中文感谢你的贡献!
|
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Only this PR's entry takes the #4307 link. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…x-mono-statecache # Conflicts: # inferencex-e2e/perf-changelog.yaml
ATOM 53e4fb524 carries Kimi-K3 mono decode and the one-token f_b_proj fix it depends on (ROCm/ATOM#2626). Recipe frontend pinned to the tag's digest. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Claude finished @gbyu-amd's task in 1m 16s —— View job ReviewLGTM - no blocking issues found. What I checked:
I could not run |
There was a problem hiding this comment.
I reviewed this PR and didn't find any bugs. amd-master.yaml has designated CODEOWNERS, and the change retunes published benchmark points from single-run A/B results, so a look from one of them would still be worthwhile.
What was reviewed:
- The DRAM budget for the 0.6 block. The runner cap of 2,861,022 MiB x 0.6 gives 1799 GB, so the recipe's TOTAL_CPU_DRAM_GB '1799' matches what the matrix produces. 1799/8 also covers the 224 GB/rank LMCache pool, and 0.343 still gives 1028 for C14/C16.
- Recipe selection: the new override_tp8_c2 is the only variant with CONC '2', so select_recipe should find exactly one match. The &mono_env / &mono_quant aliases merge the same way the existing lmcache overrides already do.
- Draft precision under mono: the &mono_quant exclude list keeps the unprefixed layers.* and context_proj draft exclusions and only adds more BF16 patterns. The perf-changelog entry is appended only at the end of the file and doesn't edit any earlier entry.
Extended reasoning...
This change updates one benchmark (kimik3-fp4-mi355x-atom-agentic-mtp) in three files. It bumps the image and its matching recipe digest, adds a C2 point, turns on mono decode for C1/C2 with a wider online-quant exclude list, retunes the LMCache/state settings for C48/56/72 under a new 0.6 DRAM block, and appends a perf-changelog entry. It touches no security-sensitive surface. The values I checked are consistent: the DRAM math, the unique recipe match per concurrency, and the draft-layer exclusions. I deferred instead of approving because amd-master.yaml has specific CODEOWNERS, and the new published points rest on single-run performance claims that the owners should confirm.
|
View unofficial run (performance): https://inferencex.semianalysis.com/inference?unofficialRun=40356343963 View unofficial run (accuracy): https://inferencex.semianalysis.com/evaluation?unofficialRun=40356343963 |
…x-mono-statecache # Conflicts: # inferencex-e2e/perf-changelog.yaml
|
@seungrokj @edwingao28 hi, could you kindly review this? |
|
let's hold this pr first, will update the recipe later and re-sweep. Convert to draft now. |
Concurrency 1 keeps mono decode; the published set returns to [1, 4, 14, 16, 48, 56, 72]. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…x-mono-statecache # Conflicts: # inferencex-e2e/perf-changelog.yaml
AITER_FLYDSL_USE_HERD=1 and AITER_FLYDSL_HERD_MIN_M=64 in the recipe base env. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gbyu-amd can you plz check c1 interactivity ? |
PrefillDelayer (ATOM_PREFILL_DECODE_INTERVAL=1000000), max-num-seqs 2 and CUDA-graph sizes [1, 2], per the Kimi-K3 recipe in ROCm/ATOM#2659. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…x-mono-statecache # Conflicts: # inferencex-e2e/perf-changelog.yaml
…x-mono-statecache
ATOM e893780f4 carries ROCm/ATOM#2659 (16-row Kimi-K3 mono, K2 on the MLA layers). Recipe frontend pinned to the tag's digest. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Claude finished @gbyu-amd's task in 31s —— View job Re-reviewLGTM, no blocking issues found. Since the last review, the C2 point was dropped, and C1 now uses
Not checked: whether the recipe digest |
There was a problem hiding this comment.
I reviewed the current revision and found no bugs. amd-master.yaml has designated code owners, so one of them should still sign off on the retune.
What was reviewed:
- The DRAM math. 0.343, 0.513 and 0.6 all imply the same host total of about 2998 GB, so 0.6 gives 1799 GB, and divided by TP8 that is the 224 GB/rank set in LMCACHE_MAX_LOCAL_CPU_SIZE. C48 also moved out of the 0.343 block and its TOTAL_CPU_DRAM_GB matches.
- The C1 override. Its online_quant_config keeps every base exclude and adds the mono BF16 patterns. The fp32 SSM dtype and max-num-seqs 2 with capture sizes [1,2] are consistent with each other. The base ATOM_MONO_ENABLE=0 leaves the other points off.
- The perf-changelog block. It is appended only at the tail, covers the one affected config key, and its block-style scenario-type matches existing entries.
Extended reasoning...
The change retunes one AMD agentic benchmark config (kimik3-fp4-mi355x-atom-agentic-mtp). It bumps the image and digest, enables mono decode at C1, enables on-demand state checkpoints and a larger LMCache tier at C48/56/72, and adds the matching perf-changelog entry. It touches no security-sensitive surface; it is benchmark YAML only. I deferred instead of approving because CODEOWNERS assigns inferencex-e2e/configs/amd-master.yaml to specific AMD owners. The timeline also has a comment from one of those owners whose content this review cannot see.
…x-mono-statecache # Conflicts: # inferencex-e2e/perf-changelog.yaml
Its aiter carries ROCm/aiter#7020, which keeps the tuned Kimi-K3 MXFP4 inline-sort MoE rows (C4/C14/C16 decode) under ATOM's real row count. Recipe frontend pinned to the tag's digest. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
kimik3-fp4-mi355x-atom-agentic-mtpmoves to a new image and changes in two places:rocm/atom-dev:nightly_202610131505(ATOM661ef7661) ->rocm/atom-dev:nightly_202610281457(ATOM06dbf6692, aiter with [HIP] [MoE] MXFP4 inline-sort: accept num_local_tokens, skip ids outside [0, E) ROCm/aiter#7020) in the master config. The recipe frontend is pinned to the matching digestsha256:96a9614276518c2619e88800dec5f276bc76a95691331b4abb2210184e1431af. The new image has Kimi-K3 mono decode and the one-tokenf_b_projfix it depends on (fix(kimi-k3): give the bf16 f_b_proj a real copy of f_a at one token ROCm/ATOM#2626), and 16-row mono steps with K2 on the MLA layers ([Kimi-K3] mono: serve 16-row and drafter-tapped steps, optional MLA K2, scheduler cap ROCm/ATOM#2659).ATOM_MONO_ENABLE=1). Mono needsATOM_GDN_SSM_DTYPE=fp32and BF16in_proj,f_b_proj,o_projand shared-expert projections, so those patterns are added to theonline_quant_configexclude list for this point. The draft-layer excludes are kept. ATOM now defaults mono on, so the base setsATOM_MONO_ENABLE=0for every other point. On the target image, mono refuses those points anyway (fp16 state, or a KV connector), so the explicit0changes nothing there.ATOM_STATE_CHECKPOINT_DEMAND=1, raises the per-rankLMCACHE_MAX_LOCAL_CPU_SIZEfrom 128/192 to 224, and setsOFFLOAD_STATE_CPU_SIZE=128. The state size is a cap inside the shared LMCache pool, not a second pool. C48 moves out of the 0.343 block, and all three usedram-utilization: 0.6(TOTAL_CPU_DRAM_GB 1799, about 60% ofmi355x-amdsDRAM).ATOM_PREFILL_DECODE_INTERVAL=1000000(PrefillDelayer holds new prefill while a request decodes),max-num-seqs: 2,cudagraph-capture-sizes: '[1,2]'.max-num-seqs 1fails at startup because the DSpark drafter's warmup runs two sequences. Queued requests wait, so TTFT rises.AITER_FLYDSL_USE_HERD=1andAITER_FLYDSL_HERD_MIN_M=64.Local MI355X AgentX results (
semianalysis_cc_traces_weka_062126, 3600 s per point), all against the same-image baseline:Supporting evidence
中文
kimik3-fp4-mi355x-atom-agentic-mtp更换镜像,另有两处改动:rocm/atom-dev:nightly_202610131505(ATOM661ef7661)改为rocm/atom-dev:nightly_202610281457(ATOM06dbf6692,aiter 含 [HIP] [MoE] MXFP4 inline-sort: accept num_local_tokens, skip ids outside [0, E) ROCm/aiter#7020),配方 frontend 固定为对应的 digestsha256:96a9614276518c2619e88800dec5f276bc76a95691331b4abb2210184e1431af。新镜像包含 Kimi-K3 mono decode,以及 mono 所依赖的单 tokenf_b_proj修复(fix(kimi-k3): give the bf16 f_b_proj a real copy of f_a at one token ROCm/ATOM#2626),以及支持 16 行、MLA 层也走 K2 的 mono decode([Kimi-K3] mono: serve 16-row and drafter-tapped steps, optional MLA K2, scheduler cap ROCm/ATOM#2659)。ATOM_MONO_ENABLE=1)。mono 要求ATOM_GDN_SSM_DTYPE=fp32,并要求in_proj、f_b_proj、o_proj和共享专家投影层保持 BF16,因此该点的online_quant_config排除列表加上了这些规则,草稿层的排除规则保持不变。ATOM 现在默认开启 mono,所以 base 中对其他所有点设置ATOM_MONO_ENABLE=0。在目标镜像上,这些点本来就会被 mono 拒绝(fp16 状态或存在 KV connector),因此显式写0不会改变它们的行为。ATOM_STATE_CHECKPOINT_DEMAND=1,把每个 rank 的LMCACHE_MAX_LOCAL_CPU_SIZE从 128/192 提高到 224,并设置OFFLOAD_STATE_CPU_SIZE=128。state 大小是共享 LMCache 池内的上限,不是另一个独立的池。C48 移出 0.343 这一组,三个点都使用dram-utilization: 0.6(TOTAL_CPU_DRAM_GB 1799,约占mi355x-amds内存的 60%)。ATOM_PREFILL_DECODE_INTERVAL=1000000(有请求在 decode 时,PrefillDelayer 暂缓新的 prefill),max-num-seqs: 2,cudagraph-capture-sizes: '[1,2]'。max-num-seqs 1会因 DSpark 草稿模型预热需要两条序列而启动失败。排队的请求需要等待,因此 TTFT 会上升。AITER_FLYDSL_USE_HERD=1和AITER_FLYDSL_HERD_MIN_M=64。本地 MI355X AgentX 结果(
semianalysis_cc_traces_weka_062126,每个点 3600 秒),均与同一镜像的基线对比:mono 使 C1 输出吞吐 +10.9%,ITL p50 从 6.27 降到 5.01 ms;DEMAND=1 + 224/128 使 C48/56/72 输出吞吐分别 +3.2% / +6.1% / +11.8%,C72 的 TTFT p50 降低 28.7%。三档的 offload 读回失败(退回 prefill)从 10/11/29 次降为 0,HBM KV 池不变。以上均为单次运行:C48/C56 的提升在已知波动范围内,C72 明显超出;三个参数是一起调整的,各自的贡献没有拆开。C14/C16 的 CPU 缓存层几乎没有被使用,因此保持现有配置。在应用 ROCm/ATOM#2626 的 C1 mono 配置上,GSM8K 3-shot(不强制接受率)在客户端并发 1/2/64 下 flexible-extract 分别为 0.9530 / 0.9538 / 0.9553(ATOM CI 基线 0.95)。AI model disclosure
Prepared with Claude Code using
claude-opus-5-5[1m](local sweeps and analysis, recipe and master-config edits, changelog entry, PR description). No other model and no delegated agent contributed.