Commit Graph
10 Commits
Author SHA1 Message Date
noonghunnaandClaude Opus 4.8 c51dc23dde docs: reconcile DUAL/MULTI_CARD for the qwen fast/max tiers (#340)
DUAL_CARD.md: annotate dual.yml as the "fast" tier (≡ vllm/qwen-27b-dual-fast)
and add the new "max accuracy" row (vllm/qwen-27b-dual-max — FP8 + int8-PTH KV,
🧪, boot/KV-validated, no TPS claim).

MULTI_CARD.md: the "Shipped TP=4 baselines" section documented vllm/dual4 +
vllm/dual4-dflash → composes that no longer exist (multi4 now has only
autoround-int4/mtp.yml + fp8/mtp.yml). Rewrote to vllm/qwen-27b-multi-fast +
-multi-max, carried Whamp's cross-rig fp8/MTP numbers onto multi-fast (same
config, renamed file; labelled cross-rig), and dropped the removed DFlash TP=4
variant (DFlash on Qwen3-Next vLLM is blocked, #39931 — kept its numbers as a
historical note). Fixed the recipe's stale filename (multi4.yml) + container/port
(8014 multi-fast / 8015 multi-max), and the "why one config" section → fast/max pair.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-07 14:54:24 +00:00
noonghunnaandClaude Opus 4.7 eaa7a8c1ad docs+scripts: finish <quant>/ path migration across full repo sweep
Repo-wide follow-up to the compose quant-layer move (9821c94). The
mechanical move + registry/launch/test rewire covered the launchable
surface; a full-tree sweep found compose-path refs the move invalidated
in docs, two functional scripts, and one half-migrated mapping.

Functional fixes:
- bench-row-formatter.sh infer_compose_path(): 6 dual entries
  (int8-tq3, tq3-mtp-genesis, tq3-nomtp, tq3-mtp, int8, bf16) were left
  at bare dual/<file>.yml while the rest were migrated -> would emit
  dead compose paths into BENCHMARKS rows.
- residency-instrument/run-instrumented-soak.sh: case->COMPOSE_FILE
  paths (long-text, long-text-no-mtp, tools-text, dual default) now
  resolve under <quant>/.

Docs: README layout line + tree, engine/model READMEs, patch-README
quick-recipes, diagnostics, FAQ/CLIFFS/KV_MATH/DTYPE/MULTI/SINGLE/
STRUCTURED_COT/TQ3/UPSTREAM, issue template, sglang cross-refs
(-> vllm prod path). Per-model targets: qwen-vllm->autoround-int4,
llama-cpp->unsloth-q4km, gemma defaults (bf16-mtp/fp8-mtp),
carnice->own slug dir.

Intentionally left as historical/append-only records: CHANGELOG x2,
BENCHMARKS row-labels (live paths already correct in row bodies),
calibration source: provenance citations, switch.sh/parity history
comments. Separate follow-ups: gpu-mode.sh (#417 deprecated-repo
repoint), bench-row-formatter compose_display() docker-compose.yml
branch (PR-B). Flagged pre-existing-stale: dual/int8-tq3.yml in
pr40798/pr40914 READMEs (predate this refactor; ambiguous target).

Guard tests (registry-disk, mounts-resolve, switch-parity,
launch-compat) all PASS post-edit. Leak-clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-26 16:50:13 +00:00
noonghunnaandClaude Opus 4.7 afe56f763f docs: cross-link the v0.8.0 universal pull flow from the existing user guides
Post-release additive pass — the pre-existing high-traffic guides didn't
know `pull` exists. All edits additive, curated path untouched (same
discipline as the README migration nudge):

- FAQ.md: new Q "model not in the supported list — can I still run it?";
  GGUF Q gets a v0.8.0 note (safetensors-only eval, GGUF→llama.cpp stays
  curated/manual, cross-engine deferred); launch.sh answer points
  non-catalog models at `pull`.
