Skip to content

EPIC E3 0.72: Don't Leave Behind #3994

Closed as not planned
4 of 9 issues completed
Closed as not planned

Description

@noahgift

owner: aprender-w5032 (re-owned 2026-10-19 by aprender-triage-worker at the cop's word: previous owner session absent; picks up children only as batch constituents after its current timed task)

Spec: APR-EPIC-001 §2 · Epic: E3 · Train: 0.71 · Successor at cut: E7

Theme

Don't Leave Behind

done_when

every (Qwen × quant × verb × backend) cell is Pass or Refused{removed_by}; the universe is read from tensor headers; 0 silent CPU fallbacks under forced accelerator.

Budget

At most 9 open children (docs/roadmaps/epics.yaml). Repo-wide cap 100 open issues; andon at 95.

Absorbs

#3062, #3597

Prior body

Theme: Don't Leave Behind (operator decision, 2026-09-23)

The operator picked scope A: "lets put all into A".

Bar. Every Qwen model that fits on a fleet host works, in every format and quant, through every verb (run / chat / serve / code / qa), on every backend and silicon class. Zero known REDs, no deferred cells, no RED-model exceptions.

Backend / silicon Host Ladder status at 2026-09-23
CUDA sm_89 (RTX 4090) lambda measured, every held model
CUDA sm_121 (GB10) gx10 measured, every held model
CPU x86_64 lambda only the 8 contract rungs. Extend to the full inventory
CPU aarch64 gx10 only the 8 contract rungs. Extend to the full inventory
wgpu (Vulkan) lambda / gx10 not measured by any gate
Apple Silicon (Metal/wgpu + NEON CPU) mac host (TBD, see #3205 mini-m4) no ladder host exists

Out of scope. qwen35moe 35B-A3B (#3977, a new SSM+MoE architecture) goes to a later release (pending operator confirmation). Also out: performance and new features.

Must-carry (0.69.1's known REDs + today's early-ladder findings)

Work to size before committing a date

  1. Probe (first, after the 0.69.1 freeze): the 8 contract rungs through --features wgpu on lambda and on a Mac. Report the red count. This sizes the unmeasured half.
  2. Ladder: a CPU leg for every inventory model, a wgpu backend leg, and a mac host in contracts/model-capability-ladder-v1.yaml.
  3. Release time: CPU legs across the inventory roughly double the sweep, which is 2.5–3 h CUDA-only today. The GPU-lock work (#3986 P1/P3/P5) matters here.
  4. Re-bucket the 187 open issues in this milestone into 0.70 / 0.71 / 0.72 / backlog against this bar (operator approval before any move).

Open decisions

Members not listed above (132, every other open 0.71.0 issue)

Rule (operator 2026-09-24, applied by the cop aprender-cf): a milestone is an epic only if this issue lists its members, and tickets without an epic go to backlog. This list was derived from the milestone's open issues on 2026-09-24 by aprender-dd (#4159).

Parked

Closed over budget (APR-EPIC-001 rule 5). Reopen = pull (rule 7).

Superseded epics

0.7x schedule (release-schedule-07x, 2026-10-08)

Train 0.71.0: plan cut 2026-10-16, tag 2026-10-17 (plan dates, not measured). Report: docs/reports/0.7x-epic-reports.md.

Open children kept in 0.71.0 (owners are proposals; the cop assigns):

Moving to another milestone per the gate-graph walk (triage applies each move):

Activity

  1. added this to the 0.70.0 milestone on Sep 23, 2026
  2. modified the milestones: 0.70.0, 0.71.0 on Sep 23, 2026
  3. changed the title [-]EPIC 0.70.0: Don't Leave Behind — every Qwen, every quant, every verb, on CUDA + CPU + wgpu + Apple Silicon, zero REDs[/-] [+]EPIC 0.71.0: Don't Leave Behind — every Qwen, every quant, every verb, on CUDA + CPU + wgpu + Apple Silicon, zero REDs[/+] on Sep 23, 2026
  4. noahgift commented on Sep 23, 2026

    @noahgift
    MemberAuthor

    Operator decision 2026-09-23: "make .70 fast train". This theme moves to 0.71.0; 0.70.0 is Fast Train (see the new epic).

  5. noahgift commented on Sep 23, 2026

    @noahgift
    MemberAuthor

    Operator decision 2026-09-23: "MOE goes in .71". qwen35moe 35B-A3B (#3977) and MoE across verbs are now IN scope for 0.71.0 (#3977 moved here). This replaces the earlier out-of-scope line.

  6. noahgift commented on Sep 23, 2026

    @noahgift
    MemberAuthor

    Plan posted: PR #4011

    The exit bar is zero RED or DEFER ladder cells. Measured today: 2 hosts, cpu and cuda only, 8 Q4_K_M rungs, inventory patterns that match only Q4_K, and no wgpu or Mac leg in the runner. Quorum: 3 lanes, all gemini (the gpt pool is 429 until about 09-27), so the result is advisory. Nothing is applied: no child issues and no milestone moves. The PR is not armed.

    • Decided:
      • The Mac ladder host is mini-m4.
      • No release date until the wgpu/Mac sizing probe reports.
      • qwen35moe's context goes in context-rungs.json. I overturned the majority because the ladder contract names that file as the single source.
    • The VRAM-budget pilot comes here from 0.70. Ratchet slice 2 is included.
  7. noahgift commented on Sep 23, 2026

    @noahgift
    MemberAuthor

    Interim placement guide = llama.cpp fit, until apr has its own

    Operator ask (2026-09-23, relayed by aprender-cf): what does llama.cpp say this hardware supports, as a guide until apr has its own fitter.

    Method. llama.cpp llama-fit-params built from the same pinned commit as the fleet's llama-server (d1d3c3396), on each host, against each host's own device. llama_params_fit projects memory from GGUF metadata and loads no weights. It uses llama.cpp's defaults: fit to the device's free memory with a 1024 MiB margin, a minimum ctx of 4096, and an f16 KV cache. Each device was checked under gpu-q --prio 1.

    • lambda: RTX 4090, 24,564 MiB. The card was idle at the time: 23,332 MiB free, no compute processes.
    • gx10: GB10, unified memory (122.5 GB host). A small foreign apr process (175 MiB) was resident during the fit pass.

    Every GGUF under ~/models, ~/.apr/models and ~/.cache/apr/models on each host was checked. A file held in two directories counts once, and the 14 names held on both hosts have identical sizes.

    Reading the table.

    • -ngl -1 means every layer is on the GPU.
    • A lower -ngl, or an -ot …=CPU expert list, means partial offload. No model on either host needed it.
    • "ctx cut A→B" means llama.cpp kept every layer on the GPU and reduced the KV context from the trained length A to B to fit.
    • The last column is llama.cpp's own estimate (--fit-print) at the full trained context.
    model file GB lambda (RTX 4090, 24,564 MiB) gx10 (GB10, unified) fitted args lambda / gx10 est. MiB at trained ctx: weights + KV + compute
    Qwen3.5-0.8B-UD-IQ2_XXS 0.34 ✅ full GPU, full trained ctx — not held -c 262144 -ngl -1 / — 312 + 3091 + 489
    Qwen2.5-0.5B-Instruct-IQ3_M 0.34 ✅ full GPU, full trained ctx — not held -c 32768 -ngl -1 / — 321 + 384 + 298
    Qwen2.5-0.5B-Instruct-IQ4_XS 0.35 ✅ full GPU, full trained ctx — not held -c 32768 -ngl -1 / — 327 + 384 + 298
    qwen2.5-coder-0.5b-instruct-q4_k_m 0.49 ✅ full GPU, full trained ctx ✅ full GPU, full trained ctx -c 32768 -ngl -1 / -c 32768 -ngl -1 373 + 384 + 298
    Qwen3.5-0.8B-IQ4_XS 0.49 ✅ full GPU, full trained ctx — not held -c 262144 -ngl -1 / — 459 + 3091 + 489
    Qwen3.5-0.8B-Q4_K_M 0.53 ✅ full GPU, full trained ctx ✅ full GPU, full trained ctx -c 262144 -ngl -1 / -c 262144 -ngl -1 497 + 3091 + 489
    tinyllama-1.1b-chat-v1.0.Q4_K_M 0.67 ✅ full GPU, full trained ctx (trained ctx 2K < 4K) — not held -c 2048 -ngl -1 / — 601 + 44 + 66
    Qwen2.5-0.5B-f16-notemplate 0.99 ✅ full GPU, full trained ctx — not held -c 32768 -ngl -1 / — 942 + 384 + 298
    Qwen2.5-0.5B-Instruct-f16 0.99 ✅ full GPU, full trained ctx — not held -c 32768 -ngl -1 / — 942 + 384 + 298
    Qwen3-1.7B-Q4_K_M 1.11 ✅ full GPU, full trained ctx ✅ full GPU, full trained ctx -c 40960 -ngl -1 / -c 40960 -ngl -1 1050 + 4480 + 300
    qwen2.5-1.5b-instruct-q4_k_m 1.12 ✅ full GPU, full trained ctx ✅ full GPU, full trained ctx -c 32768 -ngl -1 / -c 32768 -ngl -1 934 + 896 + 299
    qwen2.5-coder-1.5b-instruct-q4_k_m 1.12 ✅ full GPU, full trained ctx ✅ full GPU, full trained ctx -c 32768 -ngl -1 / -c 32768 -ngl -1 934 + 896 + 299
    Qwen3-0.6B-bf16-notemplate 1.20 ✅ full GPU, full trained ctx — not held -c 40960 -ngl -1 / — 1137 + 4480 + 298
    Qwen3-0.6B-BF16 1.20 ✅ full GPU, full trained ctx — not held -c 40960 -ngl -1 / — 1137 + 4480 + 298
    Qwen3.5-2B-Q4_K_M 1.28 ✅ full GPU, full trained ctx ✅ full GPU, full trained ctx -c 262144 -ngl -1 / -c 262144 -ngl -1 1211 + 3091 + 493
    Qwen3.5-4B-Q4_K_M 2.74 ✅ full GPU, full trained ctx ✅ full GPU, full trained ctx -c 262144 -ngl -1 / -c 262144 -ngl -1 2603 + 8242 + 495
    Qwen3.5-4B-UD-Q4_K_XL 2.91 ✅ full GPU, full trained ctx ✅ full GPU, full trained ctx -c 262144 -ngl -1 / -c 262144 -ngl -1 2766 + 8242 + 495
    Qwen3.5-2B-BF16 3.78 — not held ✅ full GPU, full trained ctx — / -c 262144 -ngl -1 3590 + 3091 + 493
    qwen2.5-coder-7b-instruct-q4_k_m 4.68 ✅ full GPU, full trained ctx ✅ full GPU, full trained ctx -c 131072 -ngl -1 / -c 131072 -ngl -1 4168 + 7168 + 304
    Qwen3-8B-Q4_K_M 5.03 ✅ full GPU, full trained ctx ✅ full GPU, full trained ctx -c 40960 -ngl -1 / -c 40960 -ngl -1 4455 + 5760 + 304
    Qwen3.5-9B-Q4_K_M 5.68 ✅ full GPU, full trained ctx ✅ full GPU, full trained ctx -c 262144 -ngl -1 / -c 262144 -ngl -1 4861 + 8242 + 501
    Qwen3.5-4B-BF16 8.42 — not held ✅ full GPU, full trained ctx — / -c 262144 -ngl -1 8023 + 8242 + 495
    Qwen3.5-122B-A10B-UD-IQ4_XS (split, 3 shards) 10.51 (shards on disk) ✗ does not load — incomplete split (2 of 3 shards on disk) — not held — / — —
    Qwen3.5-27B-Q4_K_M 16.74 ✅ full GPU, ctx cut 262,144→93,184 ✅ full GPU, full trained ctx -c 93184 -ngl -1 / -c 262144 -ngl -1 15272 + 16533 + 505
    Qwen3-Coder-30B-A3B-Instruct-Q4_0 17.38 ✅ full GPU, ctx cut 262,144→55,296 — not held -c 55296 -ngl -1 / — 16402 + 24576 + 340
    Qwen3.5-35B-A3B-UD-IQ4_XS 17.49 ✅ full GPU, ctx cut 262,144→260,608 — not held -c 260608 -ngl -1 / — 16150 + 5182 + 493
    Qwen3-30B-A3B-Instruct-2507-Q4_K_M 18.56 ✅ full GPU, ctx cut 262,144→43,520 ✅ full GPU, full trained ctx -c 43520 -ngl -1 / -c 262144 -ngl -1 17524 + 24576 + 340
    Qwen3-Coder-30B-A3B-Instruct-Q4_K_M 18.56 ✅ full GPU, ctx cut 262,144→43,776 ✅ full GPU, full trained ctx -c 43776 -ngl -1 / -c 262144 -ngl -1 17524 + 24576 + 340
    qwen2.5-coder-32b-instruct-q4_k_m 19.85 — not held ✅ full GPU, full trained ctx — / -c 131072 -ngl -1 18508 + 32768 + 320

    Not fitted (not GGUF — llama.cpp reads only GGUF): lambda 8 distinct file names, gx10 4 (.apr / .safetensors).

    Findings

    1. Everything that loads fits fully on GPU on both hosts at ctx ≥ 4096. No partial offload anywhere.

    2. On lambda, the 24 GB card is the constraint for the ~17–19 GB models, and it costs context, not layers:

      • Qwen3-30B-A3B and Qwen3-Coder-30B-A3B Q4_K_M: 256K → ~43K.
      • Qwen3-Coder-30B-A3B Q4_0: 256K → 55K.
      • Qwen3.5-27B Q4_K_M: 256K → 91K.
      • Qwen3.5-35B-A3B UD-IQ4_XS (hybrid, small KV) keeps ~255K.

      gx10 runs every model it holds at its full trained context, qwen2.5-coder-32B at 128K included.

    3. Qwen3.5-122B-A10B-UD-IQ4_XS on lambda does not load. Shard 00002-of-00003 is missing from ~/models/UD-IQ4_XS/, an incomplete download. The size shown covers only the shards on disk. This is a file defect, not a capacity verdict. Its fit is unknown until the shard is fetched.

    4. Caveat: this is a free-memory verdict at the time of the run. A card shared with another tenant fits less. The numbers assume llama.cpp's KV and compute layout; apr's KV cache and workspace differ, so treat this as a guide, not an apr measurement.

    5. Not covered: the .apr / .safetensors files. llama.cpp can't read them, so they need apr's own fitter.

    Logs: per-model fit and estimate logs are kept on the fitting session's host (aprender-f5).

  8. noahgift commented on Sep 24, 2026

    @noahgift
    MemberAuthor

    Folded into this epic by issue triage (evidence /mnt/nvme-raid0/cop-inbox/evidence/triage-1623.md). Each row was a separate issue, now closed as folded; reopen any if it needs its own thread:

  9. noahgift commented on Sep 24, 2026

    @noahgift
    MemberAuthor

    Folded into this epic by issue triage (evidence /mnt/nvme-raid0/cop-inbox/evidence/triage-1717.md). Each row was a separate issue, now closed as folded; reopen any if it needs its own thread:

  10. 39 remaining items

  11. modified the milestones: 0.71.0, 0.73.0 on Oct 14, 2026
  12. changed the title [-]EPIC E3 0.71: Don't Leave Behind[/-] [+]EPIC E3 0.72: Don't Leave Behind[/+] on Oct 14, 2026
  13. modified the milestones: 0.73.0, 0.72.0 on Oct 14, 2026
  14. noahgift commented on Oct 14, 2026

    @noahgift
    MemberAuthor

    Retitled after the 0.71 release (v0.71.x shipped; no further 0.71.x). New train: 0.72. Done/total (direct children): 2/9. Open children by milestone: 0.73.0: 5; backlog: 2; . The children outside this train were moved by the 2026-10-14 milestone fix (floor rows F1-F10 stay in 0.72.0).

  15. noahgift commented on Oct 22, 2026

    @noahgift
    MemberAuthor

    tracked in #4381

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    epicEpic — multi-story umbrellaowner:la-0.71Owned by the 0.71 look-ahead slot

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions