RFD 2139: MaskScore QAFT and extraction budget
Problem
The MaskScore extraction pipeline (RFD 1173) needs seven models co-resident on GPU. At published precision (bf16), VoxHammer alone requires 40 GB. QAFT to NF4 is required before extraction can begin. Condition 5 permits this: QAFT makes NF4 the published precision.
Decision
QAFT all seven pipeline models to NF4. Fork each upstream model on HF.
Architecture: forked base with QAFT checkpoint
Each upstream model is forked to chibifire/ on HF. The fork stores:
- the original bf16 weights (upstream copy, for provenance)
- the QAFT’d NF4 checkpoint (merged, the working base)
- future adaptations as LoRAs on the NF4 base
QAFT produces a merged NF4 checkpoint, not a LoRA. The NF4 checkpoint is the new base. Only post-QAFT work (RL, domain adaptation) is stored as LoRA adapters against it.
Models to QAFT
| model | params | bf16 | NF4 est. | where | HF fork |
|---|---|---|---|---|---|
| Qwen3-Omni thinker (30B MoE) | ~30B | ~30 GB | ~9.3 GB | Vast.ai A100 | chibifire/qwen3-omni |
| Qwen3-Omni talker | ~10B | ~10 GB | ~2.5 GB | Vast.ai A100 | (same repo) |
| Wan-VACE | ~14B | ~28 GB | ~8.7 GB | Vast.ai A100 | chibifire/wan-vace |
| Pixal3D (8 subs) | ~4B | ~8 GB | ~2.5 GB | Vast.ai A100 | chibifire/pixal3d |
| VoxHammer | TBD | 40 GB+ | TBD | Vast.ai A100 | chibifire/voxhammer |
| MoGe-3 (ViT-L) | ~300M | ~600 MB | ~190 MB | local Mac | chibifire/moge3 |
| ANNY inverter | small | small | skip | n/a | n/a |
ANNY is a small vertex correspondence fitter; Mitsuba 3 is a physics-based renderer. Neither needs QAFT.
Extraction ladder (Gall’s Law)
Each rung proves the next is worth building.
| rung | trials | rows | GPUs | est. hours | est. cost | proves |
|---|---|---|---|---|---|---|
| -1 | 0 | 0 | 1x A100 80GB | ~8 | ~$12 | QAFT all models to NF4 |
| 0 | 1 | 8 | 1x A100 | minutes | ~$0.03 | extraction script runs, 8 stubs emit |
| 1 | 13 | ~104 | same | ~15 min | ~$0.38 | all 13 task types construct |
| 2 | 130 | ~1040 | same | ~2 hr | ~$3 | scoring separates good from bad |
| 3 | 390 | ~3120 | same | ~6 hr | ~$9 | usable bench set |
| 4 | 12k | ~97k | 9x RTX 3090 | ~8 hr | ~$14 | reward-train complete |
| 5 | 14k | ~210k | 18x RTX 3090 | ~8 hr | ~$29 | all three datasets complete |
Cost summary
| line item | cost |
|---|---|
| QAFT all models to NF4 (rung -1) | ~$12 |
| MoGe-3 QAFT | $0 (local Mac) |
| Rungs 0 through 3 (same A100 session) | ~$13 |
| Rung 4 (9x RTX 3090 spot, 8 hr) | ~$14 |
| Rung 5 (18x RTX 3090 spot, 8 hr) | ~$29 |
| Total | ~$68 |
Vast.ai tear-down discipline
Per the working agreements: commit and push before tear down, then double-check the tear down. The extraction script pushes parquet to HF after each batch, so a torn-down machine loses at most one batch, not the full run.
HF artifacts
| artifact | type | purpose |
|---|---|---|
| chibifire/qwen3-omni | model | bf16 + QAFT NF4 base |
| chibifire/wan-vace | model | bf16 + QAFT NF4 base |
| chibifire/pixal3d | model | bf16 + QAFT NF4 base |
| chibifire/voxhammer | model | bf16 + QAFT NF4 base |
| chibifire/moge3 | model | bf16 + QAFT NF4 base |
| chibifire/maskscore-bench | dataset | evaluation (~2890 rows) |
| chibifire/maskscore-reward-train | dataset | reward model training (~97k) |
| chibifire/maskscore-rl-train | dataset | RL training (~110k) |
What is NOT in this budget
- SpeakingFaces download (already on local compute)
- The reward model training itself (rung 5 produces data, not a model)