- SINGLE_CARD / DUAL_CARD / MULTI_CARD: one blockquote cross-link each to
  docs/PULL.md ("not in the configs / any HF safetensors repo — both
  paths work").
- ADDING_MODELS.md: reframed catalog-onboarding vs just-run-a-model
  (`pull`); the doc is the heavier calibration-catalog promotion task,
  not a prerequisite for serving.
- GLOSSARY.md: new "Universal pull (v0.8.0)" table (pull, dry-run,
  confidence tier, boot-fit≠runtime, calibration backbone).

Leak-clean; all links resolve on master; CommonMark structure verified
(blockquotes/headings blank-line separated). Docs-only — triggers no CI
(only tags do); lands as post-v0.8.0 polish on master.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-17 17:02:19 +00:00
noonghunna d116ba9ba3 feat(launch): add hardware topology advisor
Build vLLM Club3090 Image / Build and push dated image (push) Failing after 1m22s
Release / release (push) Failing after 48s
Build vLLM Club3090 Image / Promote latest and nightly-stable (push) Canceled after 0s
Build vLLM Club3090 Image / Retain four weeks of dated nightlies (push) Canceled after 0s
2026-05-15 09:54:04 +00:00
noonghunnaandClaude Opus 4.7 acd7ffb67c restructure: promote topology to a directory level (single/dual/multi4)
Compose files now live under `<model>/<engine>/compose/<topology>/<file>.yml`,
with topology as a folder rather than a filename prefix. Solves all 7
inconsistencies surfaced in the post-rename audit (single-card composes
without `single-` prefix, unsuffixed `docker-compose.yml` ambiguity,
fine-tunes encoding model name in filename, etc.) by making the directory
hierarchy enforce the convention.

Layout:
  models/<model>/<engine>/compose/<topology>/<feature>.yml

Where:
  - <model>:    qwen3.6-27b, gemma-4-31b
  - <engine>:   vllm, llama-cpp, sglang
  - <topology>: single, dual, multi3, multi4, multi8
  - <feature>:  docker-compose.yml (default) | turbo.yml | dflash.yml | etc.

Each topology subdir has a `docker-compose.yml` for the recommended
starter — bare `cd <topology> && docker compose up` works because
docker compose finds that filename automatically. Variants drop the
`docker-compose.` prefix since they're invoked via `-f` flag.

27 compose file moves total:
- 18 Qwen vLLM composes redistributed across single/dual/multi4
- 2 Qwen llama-cpp composes into single/
- 6 Gemma vLLM composes redistributed across single/dual
- 1 untracked qwopus-bf16mtp moved to dual/

Inside each compose: relative paths to `../patches/` and `../cache/`
bumped to `../../patches/` / `../../cache/`, and `../../../../models-cache`
to `../../../../../models-cache` (one extra `..` for the new depth).

Reference updates across 148 files (BENCHMARKS, all docs, CHANGELOGs,
sibling-table cross-references in compose headers, scripts, patch
READMEs, .github issue templates, tools/residency-instrument).

scripts/switch.sh VARIANTS map updated; tags themselves unchanged
(`vllm/dual` → `dual/docker-compose.yml`, `vllm/dual4` → `multi4/docker-compose.yml`,
`vllm/gemma-mtp` → `gemma-4-31b/.../dual/docker-compose.yml`, etc.).

AGENTS.md "Compose layout" section rewritten to describe the new
hierarchy, with concrete examples and the fine-tune exception
(`dual/carnice-bf16mtp.yml` carries the fine-tune name as a filename
prefix until the fine-tune graduates to its own model directory).

All switch.sh paths verified to resolve to actual files post-move.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-09 12:11:17 +00:00
noonghunnaandClaude Opus 4.7 d33e6f82da composes: rename dual4 → multi4 to align topology prefix with MULTI_CARD.md framing
Documentation distinguishes 1 / 2 / 3+ GPUs as `single` / `dual` /
`multi`, with separate doc pages (SINGLE_CARD.md, DUAL_CARD.md,
MULTI_CARD.md). Compose filename topology prefix should match.

`dual4.yml` was an awkward outlier — it had `dual` in the prefix
but actually meant TP=4 (4-card config). The clean shape: GPU
count is implicit when there's no ambiguity (`single` always 1,
`dual` always 2), and explicit when there is (`multi3` / `multi4`
/ `multi8`).

Renames:
- docker-compose.dual4.yml         → docker-compose.multi4.yml
- docker-compose.dual4-dflash.yml  → docker-compose.multi4-dflash.yml

Registry tags `vllm/dual4` and `vllm/dual4-dflash` in scripts/switch.sh
keep their existing names (backward compat for users running
`bash scripts/switch.sh vllm/dual4`); only the file paths in the
VARIANTS map are updated.

References updated: BENCHMARKS.md, docs/MULTI_CARD.md, docs/UPSTREAM.md,
models/qwen3.6-27b/CHANGELOG.md, models/qwen3.6-27b/vllm/patches/README.md,
sibling-table cross-references in 7 other compose headers.

AGENTS.md "Topology prefix" row tightened: examples now read
`single · dual · multi3 · multi4 · multi8` (dropped `dual-nvlink`
which is actually an interconnect feature suffix; dropped `quad`
which doesn't exist as a name in our convention).

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-09 11:49:44 +00:00
noonghunnaandClaude Opus 4.7 8e605397e0 docs(multi-card): topology-aware pair selection on awkward GPU counts (#49)
@lexhoefsloot's 3× 3090 setup uses CUDA_VISIBLE_DEVICES=1,2 to pin TP=2
to a same-PCIe-switch pair (with GPU 0 doing other work). That selection
pattern wasn't in MULTI_CARD.md — only the TP-table cell mentioning
"CUDA_VISIBLE_DEVICES=0,1" for the 3-card case.

Added a "Picking which cards to use on awkward counts" subsection right
after the valid-TP table covering:

- nvidia-smi topo -m interpretation
- Connectivity classes ranked for TP allreduce
  (NV# > PIX > PXB > PHB > SYS)
- When same-switch (PIX) actually matters (server-class +
  NUMA-aware boards) vs when it doesn't (consumer ATX,
  everything is PHB anyway)
- The override compose pattern for CUDA_VISIBLE_DEVICES=1,2
- Cross-rig cite to @lexhoefsloot's 3-card rig

Refs: #49

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-04 17:00:27 +00:00
noonghunnaandClaude Opus 4.7 b85963033a docs: align bug-report + FAQ + MULTI_CARD with report.sh --full / --soak
After shipping report.sh --full / --soak / --stress flags in 8a29b95, the
bug report flow + troubleshooting guidance still pointed at older patterns.
Updated:

- .github/ISSUE_TEMPLATE/bug-report.yml — replaced single-flag suggestion
  with a "pick the flag that matches your bug" decision table:
    - boot crash / wrong output / tool-call regression → --verify (~2 min)
    - OOM mid-conversation / agentic cliff → --soak (~25 min) — only test
      that catches Cliff 2b
    - TPS regression / cross-rig perf → --bench (~5 min)
    - not sure / capture everything → --full (~35 min)

- docs/FAQ.md "Found a bug — what should I include?" — replaced the generic
  "verify-full.sh output" note with the same flag decision table; updated
  the troubleshooting-ladder pointers to use --verify (boot path) and
  --full (multi-card TQ3+Genesis intersection bugs).

- docs/MULTI_CARD.md cross-rig contribution callouts (×2) — recommended
  command upgraded from --bench to --full (or --bench fallback if soak
  time-budget is tight, with explicit caveat that --bench skips Cliff 2b).

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-04 01:47:10 +00:00
Will HampsonandWhamp e3f8f02047 feat(qwen3.6-27b/vllm): add dual4 + dual4-dflash composes (TP=4, 4×3090, #44)
First 4-card variants for Qwen3.6-27B vLLM. Two new composes for 4× RTX 3090 PCIe rigs:

- `docker-compose.dual4.yml` — TP=4 fp8/MTP baseline. 63 narr / 76 code TPS, 6.77× concurrency at 262K, ~23.5 GB/card peak
- `docker-compose.dual4-dflash.yml` — TP=4 + DFlash spec-decode. 64 narr / 104 code TPS, 2.27× concurrency at 262K, ~22 GB/card peak

Both pass verify-full + verify-stress 7/7 (incl. Cliff 2 needle recall at 58K + 91K) on @Whamp's 4× RTX 3090 PCIe rig. Both pass v2 continuous soak (dual4: 20 sessions, 0 MiB growth, 90.8% TPS retention; dual4-dflash: 5 sessions, 0 MiB growth, 100% TPS retention) — first cross-rig confirmation that TP=4 escapes Cliff 2b.

Closes #26 (4×3090 wishlist).

Co-authored-by: Whamp
2026-05-04 05:26:31 +05:00
noonghunnaandClaude Opus 4.7 75a64a694e docs: add MULTI_CARD.md for 3+ GPU users (derived, untested locally)
Maintainer rig is 2x 3090. Users with 3+ GPUs (4x 3090, 8x A6000,
mixed setups) have been asking "does club-3090 apply?" — yes, but we
can't ship pre-baked configs for hardware we can't validate.

New `docs/MULTI_CARD.md` explains:

- **What scales** going TP=2 → TP=4 → TP=8: per-card weights drop
  proportionally, KV pool grows linearly, Cliff 2 disappears entirely
  on TP=4+ (DeltaNet GDN forward state splits across cards).
- **What doesn't scale**: per-stream decode TPS without NVLink. PCIe
  NCCL all-reduce overhead grows with TP count — TP=4 PCIe per-stream
  may be lower than TP=2. Aggregate concurrent throughput still scales.
- **Valid TP values for Qwen3.6-27B**: 1, 2, 4, 5, 8, 10. Must divide
  both 80 attention heads AND 5 KV heads cleanly. TP=3, 6, 7, 9 do NOT
  work — vLLM errors at boot. Awkward GPU counts (3, 6, 7) need to use
  the next-lower valid TP with idle cards.
- **Derivation recipe**: copy `dual.yml`, change three lines
  (--tensor-parallel-size, --max-num-seqs, --max-num-batched-tokens),
  pick a distinct container_name + port. Marlin pad-sub-tile-n patch
  stays mounted (more relevant at higher TP, not less).
- **What to expect on TP=4** (4x 3090 PCIe): per-card peak ~16-18 GB
  (vs 23.6 GB on TP=2), Cliff 2 doesn't apply, per-stream TPS likely
  drops to ~50-65 narr / ~70-80 code from PCIe NCCL overhead, but KV
  pool 2x larger means more concurrent streams fit.
- **What to expect on TP=8** (server-class): per-card pressure
  essentially disappears. With NVLink fabric, per-stream TPS could
  approach 1.6-1.8x single-card vs the ~1.0x we see on PCIe TP=2.
- **Cross-rig data ask**: TP=4 PCIe, TP=4 with NVLink, TP=8 server-
  class, TP=4 mixed cards. Each is a coverage gap we'd love filled.

Honest disclaimer at the top: nothing in this doc is locally measured,
all derived from documented vLLM TP behavior + our TP=2 baseline +
Marlin pad math. Asks community contributors with 3+ card hardware to
share `bash scripts/report.sh --bench > my-rig.md` results.

Why no pre-baked composes:
1. Can't hardware-test them.
2. Hardware combinations explode (different VRAM, NVLink topology,
   power profiles, allreduce characteristics — no single quad.yml
   optimal for all).
3. Users at this scale are typically experienced — they need
   methodology + constraints + dial, not hand-held tested compose.

If a community member contributes a tested compose for their topology
(verify-stress passing + bench numbers), we ship it under
models/qwen3.6-27b/vllm/compose/ with credit.

Cross-links: README.md "Pick your path" table now includes 3+ GPU row;
DUAL_CARD.md gets a header pointer to MULTI_CARD.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-03 00:01:18 +00:00