docs: surface Gemma 4 31B + add at-a-glance profile schemas to canonical composes

Gemma 4 31B has been production-ready on dual 3090 since 2026-05-08 (5
shipped composes, full benched data in BENCHMARKS.md, disc #67 thread
posted) but the user-facing surfaces still framed the stack as
Qwen3.6-only. This commit fixes that without renaming any compose files
(Option A: document, don't rename — keeps backward compat with external
GitHub issue/disc references to specific filenames).

Changes:

1. README.md "Supported models" — add Gemma 4 31B row alongside Qwen3.6
   with dual-card-only caveat (single-card boots OOM on Ampere 24 GB
   even at 8K ctx; needs 32 GB+ — validated on RTX 5090 by @apnar).

2. docs/DUAL_CARD.md
   - Split TL;DR into two model sections (Qwen3.6-27B + Gemma 4 31B)
   - Added 6 Gemma config rows: gemma-mtp.yml (32K balanced),
     gemma-mtp-int8.yml (262K + multi-stream variant), gemma-dflash.yml
     (peak code TPS 105/177), gemma-dflash-int8.yml (262K code-optimal,
     gated on PR #42102), gemma-awq.yml (118K AWQ-4bit weights)
   - "Models supported on dual 3090" expanded with substantive Gemma entry
   - "Deep dives" split into per-model + cross-cutting sections,
     adds Gemma model README + disc #67 link

3. Profile schema header added to 8 canonical composes for at-a-glance
   scanning — every compose now declares Model / Topology / Drafter /
   KV / Vision / Max ctx / Genesis / Best-for in a structured comment
   block before the existing free-form description:
   - Qwen: dual.yml, dual-turbo.yml, dual-dflash.yml, dual-dflash-noviz.yml
   - Gemma: gemma-mtp.yml, gemma-mtp-int8.yml, gemma-mtp-tp1.yml,
     gemma-dflash.yml

Schema added to remaining composes (gemma-awq, gemma-dflash-int8, plus
15 Qwen variants) in follow-up commits.

Refs: noonghunna/club-3090#67

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
This commit is contained in:
noonghunna
2026-05-09 11:13:05 +00:00
co-authored by Claude Opus 4.7
parent fa9df49ef2
commit 4d7356aac6
10 changed files with 115 additions and 5 deletions
+3
View File
@@ -43,6 +43,9 @@ Each hardware page lists every supported model with the working composes for tha
| Model | Status | Card counts | Engines | Highlights |
|---|---|---|---|---|
| **[Qwen3.6-27B](models/qwen3.6-27b/)** | Production-ready ⭐ | 1× / 2× 3090 | vLLM ✅ · llama.cpp ✅ · SGLang ❌ blocked | Vision · tools · MTP n=3 · up to 262K ctx · vLLM dual = 89/127 TPS · llama.cpp single = full 262K, no prefill cliffs |
| **[Gemma 4 31B](models/gemma-4-31b/)** | Production-ready (dual-card only on Ampere 24 GB) | 2× 3090 only ¹ | vLLM ✅ · llama.cpp ❌ · SGLang ❌ | Vision · tools · MTP n=3 (Google official drafter) **OR** DFlash n=7 (z-lab drafter) · up to 262K ctx via INT8 PTH KV (PR [#40391](https://github.com/vllm-project/vllm/pull/40391) vendored) · MTP dual = 106/141 TPS at 32K, 95/126 at 262K · DFlash dual = 105/177 TPS at 32K (code-optimal), 87/146 at 262K via [PR #42102](https://github.com/vllm-project/vllm/pull/42102) (our patch, OPEN) |
¹ Single-card boot OOMs on Ampere 24 GB regardless of KV format (weights + drafter + profiling at 8K ctx leaves no KV pool). Single-card Gemma 4 is feasible on 32 GB+ GPUs (validated on RTX 5090 32 GB by [@apnar](https://github.com/noonghunna/club-3090/discussions/67#discussioncomment-16832042)).
More models coming. The repo structure scales — when we add Qwen3.5-27B / GLM-4.6 / etc., they go under `models/<name>/` with the same internal pattern.
+29 -3
View File
@@ -8,6 +8,8 @@ You have **2× RTX 3090s, PCIe-only (no NVLink)**. This page is the front door f
## TL;DR — pick by workload
### Qwen3.6-27B (default model, also runs single-card)
| What you're doing | Compose | Max ctx | Narr / Code TPS | VRAM per card | Why |
|---|---|---|---|---|---|
| **Hermes agentic fine-tune** (Carnice tool specialization) | [`carnice-bf16mtp.yml`](../models/qwen3.6-27b/vllm/compose/docker-compose.carnice-bf16mtp.yml) | **262K** | **72 / 80** | ~22.3 / 24 GB | BF16 MTP overlay. Hermes-style assistant. Available on HF: [wasifb/Carnice_V2_27B_INT4_BF16MTP](https://huggingface.co/wasifb/Carnice_V2_27B_INT4_BF16MTP) |
@@ -16,6 +18,19 @@ You have **2× RTX 3090s, PCIe-only (no NVLink)**. This page is the front door f
| Peak code TPS with vision | [`dual-dflash.yml`](../models/qwen3.6-27b/vllm/compose/docker-compose.dual-dflash.yml) | **185K** | **82 / 125** | ~23.6 / 24 GB | DFlash N=5 + 1.75 GB draft per card, AL ~4.4 (vs MTP's 3.4) |
| Peak code TPS, no vision | [`dual-dflash-noviz.yml`](../models/qwen3.6-27b/vllm/compose/docker-compose.dual-dflash-noviz.yml) | **200K** | **78 / 127** | ~23.8 / 24 GB | DFlash + no vision, +15K ctx vs dual-dflash |
### Gemma 4 31B (dual-card only on Ampere 24 GB ¹)
| What you're doing | Compose | Max ctx | Narr / Code TPS | VRAM per card | Why |
|---|---|---|---|---|---|
| General-purpose default (vision + tools + 32K ctx) | [`gemma-mtp.yml`](../models/gemma-4-31b/vllm/compose/docker-compose.gemma-mtp.yml) ⭐ | 32K | **106 / 141** | ~22 / 24 GB | bf16 KV, MTP n=3 (Google's official `gemma-4-31B-it-assistant` drafter). PR [#41745](https://github.com/vllm-project/vllm/pull/41745) merged upstream. |
| Long-context default (262K ctx, balanced TPS) | [`gemma-mtp-int8.yml`](../models/gemma-4-31b/vllm/compose/docker-compose.gemma-mtp-int8.yml) | **262K** | **95 / 126** | ~22.1 / 24 GB | INT8 PTH KV via vendored PR [#40391](https://github.com/vllm-project/vllm/pull/40391) overlay. **8.2× context lift** for ~10% TPS cost. NIAH PASS at 137K. |
| Multi-stream long-context (3.6× concurrency at 98K) | [`gemma-mtp-int8.yml`](../models/gemma-4-31b/vllm/compose/docker-compose.gemma-mtp-int8.yml) (override `MAX_NUM_SEQS=4`) | 98K | **96 / 127** per-stream | ~22.2 / 24 GB | INT8 PTH KV pool 354K tokens → 3.6× concurrency. |
| Peak code TPS with vision | [`gemma-dflash.yml`](../models/gemma-4-31b/vllm/compose/docker-compose.gemma-dflash.yml) | 32K | **105 / 177** | ~22.3 / 24 GB | z-lab Gemma 4 DFlash drafter, n=7. **+18% code TPS over MTP** (177 vs 141). bf16 KV. |
| Long-context code-optimal (262K + DFlash) | [`gemma-dflash-int8.yml`](../models/gemma-4-31b/vllm/compose/docker-compose.gemma-dflash-int8.yml) ⚠️ | **262K** | **87 / 146** | ~22.0 / 24 GB | DFlash drafter + INT8 PTH KV target via vLLM PR [#42102](https://github.com/vllm-project/vllm/pull/42102) (our patch — currently OPEN). **+16% code TPS at 262K vs `gemma-mtp-int8.yml`** (146 vs 126). Boots after #42102 lands or with the vendored vllm-src override mounts. |
| Multi-tenant agent fleet (118K + AWQ-4bit weights) | [`gemma-awq.yml`](../models/gemma-4-31b/vllm/compose/docker-compose.gemma-awq.yml) | 118K | **101 / 142** | ~19.8 / 24 GB | AWQ-4bit weights (`cyankiwi/gemma-4-31B-it-AWQ-4bit`) — bypasses PR #40391's per-token-head bug entirely. NIAH PASS at 88K. |
¹ Single-card boot OOMs on Ampere 24 GB regardless of KV format. Single-card Gemma 4 is feasible on 32 GB+ GPUs (validated on RTX 5090 32 GB by [@apnar](https://github.com/noonghunna/club-3090/discussions/67#discussioncomment-16832042) — 160/215 TPS at 32K MTP, 150/261 at 12K DFlash). Tracked in [`docs/UPSTREAM.md`](UPSTREAM.md) row 78 + [#67](https://github.com/noonghunna/club-3090/discussions/67).
> **VRAM column is per-card** under TP=2 (each card holds half the weights + half the KV; both cards' totals are nearly identical). For a 2× 20 GB rig (e.g. 2× 3080-20GB / 40 GB combined), `dual.yml` and `dual-turbo` should fit; `dual-dflash*` won't (FP16 KV + DFlash draft pushes per-card past 20 GB). Component breakdown in [`tools/charts/gen-vram.py`](../tools/charts/gen-vram.py).
Run any of these via `bash scripts/launch.sh` (interactive) or `bash scripts/switch.sh <variant>`.
@@ -197,17 +212,28 @@ Code TPS held within bench variance across all 4 variants — no v0.20 regressio
## Models supported on dual 3090
- **[Qwen3.6-27B](../models/qwen3.6-27b/)** — primary model. Quant choices, Genesis patch surface (single-card), engine internals all in the model directory.
- More models coming. As they're added, this section will list which dual-card configs each one supports.
- **[Qwen3.6-27B](../models/qwen3.6-27b/)** — primary model. Runs single-card AND dual-card. Quant choices (AutoRound INT4, GGUF Q3_K_XL / Q4_K_M), Genesis patch surface (mostly single-card relevant), engine internals all in the model directory.
- **[Gemma 4 31B](../models/gemma-4-31b/)** — dual-card only on Ampere 24 GB (single-card boot OOMs even at 8K ctx; needs 32 GB+ per card). Two drafter paths (MTP via Google's official `gemma-4-31B-it-assistant` + DFlash via z-lab) × two KV strategies (bf16 / 32K vs INT8 PTH / 262K) + AWQ-4bit-weights variant. Genesis doesn't apply (Genesis patches are Qwen3-Next-specific).
As more models land, they'll show up here with their dual-card compose set.
---
## Deep dives
### Qwen3.6-27B
- **[Model README](../models/qwen3.6-27b/)** — quant choices (AutoRound INT4 / GGUF), Genesis patch surface (mostly single-card relevant), what's working / what's not.
- **[INTERNALS.md](../models/qwen3.6-27b/INTERNALS.md)** — engineering rationale: AutoRound vs GPTQ, DFlash forensics, Marlin pad fork, MTP, upstream tracker.
- **[VRAM allocation diagram](../models/qwen3.6-27b/README.md#vram-allocation-across-configs)** — full per-config breakdown across single + dual.
### Gemma 4 31B
- **[Model README](../models/gemma-4-31b/)** — quants (BF16 source, AWQ-4bit, INT8 PTH KV via PR #40391 vendored overlay), drafter options (MTP / DFlash), upstream PR tracker.
- **[Discussion #67](https://github.com/noonghunna/club-3090/discussions/67)** — first Ampere consumer cross-rig data thread. MTP, DFlash, INT8 PTH long-context, single-card 5090 numbers.
### Cross-cutting
- **[FAQ.md](FAQ.md)** — common questions (NVLink? AMD/Intel? Why fp8 not TQ3 on dual.yml? etc.).
- **[EXAMPLES.md](EXAMPLES.md)** — Python / TS / curl client snippets + IDE connection settings.
- **[HARDWARE.md](HARDWARE.md)** — Ampere SM 8.6 specifics, NVLink (declined), power caps, PCIe topology.
- **[SINGLE_CARD.md](SINGLE_CARD.md)** — when one card is enough.
- **[CLIFFS.md](CLIFFS.md)** — single-card Cliff 1 / Cliff 2 mechanisms (mostly Qwen3-Next-specific; Gemma 4 doesn't have these because it's dense attention without DeltaNet).
- **[UPSTREAM.md](UPSTREAM.md)** — every upstream PR / issue we filed or watch (vLLM, Genesis, lucebox-hub, transformers, llama.cpp, SGLang).
- **[SINGLE_CARD.md](SINGLE_CARD.md)** — when one card is enough (Qwen3.6-27B only — Gemma 4 needs ≥32 GB single-card).
@@ -1,5 +1,15 @@
# ===========================================================================
# Gemma-4-31B-it (Intel AutoRound INT4) + Google MTP "assistant" drafter
# Profile (at-a-glance):
# Model: Gemma 4 31B (Intel AutoRound INT4)
# Topology: Dual 3090 PCIe (TP=2, no NVLink)
# Drafter: z-lab Gemma 4 DFlash n=7 (block-diffusion drafter, vLLM PR #41703 vendored overlay)
# KV: bfloat16 (forced for drafter compatibility)
# Vision: yes
# Max ctx: 32K (BF16 ceiling — for 262K code-optimal use gemma-dflash-int8.yml)
# Genesis: N/A — Genesis is Qwen3-Next-specific
# Best for: Peak code TPS on Gemma 4 (105/177 — +18% code over MTP) ⭐
# ---------------------------------------------------------------------------
# Gemma-4-31B-it (Intel AutoRound INT4) + z-lab Gemma 4 DFlash drafter
# 2× RTX 3090 TP=2 + bfloat16 KV + 32K ctx + 4 streams.
#
# Status: COMMUNITY-CONTRIBUTED, EXPERIMENTAL.
@@ -1,4 +1,14 @@
# ===========================================================================
# Profile (at-a-glance):
# Model: Gemma 4 31B (Intel AutoRound INT4)
# Topology: Dual 3090 PCIe (TP=2, no NVLink)
# Drafter: MTP n=3 (Google's official `gemma-4-31B-it-assistant`, BF16 0.5B)
# KV: int8_per_token_head (1 byte/token, via vendored PR #40391 overlay)
# Vision: yes
# Max ctx: 262K (8.2× over bf16 ceiling) — override MAX_NUM_SEQS=4 for 98K + 3.6× concurrency
# Genesis: N/A — Genesis is Qwen3-Next-specific
# Best for: Gemma 4 long-context default — full 262K ctx ⭐
# ---------------------------------------------------------------------------
# Gemma-4-31B-it (Intel AutoRound INT4) + Google MTP "assistant" drafter
# 2× RTX 3090 TP=2 + per-token-head INT8 KV + ~120K ctx target.
#
@@ -1,6 +1,17 @@
# ===========================================================================
# Profile (at-a-glance):
# Model: Gemma 4 31B (Intel AutoRound INT4)
# Topology: Single 3090 (TP=1) — ⚠️ BOOT-OOMs on 24 GB Ampere; for 32 GB+ only
# Drafter: MTP n=3 (Google's official `gemma-4-31B-it-assistant`)
# KV: bfloat16 (fp8 dispatch blocked on Ampere — Triton fp8e4nv unsupported on sm_86)
# Vision: yes
# Max ctx: ~16K (theoretical) — boot fails before serving on 24 GB
# Genesis: N/A — Genesis is Qwen3-Next-specific
# Best for: Single-card 32 GB+ GPUs (RTX 5090 32 GB validated by @apnar disc #67)
# For 24 GB Ampere, use gemma-mtp.yml (dual-card) instead.
# ---------------------------------------------------------------------------
# Gemma-4-31B-it (Intel AutoRound INT4) + Google MTP "assistant" drafter
# 2× RTX 3090 TP=2 + bfloat16 KV + 32K ctx + 4 streams.
# Single-card TP=1 + bfloat16 KV — preserved for 32 GB+ GPUs (5090, A6000).
#
# Status: COMMUNITY-CONTRIBUTED, EXPERIMENTAL.
# First Ampere consumer cross-rig data on Google's Gemma 4 MTP drafters
@@ -1,4 +1,14 @@
# ===========================================================================
# Profile (at-a-glance):
# Model: Gemma 4 31B (Intel AutoRound INT4)
# Topology: Dual 3090 PCIe (TP=2, no NVLink) — single-card boot-OOMs on 24 GB
# Drafter: MTP n=3 (Google's official `gemma-4-31B-it-assistant`, BF16 0.5B)
# KV: bfloat16 (2 bytes/token)
# Vision: yes
# Max ctx: 32K (BF16 ceiling — for 262K use gemma-mtp-int8.yml)
# Genesis: N/A — Genesis is Qwen3-Next-specific
# Best for: Gemma 4 dual-card default — vision + tools + balanced TPS ⭐
# ---------------------------------------------------------------------------
# Gemma-4-31B-it (Intel AutoRound INT4) + Google MTP "assistant" drafter
# 2× RTX 3090 TP=2 + bfloat16 KV + 32K ctx + 4 streams.
#
@@ -1,4 +1,14 @@
# ===========================================================================
# Profile (at-a-glance):
# Model: Qwen3.6-27B (Lorbus AutoRound INT4 + BF16 mtp.fc preserved)
# Topology: Dual 3090 PCIe (TP=2, no NVLink)
# Drafter: z-lab DFlash N=5 (block-diffusion drafter)
# KV: fp8_e5m2 (forced bf16 for drafter via --dtype bfloat16)
# Vision: no (vision tower dropped — frees ~0.5 GB/card for ctx)
# Max ctx: 200K (+15K vs dual-dflash.yml)
# Genesis: none — DFlash drafter handles spec-decode independently
# Best for: Peak code TPS, no-vision, with extra context headroom ⭐
# ---------------------------------------------------------------------------
# Dual-card DFlash text-only — TP=2 + DFlash N=5 + 200K ctx + NO vision.
#
# vs `docker-compose.dual-dflash.yml` (the with-vision variant): drops MoonViT
@@ -1,4 +1,14 @@
# ===========================================================================
# Profile (at-a-glance):
# Model: Qwen3.6-27B (Lorbus AutoRound INT4 + BF16 mtp.fc preserved)
# Topology: Dual 3090 PCIe (TP=2, no NVLink)
# Drafter: z-lab DFlash N=5 (block-diffusion drafter)
# KV: fp8_e5m2 (forced bf16 for drafter via --dtype bfloat16)
# Vision: yes
# Max ctx: 185K
# Genesis: none — DFlash drafter handles spec-decode independently
# Best for: Peak code TPS with vision (AL ~4.4 vs MTP's 3.4) ⭐
# ---------------------------------------------------------------------------
# Dual-card DFlash — TP=2 + DFlash N=5 spec-decode + 185K ctx + vision.
#
# The peak-single-stream code TPS variant. DFlash N=5 (z-lab's Qwen3.6-27B
@@ -1,4 +1,14 @@
# ===========================================================================
# Profile (at-a-glance):
# Model: Qwen3.6-27B (Lorbus AutoRound INT4 + BF16 mtp.fc preserved)
# Topology: Dual 3090 PCIe (TP=2, no NVLink)
# Drafter: MTP n=3 (built-in)
# KV: turboquant_3bit_nc (TQ3, 0.375 bytes/token)
# Vision: yes
# Max ctx: 262K
# Genesis: v7.72.2 (PN59 streaming-GDN + PN34 workspace-lock-relax + PN12)
# Best for: Multi-tenant agent fleet — 4 streams at full ctx (4.67× concurrency vs dual.yml) ⭐
# ---------------------------------------------------------------------------
# Dual-card Turbo — TP=2 + TurboQuant KV (turboquant_3bit_nc) + MTP n=3 + Genesis v7.69 dev.
#
# 2026-05-02 PM note: setup.sh now pins Genesis to v7.69 (commit 2db18df) which
@@ -1,4 +1,14 @@
# ===========================================================================
# Profile (at-a-glance):
# Model: Qwen3.6-27B (Lorbus AutoRound INT4 + BF16 mtp.fc preserved)
# Topology: Dual 3090 PCIe (TP=2, no NVLink)
# Drafter: MTP n=3 (built-in)
# KV: fp8_e5m2 (1 byte/token)
# Vision: yes
# Max ctx: 262K (237K single-prompt verified)
# Genesis: none — intentionally Genesis-free (isolation control + fallback)
# Best for: General-purpose dual-card vision + tools + long-ctx default ⭐
# ---------------------------------------------------------------------------
# Dual RTX 3090 — DEFAULT for 2× cards. Qwen3.6-27B + MTP n=3 + fp8 KV + vision.
#
# What this gives you (vs the single-card default):