Skip to content

Commit e23ee3e

Browse files
hyukjleeclaude
andcommitted
[AMD][AgentX] Move Kimi-K2.7 agentic sweep to TP8 conc[16,32,48] 900s smoke
At TP4 the conc16/32 cells were GPU-KV-capacity bound: the ~121 GiB KV pool held only ~12 resident ~90k-token contexts, so throughput plateaued (~160 tok/s) and requests preempted/thrashed from conc16 up (0 preemptions at c8, 24 at c16, 35 at c32). LMCache was healthy (82% external prefix-hit) so offload quality was not the limiter -- raw resident-KV room was. Move the agentic-coding sweep to TP8 (doubles the KV pool and per-token decode compute) at conc [16,32,48] for both KV-offloading none and dram/LMCache, as a 900s trace-replay smoke. Adds an optional per-scenario `duration` override to the agentic-coding config schema (defaults to 3600s when unset) so smoke sweeps can run shorter without changing the global default. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent cf49417 commit e23ee3e

4 files changed

Lines changed: 39 additions & 6 deletions

File tree

configs/amd-master.yaml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -558,10 +558,15 @@ kimik2.7-fp4-mi355x-vllm-agentic:
558558
multinode: false
559559
scenarios:
560560
agentic-coding:
561+
# TP8 900s smoke to break the TP4 GPU-KV-capacity wall at higher concurrency.
562+
# At TP4 the ~121 GiB KV pool held only ~12 resident ~90k-token contexts, so
563+
# throughput plateaued (~160 tok/s) and preemption thrashed from conc16 up.
564+
# TP8 doubles GPUs -> ~2x KV pool + faster per-token decode.
561565
- dram-utilization: 0.80
566+
duration: 900
562567
search-space:
563-
- { tp: 4, kv-offloading: none, conc-list: [1, 4, 8] }
564-
- { tp: 4, kv-offloading: dram, kv-offload-backend: { name: lmcache, version: "aaf7c0d3" }, conc-list: [16, 32] }
568+
- { tp: 8, kv-offloading: none, conc-list: [16, 32, 48] }
569+
- { tp: 8, kv-offloading: dram, kv-offload-backend: { name: lmcache, version: "aaf7c0d3" }, conc-list: [16, 32, 48] }
565570

566571

567572
kimik2.5-fp4-mi355x-atom:

utils/matrix_logic/generate_sweep_configs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -700,7 +700,7 @@ def generate_full_sweep(args, all_config_data, runner_data):
700700

701701
for agentic_config in agentic_configs:
702702
bmk_space = agentic_config[Fields.SEARCH_SPACE.value]
703-
duration = DEFAULT_AGENTIC_DURATION_SECONDS
703+
duration = agentic_config.get(Fields.DURATION.value) or DEFAULT_AGENTIC_DURATION_SECONDS
704704

705705
for bmk in bmk_space:
706706
if is_multinode:
@@ -1003,7 +1003,7 @@ def generate_test_config_sweep(args, all_config_data, runner_data=None):
10031003
# ---- Agentic-coding scenarios ----
10041004
agentic_configs = val[Fields.SCENARIOS.value].get(Fields.AGENTIC_CODING.value, []) if (scenario_filter is None or 'agentic-coding' in scenario_filter) else []
10051005
for agentic_config in agentic_configs:
1006-
duration = DEFAULT_AGENTIC_DURATION_SECONDS
1006+
duration = agentic_config.get(Fields.DURATION.value) or DEFAULT_AGENTIC_DURATION_SECONDS
10071007
bmk_space = agentic_config[Fields.SEARCH_SPACE.value]
10081008

10091009
for bmk in bmk_space:

utils/matrix_logic/test_validation.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -575,10 +575,33 @@ def test_available_cpu_dram_is_not_a_master_config_field(self):
575575
}],
576576
})
577577

578-
def test_duration_is_not_a_master_config_field(self):
578+
def test_duration_is_an_optional_master_config_field(self):
579+
# Per-scenario duration override (falls back to the default 3600s in the
580+
# sweep generator when unset). Used for shorter agentic smoke sweeps.
581+
cfg = AgenticCodingConfig(**{
582+
"duration": 1800,
583+
"search-space": [{
584+
"tp": 8,
585+
"kv-offloading": "none",
586+
"conc-list": [16],
587+
}],
588+
})
589+
assert cfg.duration == 1800
590+
591+
def test_duration_defaults_to_none_when_unset(self):
592+
cfg = AgenticCodingConfig(**{
593+
"search-space": [{
594+
"tp": 8,
595+
"kv-offloading": "none",
596+
"conc-list": [16],
597+
}],
598+
})
599+
assert cfg.duration is None
600+
601+
def test_duration_must_be_positive(self):
579602
with pytest.raises(Exception, match="duration"):
580603
AgenticCodingConfig(**{
581-
"duration": 1800,
604+
"duration": 0,
582605
"search-space": [{
583606
"tp": 8,
584607
"kv-offloading": "none",

utils/matrix_logic/validation.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,11 @@ class AgenticCodingConfig(BaseModel):
638638
dram_utilization: Optional[float] = Field(
639639
default=None, alias=Fields.DRAM_UTILIZATION.value, gt=0, le=1
640640
)
641+
# Per-scenario trace-replay duration override (seconds). Falls back to
642+
# DEFAULT_AGENTIC_DURATION_SECONDS in the sweep generator when unset.
643+
duration: Optional[int] = Field(
644+
default=None, alias=Fields.DURATION.value, gt=0
645+
)
641646

642647
@model_validator(mode='after')
643648
def validate_dram_offload_capacity(self):

0 commit comments

Comments
 (0)