# DCP2 extraction from Aiden's production-1.1 image (2026-09-12) Everything needed to port Aiden's DCP2 (decode context parallelism) stack onto our clone-at-pin DSV4.1 tree — extracted from `aidendle94/sparkrun-vllm-dsv41-gb10: production-1.1` (published 2026-09-11T16:54Z; the DCP2 A/B ran on it, report in `recipes/dsv41-flash-4x-aiden11/reports/2026-09-12_003640_aiden11-dcp2-0912.md`). ## A/B verdict first (why this is optional, not urgent) Aiden 1.1 DCP2 (300K ctx, dcp=2, a2a, 8 GiB KV) vs our b12x baseline (512K ctx): | | our b12x (live) | Aiden 1.1 DCP2 | |---|---|---| | score | **167/176** | 158/176 | | pp/tg/TTFT (d0 c1, ms) | **1,642 / 47.0 / 1,738** | 1,517 / 41.8 / 2,446 | | KV | ~2M tokens @512K | **2,518,386 @300K** | DCP2 buys KV capacity / high-concurrency headroom, not quality or single-stream speed. Port it only if we want the 2.5M-token KV on our (fresher) stack. ## What the image contains - Base: `vllm/vllm-openai:nightly-8a728663` — an **older** vLLM tree (before DSV4.1 landed in-tree; it has no `models/deepseek_v4_1/` at all). Aiden's overlay adds the model files + the DCP2 machinery; the 24-file manifest is `/opt/dsv41-dcp2-mounts.txt` (copied to `manifest.txt` here). - FlashInfer: **zero porting work** — our FI pin `07869c61` already ships `csrc/trtllm_dcp_alltoall.cu`, `flashinfer/cake_dcp.py`, and the bench. - DCP CLI: `--decode-context-parallel-size N` (`-dcp`), `--dcp-comm-backend {ag_rs|a2a}` (default ag_rs; the a2a path is the new all-to-all with LSE exchange). Env (image defaults in brackets, all OFF): `DSV41_DCP_STAGE [3]`, `DSV41_DCP_COMBINE [ag_rs]`, `DSV41_DCP_PREFILL_GATHER [0]`, `DSV41_ENGRAM_MMAP [0]`, `DSV41_ENGRAM_PREFETCH [0]` (+MODE/THREADS/... ). ## Contents | path | what | |---|---| | `manifest.txt` | 23 (flat name, vllm-relative target) pairs from the image | | `baked/` | the 23 final (patched) files, `docker cp`'d from site-packages | | `base-theirs/` | the same 16 files at their base commit `8a728663` (GitHub) | | `base-ours/` | the same 23 files at our pin `e47aa780` (GitHub) | | `aiden-dcp2.patch` | their 16-file delta (base-theirs → baked), headers rewritten to `a/vllm/… b/vllm/…` for apply at the vLLM source root | ## Porting assessment (dry-run against our pin, 2026-09-12) | bucket | files | notes | |---|---|---| | clean `git apply` | 12 | communication_op, fused_moe/b12x, weight_utils, v1/attention/backend, mla/compressor_utils, kv_cache_coordinator, kv_cache_interface, cp_utils, gpu/attn_utils, gpu/block_table, gpu/model_runner, dflash/speculator — their base == our tree byte-for-byte | | needs 3-way merge | 4 | `sparse_attn_indexer.py`, `mla/indexer.py`, `mla/sparse_swa.py`, `kv_cache_utils.py` — our pin is newer in these (their base 8a728663 predates our e47aa780 for these paths) | | new-in-their-tree | 7 | `models/deepseek_v4_1/*` (6) + `candidate_blocks.py` — their base has no `deepseek_v4_1` at all; the overlay adds it. Our tree has newer versions in-tree; only the DCP2-specific deltas are wanted (largest: `engram.py` 773 diff lines, `nvidia/flashinfer_sparse.py` 681, `candidate_blocks.py` 254 — cherry-pick from `baked/` vs `base-ours/`, don't adopt wholesale) | **PORTED (2026-09-12, same day).** The full 22-file delta was triaged per-file against our *baked* image state (`baked-ours/`, extracted from `dsv41-flash:local`): every file adopted wholesale — the set is a strict superset. It carries the DCP2 machinery AND independently converged copies of our own fixes (SM12x top-k guard, `get_swa_block_size`, `get_compressed_block_size`, `DSV41_ENGRAM_DISK`, the kai pread thread pool — verified present in their files; their engram.py is our KAI pool refactored into a lazy `_kai_pool()` plus their new mmap/prefetch modes). `weight_utils.py` is byte-identical. The port shipped as a thin wrapper (`docker-images/dsv41-flash-dcp2/`, FROM `dsv41-flash-b12x:local` + one COPY of the 23 final files, symbol-verified at build) + recipe `dsv41-flash-4x-dcp2` (`--decode-context-parallel-size 2 --dcp-comm-backend a2a`, rest = the b12x recipe). **A/B result** (dev65 harness, same 512K/GMU-0.85/DSpark-k5 config, 2026-09-12): | | KV | score | pp/tg/TTFT (d0 c1, ms) | |---|---|---|---| | b12x (no DCP2, record) | ~2M @512K | **167/176 (95)** | 1,642 / 47.0 / 1,738 | | **DCP2 a2a on our tree** | **5,344,235 @512K** | 162/176 (92) | 1,316 / 41.1 / 1,783 | | Aiden 1.1 DCP2 (their stack, 300K) | 2,518,386 | 158/176 (90) | 1,517 / 41.8 / 2,446 | Verdict: DCP2 on our stack costs ~5 quality points and ~13–20% single-stream speed (same trade as on Aiden's stack) in exchange for 5.34M-token KV at 512K — 2.6× our baseline, 2.1× their DCP2 @300K. The variant exists as the high-KV / long-context option; the b12x lane stays the quality/speed baseline. Engine was rock-steady through all 88 scenarios (no sparkring-style death). Fails: TC-68 (all DSV4.1 runs), TC-74, TC-84; TC-51 (failed on plain b12x) passed here. ## Apply procedure (when the day comes) ``` cd git apply --check dcp2/aiden-dcp2.patch # 12 clean, 4 expected failures # merge the 4 manually (per-file diffs inside aiden-dcp2.patch) # cherry-pick the 7 model-file deltas by hand # build with the usual clone-at-pin driver (DCP2 flags stay OFF unless the # recipe sets --decode-context-parallel-size 2 --dcp-comm-backend a2a + envs) ```