Skip to content

Commit 9568edd

Browse files
feat(agentx): run the MiniMax-M3 MI300X LMCache point on the lmcache-server service (#3545)
* feat(agentx): run the MiniMax-M3 MI300X LMCache point on the lmcache-server service * chore(agentx): set the perf-changelog pr-link for #3545 * fix(agentx): match the MiniMax-M3 MI300X recipe image to its config amd-master.yaml moved minimaxm3-fp8-mi300x-vllm-agentic-mtp to vllm/vllm-openai-rocm:v0.30.0 in #3361, but the recipe still named v0.29.0, so the single-node adapter rejected every point. * fix(agentx): name the lmcache-mp connector on the MiniMax-M3 MI300X LMCache point The refreshed lmcache-server patch (SemiAnalysisAI/srt-slurm#32 at 181b2e4) keeps a role's connector on a direct vllm serve aggregate worker, so the variant names connector: lmcache-mp instead of hand-writing its kv-transfer-config. The message queue timeout falls back to LMCache's default (300 s) instead of 6000 s. * fix(agentx): keep the measured LMCache message queue timeout on MI300X The role connector is now the lmcache-mp preset written out plus lmcache.mp.mq_timeout 6000, so the point keeps its measured timeout instead of falling back to LMCache's 300 s default. * docs(changelog): keep only the perf-affecting changes in the #3545 entry --------- Co-authored-by: Cameron Quilici <cameron@semianalysis.com>
1 parent 31465c4 commit 9568edd

5 files changed

Lines changed: 907 additions & 43 deletions

File tree

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
#!/usr/bin/env bash
2-
# Start one LMCache MP server per TP rank in the worker container before vLLM,
3-
# as the legacy MI300X MiniMax-M3 AgentX script did. A variant opts in with
4-
# LMCACHE_SHARDS and LMCACHE_L1_SHARD_GB; its kv-transfer-config lists
5-
# tcp://127.0.0.1:5555 through 5555 + LMCACHE_SHARDS - 1.
2+
# Install the ROCm LMCache wheel for the MI300X MiniMax-M3 AgentX LMCache point.
3+
# It runs twice: as the vLLM worker's setup_script (the connector is imported
4+
# there) and in the lmcache-server service's preamble (its own container).
65
set -euo pipefail
7-
[[ -n "${LMCACHE_SHARDS:-}" ]] || exit 0
8-
: "${LMCACHE_L1_SHARD_GB:?}"
96
version=0.5.3
107
pip_install=(python3 -m pip install)
118
if python3 -m pip install --help 2>/dev/null | grep -q -- --break-system-packages; then
@@ -18,29 +15,3 @@ fi
1815
"lmcache==${version}" \
1916
--find-links "https://github.com/LMCache/LMCache/releases/expanded_assets/v${version}-rocm"
2017
python3 -c "import cupy; import lmcache.integration.vllm.lmcache_mp_connector; import opentelemetry.exporter.prometheus"
21-
22-
pids=()
23-
for ((shard = 0; shard < LMCACHE_SHARDS; shard++)); do
24-
# Detached so the servers outlive this preamble and serve the vLLM step.
25-
setsid lmcache server \
26-
--host 127.0.0.1 --port $((5555 + shard)) \
27-
--http-host 127.0.0.1 --http-port $((8080 + shard)) \
28-
--l1-size-gb "$LMCACHE_L1_SHARD_GB" --l1-init-size-gb 10 \
29-
--l1-read-ttl-seconds 7200 --chunk-size 256 --max-workers 2 \
30-
--eviction-policy LRU --supported-transfer-mode lmcache_driven \
31-
> "/logs/lmcache_server_${shard}.log" 2>&1 < /dev/null &
32-
pids+=($!)
33-
done
34-
for ((shard = 0; shard < LMCACHE_SHARDS; shard++)); do
35-
for ((attempt = 0; ; attempt++)); do
36-
python3 -c 'import sys, urllib.request; urllib.request.urlopen(sys.argv[1], timeout=2)' \
37-
"http://127.0.0.1:$((8080 + shard))/healthcheck" 2> /dev/null && break
38-
if ! kill -0 "${pids[$shard]}" 2>/dev/null || (( attempt >= 600 )); then
39-
echo "ERROR: LMCache server $shard did not become ready" >&2
40-
tail -n 50 "/logs/lmcache_server_${shard}.log" >&2 || true
41-
exit 1
42-
fi
43-
sleep 1
44-
done
45-
done
46-
echo "LMCache: ${LMCACHE_SHARDS} servers ready, ${LMCACHE_L1_SHARD_GB} GB L1 each"

‎inferencex-e2e/benchmarks/single_node/srt-slurm-recipes/minimaxm3/vllm/mi300x-fp8-mtp/agentic.yaml‎

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# MiniMax-M3 MXFP8 AgentX on MI300X with vLLM EAGLE3 (GQA draft). The KV cache
2-
# is GPU-resident, or backed by LMCache MP DRAM servers at the offload point.
2+
# is GPU-resident, or backed by an LMCache MP DRAM server at the offload point.
33
base:
44
schema: 2
55
name: minimaxm3-fp8-mi300x-vllm-agentic
66
model:
77
path: hf:MiniMaxAI/MiniMax-M3-MXFP8
8-
container: vllm/vllm-openai-rocm:v0.29.0
8+
container: vllm/vllm-openai-rocm:v0.30.0
99
precision: fp8
1010
resources:
1111
gpu_type: mi300x
@@ -24,8 +24,6 @@ base:
2424
health_check:
2525
interval_seconds: 10
2626
max_attempts: 360
27-
# Starts the LMCache servers for the variant that sets LMCACHE_SHARDS.
28-
setup_script: lmcache-mp-rocm.sh
2927
roles:
3028
agg:
3129
nodes: 1
@@ -72,8 +70,9 @@ base:
7270
AIPERF_REQUIRED_SERVER_METRIC_PREFIX: 'vllm:'
7371
AIPERF_APPLY_CHAT_TEMPLATE: 'true'
7472

75-
# One variant per point. Admission is 2x CONC. The DRAM point splits its
76-
# 1298 GB budget into one LMCache L1 shard per TP rank (1298 / 8 = 162 GB).
73+
# One variant per point. Admission is 2x CONC. The DRAM point runs one
74+
# lmcache-server service on the node with the 8 x 162 GB L1 the per-rank
75+
# servers used to split between them.
7776
override_tp8_c2:
7877
roles:
7978
agg:
@@ -125,14 +124,40 @@ override_tp8_c10:
125124
KV_OFFLOADING: 'none'
126125

127126
override_tp8_c16_lmcache:
127+
# Installs LMCache in the worker container; the service installs its own.
128+
setup_script: lmcache-mp-rocm.sh
129+
services:
130+
- name: lmcache
131+
type: lmcache-server
132+
preamble: bash /configs/lmcache-mp-rocm.sh
133+
# The default probe with more time: the install counts against it.
134+
readiness:
135+
http:
136+
port: 8751
137+
path: /healthcheck
138+
timeout_seconds: 900
139+
args:
140+
- --l1-size-gb
141+
- '1296'
142+
- --l1-init-size-gb
143+
- '10'
144+
- --l1-read-ttl-seconds
145+
- '7200'
146+
- --chunk-size
147+
- '256'
148+
- --max-workers
149+
- '2'
150+
- --eviction-policy
151+
- LRU
152+
- --supported-transfer-mode
153+
- lmcache_driven
128154
roles:
129155
agg:
130156
args:
131157
max-num-seqs: 32
132-
kv-transfer-config: '{"kv_connector":"LMCacheMPConnector","kv_connector_module_path":"lmcache.integration.vllm.lmcache_mp_connector","kv_role":"kv_both","kv_connector_extra_config":{"lmcache.mp.server_urls":"tcp://127.0.0.1:5555,tcp://127.0.0.1:5556,tcp://127.0.0.1:5557,tcp://127.0.0.1:5558,tcp://127.0.0.1:5559,tcp://127.0.0.1:5560,tcp://127.0.0.1:5561,tcp://127.0.0.1:5562","lmcache.mp.mq_timeout":6000.0}}'
133-
env:
134-
LMCACHE_SHARDS: '8'
135-
LMCACHE_L1_SHARD_GB: '162'
158+
# The lmcache-mp preset (the node's lmcache-server on port 8750) plus the
159+
# measured message queue timeout.
160+
connector: '{"kv_connector":"LMCacheMPConnector","kv_connector_module_path":"lmcache.integration.vllm.lmcache_mp_connector","kv_role":"kv_both","kv_connector_extra_config":{"lmcache.mp.host":"tcp://localhost","lmcache.mp.port":8750,"lmcache.mp.mq_timeout":6000.0}}'
136161
benchmark:
137162
env:
138163
CONC: '16'

‎inferencex-e2e/perf-changelog.yaml‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9053,3 +9053,12 @@
90539053
description:
90549054
- "Update the GB300 DeepSeek-V4.1-Flash SGLang AgentX curve to lmsysorg/sglang:dev-cu13-nightly-0924 (digest pinned): pure TP4 (EP1) at C1/C2 with Engram in HBM, and TP4/EP4 at C4+ with per-rank host Engram, 16K prefill chunks, no prefill-decode interval, 4096 SWA prefix tails and a 128 decode graph batch; all TP4 points use static ragged verify; TP2 is unchanged."
90559055
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/3421
9056+
9057+
- config-keys:
9058+
- minimaxm3-fp8-mi300x-vllm-agentic-mtp
9059+
scenario-type:
9060+
- agentic-coding
9061+
description:
9062+
- "All points now run vllm/vllm-openai-rocm:v0.30.0 (previously v0.29.0)."
9063+
- "LMCache DRAM point (TP8, concurrency 16): one LMCache server per node with 1296 GB L1 shared by all 8 TP ranks, replacing 8 per-rank servers of 162 GB L1 each."
9064+
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/3545

0 commit comments

Comments
 (0)