Skip to content

README demo: re-record with a model serving live traffic - #11

Merged
gspark-etri merged 2 commits into
mainfrom
docs/10-demo-serving
Oct 20, 2026
Merged

gspark-etri merged 2 commits into
mainfrom
docs/10-demo-serving

Conversation

@gspark-etri

Copy link
Copy Markdown
Contributor

Background

The README demo from #9 was recorded on an idle cluster: SERVING 0/25, empty Traffic/Serving
views and idle devices (#10). This PR re-records it while a model actually serves traffic.

Changes

  • assets/demo.gif, assets/demo.cast: new 44 s recording (120×34, 438 frames). During the
    recording a temporary prefill/decode deployment (1 prefill + 1 decode RNGD card, Llama-3.1-8B,
    shm KV transfer) served behind the llm-d gateway route while rm-bench replayed the Azure
    conversation trace through it at about 1 req/s (--api completions).
  • scripts/record-demo.py: new key script. The tour now dwells on views that move under load:
    Overview (7 s) → Traffic: Flow (5 s) → Serving (4 s) → Serving: Perf (8 s, device
    utilisation over time) → Infra: Nodes (4 s) → Infra: Devices sorted busiest first with O
    (9 s, includes the ai-rm AcceleratorProfile / metrics / placement panels) → Overview (7 s).
    Deploy, Setup, Topology and the EPP sub-tab are dropped (nothing changes there under load).
    Still views and sort order only; nothing opens an action menu.
  • docs/DEMO.md: steps are now serve + load → record → restore, with an rm-bench example; notes
    that startup readiness-probe failures count as warning events on the Overview status line until
    they expire, and which columns need vLLM/Furiosa-LLM or EPP metrics.
  • scripts/record-demo.sh: header comment points at the load step.

Verification

  • Recording: LMD_DEMO_ALIASES=<untracked alias file> bash scripts/record-demo.sh on the admin
    host, lmd-top built from 1a3b4f3. Sanitizer: frames: 438, duration: 44.0s, replacements: 3331, distinct IPv4 mapped: 1, leak check passed (exit 0).
  • Grep of assets/demo.cast for internal node names, home paths and private IPv4
    (10/8, 172.16/12, 192.168/16): 0 hits. .cast parses as JSON lines (440 lines).
  • python tools/check_sensitive.py . (ai-rm copy): clean. Tree-wide grep for internal names: clean.
  • GIF 694 KB (< 5 MB). Frames checked as PNG at 3 s / 10 s / 20 s / 33 s / 41 s:
    • Overview: SERVING 2/25, status line 2 model(s) serving, 1 accelerator(s) hot (>80%) (no
      warning from the demo workload; its startup probe events had expired before recording),
      RNGD on npu-node-1 at 24 % with trend.
    • Traffic: Flow: /rngd/llama8… route → llama8b-pd-pool (1/1 endpoints) → gateway pod Running.
    • Serving: Perf: RNGD npu0 utilisation sparkline rising to 73 %.
    • Infra: Devices: RNGD npu0 73 %, 59 °C, 114 W; ai-rm placement panel for llama8b-pd-pool.
  • Load (rm-bench, same workload, 25 min run just before the recording): 1744 requests,
    0 failed, ~1.16 req/s, TTFT p90 1066 ms, TPOT p90 288 ms. The recording run used
    --speedup 0.75 (~1 req/s).
  • Cluster restored afterwards: load stopped, the three demo deployments back to 0 replicas, no
    pods left, Helm release unchanged (revision 4), airm-placement ConfigMap unchanged (same
    resourceVersion and content hash before and after), 0 RNGD/ATOM allocated on the node.

Compatibility and limits

  • The workers in this deployment export only airm_* series, not vLLM/Furiosa-LLM metrics, and
    this pool's endpoint picker is not scraped by Prometheus. So the header req/s, TTFT, E2E
    and the Serving: Perf throughput row still show –, and EPP endpoint decisions are empty.
    Utilisation, power, temperature, serving status and the ai-rm panels move. Showing request
    rate/TTFT needs a vLLM or Furiosa-LLM server with a ServiceMonitor (or the PD worker exporting
    vLLM-compatible names); left for a later re-record. docs/DEMO.md explains this.
  • The header shows ⚠8 alert (A): pre-existing cluster alerts (image pulls on other nodes), not
    from the demo workload. Another team's job had an A100 at 100 % at recording time; it shows as is.
  • No lmd-top code changes.

Related Issue

Closes #10

🤖 Generated with Claude Code

gspark-etri and others added 2 commits October 20, 2026 13:54
The key script now spends its time on Overview, Serving: Perf and Infra:
Devices (sorted busiest first) and drops views that do not change while a
model serves. docs/DEMO.md gains the serve/load/restore steps and explains
which columns need vLLM/Furiosa-LLM or EPP metrics.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Recorded while a 1 prefill + 1 decode RNGD deployment served
Llama-3.1-8B behind the llm-d gateway and rm-bench replayed the Azure
conversation trace at about 1 req/s. Overview, Serving: Perf and Infra:
Devices now show the serving deployment, device utilisation, power and
the ai-rm placement panel instead of an idle cluster.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@gspark-etri
gspark-etri merged commit 1e882e8 into main Oct 20, 2026
2 checks passed
@gspark-etri
gspark-etri deleted the docs/10-demo-serving branch October 20, 2026 05:56
gspark-etri added a commit that referenced this pull request Oct 20, 2026
## Background

The README demo from #9 was recorded on an idle cluster: `SERVING 0/25`,
empty Traffic/Serving
views and idle devices (#10). This PR re-records it while a model
actually serves traffic.

## Changes

- `assets/demo.gif`, `assets/demo.cast`: new 44 s recording (120×34, 438
frames). During the
recording a temporary prefill/decode deployment (1 prefill + 1 decode
RNGD card, Llama-3.1-8B,
shm KV transfer) served behind the llm-d gateway route while rm-bench
replayed the Azure
  conversation trace through it at about 1 req/s (`--api completions`).
- `scripts/record-demo.py`: new key script. The tour now dwells on views
that move under load:
Overview (7 s) → Traffic: Flow (5 s) → Serving (4 s) → Serving: Perf (8
s, device
utilisation over time) → Infra: Nodes (4 s) → Infra: Devices sorted
busiest first with `O`
(9 s, includes the ai-rm AcceleratorProfile / metrics / placement
panels) → Overview (7 s).
Deploy, Setup, Topology and the EPP sub-tab are dropped (nothing changes
there under load).
  Still views and sort order only; nothing opens an action menu.
- `docs/DEMO.md`: steps are now serve + load → record → restore, with an
rm-bench example; notes
that startup readiness-probe failures count as warning events on the
Overview status line until
  they expire, and which columns need vLLM/Furiosa-LLM or EPP metrics.
- `scripts/record-demo.sh`: header comment points at the load step.

## Verification

- Recording: `LMD_DEMO_ALIASES=<untracked alias file> bash
scripts/record-demo.sh` on the admin
host, lmd-top built from `b3cafc8`. Sanitizer: `frames: 438, duration:
44.0s, replacements:
  3331, distinct IPv4 mapped: 1`, leak check passed (exit 0).
- Grep of `assets/demo.cast` for internal node names, home paths and
private IPv4
(10/8, 172.16/12, 192.168/16): 0 hits. `.cast` parses as JSON lines (440
lines).
- `python tools/check_sensitive.py .` (ai-rm copy): clean. Tree-wide
grep for internal names: clean.
- GIF 694 KB (< 5 MB). Frames checked as PNG at 3 s / 10 s / 20 s / 33 s
/ 41 s:
- Overview: `SERVING 2/25`, status line `2 model(s) serving, 1
accelerator(s) hot (>80%)` (no
warning from the demo workload; its startup probe events had expired
before recording),
    RNGD on npu-node-1 at 24 % with trend.
- Traffic: Flow: `/rngd/llama8…` route → `llama8b-pd-pool` (1/1
endpoints) → gateway pod Running.
  - Serving: Perf: RNGD npu0 utilisation sparkline rising to 73 %.
- Infra: Devices: RNGD npu0 73 %, 59 °C, 114 W; ai-rm placement panel
for `llama8b-pd-pool`.
- Load (rm-bench, same workload, 25 min run just before the recording):
1744 requests,
0 failed, ~1.16 req/s, TTFT p90 1066 ms, TPOT p90 288 ms. The recording
run used
  `--speedup 0.75` (~1 req/s).
- Cluster restored afterwards: load stopped, the three demo deployments
back to 0 replicas, no
pods left, Helm release unchanged (revision 4), `airm-placement`
ConfigMap unchanged (same
resourceVersion and content hash before and after), 0 RNGD/ATOM
allocated on the node.

## Compatibility and limits

- The workers in this deployment export only `airm_*` series, not
vLLM/Furiosa-LLM metrics, and
this pool's endpoint picker is not scraped by Prometheus. So the header
`req/s`, `TTFT`, `E2E`
and the Serving: Perf throughput row still show `–`, and EPP endpoint
decisions are empty.
Utilisation, power, temperature, serving status and the ai-rm panels
move. Showing request
rate/TTFT needs a vLLM or Furiosa-LLM server with a ServiceMonitor (or
the PD worker exporting
vLLM-compatible names); left for a later re-record. `docs/DEMO.md`
explains this.
- The header shows `⚠8 alert (A)`: pre-existing cluster alerts (image
pulls on other nodes), not
from the demo workload. Another team's job had an A100 at 100 % at
recording time; it shows as is.
- No lmd-top code changes.

## Related Issue

Closes #10

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
gspark-etri added a commit that referenced this pull request Oct 20, 2026
## Background

The README demo from #9 was recorded on an idle cluster: `SERVING 0/25`,
empty Traffic/Serving
views and idle devices (#10). This PR re-records it while a model
actually serves traffic.

## Changes

- `assets/demo.gif`, `assets/demo.cast`: new 44 s recording (120×34, 438
frames). During the
recording a temporary prefill/decode deployment (1 prefill + 1 decode
RNGD card, Llama-3.1-8B,
shm KV transfer) served behind the llm-d gateway route while rm-bench
replayed the Azure
  conversation trace through it at about 1 req/s (`--api completions`).
- `scripts/record-demo.py`: new key script. The tour now dwells on views
that move under load:
Overview (7 s) → Traffic: Flow (5 s) → Serving (4 s) → Serving: Perf (8
s, device
utilisation over time) → Infra: Nodes (4 s) → Infra: Devices sorted
busiest first with `O`
(9 s, includes the ai-rm AcceleratorProfile / metrics / placement
panels) → Overview (7 s).
Deploy, Setup, Topology and the EPP sub-tab are dropped (nothing changes
there under load).
  Still views and sort order only; nothing opens an action menu.
- `docs/DEMO.md`: steps are now serve + load → record → restore, with an
rm-bench example; notes
that startup readiness-probe failures count as warning events on the
Overview status line until
  they expire, and which columns need vLLM/Furiosa-LLM or EPP metrics.
- `scripts/record-demo.sh`: header comment points at the load step.

## Verification

- Recording: `LMD_DEMO_ALIASES=<untracked alias file> bash
scripts/record-demo.sh` on the admin
host, lmd-top built from `4128de8`. Sanitizer: `frames: 438, duration:
44.0s, replacements:
  3331, distinct IPv4 mapped: 1`, leak check passed (exit 0).
- Grep of `assets/demo.cast` for internal node names, home paths and
private IPv4
(10/8, 172.16/12, 192.168/16): 0 hits. `.cast` parses as JSON lines (440
lines).
- `python tools/check_sensitive.py .` (ai-rm copy): clean. Tree-wide
grep for internal names: clean.
- GIF 694 KB (< 5 MB). Frames checked as PNG at 3 s / 10 s / 20 s / 33 s
/ 41 s:
- Overview: `SERVING 2/25`, status line `2 model(s) serving, 1
accelerator(s) hot (>80%)` (no
warning from the demo workload; its startup probe events had expired
before recording),
    RNGD on npu-node-1 at 24 % with trend.
- Traffic: Flow: `/rngd/llama8…` route → `llama8b-pd-pool` (1/1
endpoints) → gateway pod Running.
  - Serving: Perf: RNGD npu0 utilisation sparkline rising to 73 %.
- Infra: Devices: RNGD npu0 73 %, 59 °C, 114 W; ai-rm placement panel
for `llama8b-pd-pool`.
- Load (rm-bench, same workload, 25 min run just before the recording):
1744 requests,
0 failed, ~1.16 req/s, TTFT p90 1066 ms, TPOT p90 288 ms. The recording
run used
  `--speedup 0.75` (~1 req/s).
- Cluster restored afterwards: load stopped, the three demo deployments
back to 0 replicas, no
pods left, Helm release unchanged (revision 4), `airm-placement`
ConfigMap unchanged (same
resourceVersion and content hash before and after), 0 RNGD/ATOM
allocated on the node.

## Compatibility and limits

- The workers in this deployment export only `airm_*` series, not
vLLM/Furiosa-LLM metrics, and
this pool's endpoint picker is not scraped by Prometheus. So the header
`req/s`, `TTFT`, `E2E`
and the Serving: Perf throughput row still show `–`, and EPP endpoint
decisions are empty.
Utilisation, power, temperature, serving status and the ai-rm panels
move. Showing request
rate/TTFT needs a vLLM or Furiosa-LLM server with a ServiceMonitor (or
the PD worker exporting
vLLM-compatible names); left for a later re-record. `docs/DEMO.md`
explains this.
- The header shows `⚠8 alert (A)`: pre-existing cluster alerts (image
pulls on other nodes), not
from the demo workload. Another team's job had an A100 at 100 % at
recording time; it shows as is.
- No lmd-top code changes.

## Related Issue

Closes #10

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

README demo: re-record with a model serving live traffic

1 participant