🐻 DiffusionBear Research • Apple Silicon Laboratory

MOSS-Image 5B on Apple Silicon: SFT vs DMD Distillation Benchmark

🧩 0. Why MOSS-Image needed a custom pipeline on the Mac

The official MOSS-Image release is a PyTorch/diffusers pipeline written for big NVIDIA GPUs. As shipped, it wants a ~19 GB bf16 Qwen 3.5 9B text encoder, a ~10 GB 5B DiT and an fp32 VAE resident at the same time — about 30 GB, roughly twice what a 16 GB Mac has. A naive port either crashes or falls back to the CPU for the text encoder (~61 s per prompt) and then takes 40+ minutes per image.

DiffusionBear v0.4.1 rebuilds that pipeline stage by stage so it fits a 16 GB M1 and finishes in minutes:

1Virtual Boxes → layout JSONThe boxes you draw on the Studio Canvas are serialized into MOSS's native summary/items layout (abs_centralized, yxyx): background, wordmark, logo slot, captions.0 GB · in-app
2MLX 8-bit text encoderOur own conversion of the exact OpenMOSS Qwen 3.5 9B weights to MLX q8-g64, with Gated-DeltaNet layers kept bf16. Runs on the GPU: ~17 s vs ~61 s on CPU, parity cos 0.9995.~10 GB peak, then freed
3Embedding cache & hand-offThe prompt embedding is cached on disk, the encoder is dropped and the Metal pool cleared before the DiT is loaded — the two giants never share memory.−10 GB before denoise
4DiT + DMD distillationAuto mode picks the adapter from your step count: ≤4 → ⚡ DMD 4 (darask0), ≤8 → ⚡ DMD 8 (lodestones), above → stock CFG. DMD kits fold CFG away: 1 forward per step instead of 2.~10 GB DiT
5Tiled VAE decodeFLUX.2-family VAE decoded in 512 px tiles with cosine blending, so a 1024² poster does not spike memory at the very last second.−4.5 GB at 1024²
Result on a 16 GB M1: the same 768×512 poster goes from ~43 min (stock, 30 steps) to ~13 min (DMD 8) or ~7.5 min (DMD 4) — compare all three below.

🐻 1. One prompt, one seed, three inference pipelines

A single press-kit poster — a structured layout (virtual bounding boxes: alpine-lake background, wortmark, logo slot, version line, engine credits) — was rendered by the same MOSS-Image SFT 5B checkpoint through the three pipelines DiffusionBear supports. Identical seed (1024), identical resolution (768×512), identical layout JSON, identical text-encoder path. Only the sampler schedule and the CFG handling change:

Distillation adapters do not merely skip steps: each arm is a genuinely different sampler (different trajectory family, CFG-free vs CFG-on), like our earlier Krea-2 4/6/8-step finding. All comparisons below must be read as pipeline comparisons, not quality gradations of one pipeline.

2577s
Stock SFT 30 · CFG 3.0
784s
DMD 8-step · CFG-free
449s
DMD 4-step · CFG-free
⚡ Visual Comparator (drag the divider)
Structured layout • 768×512 Seed: 1024
Loading…
Duel: pick any two pipelines MOSS-Image SFT 5B
Right image Right Left image Left
⮜ ⮞

💡 The two styles were generated with identical layout, seed and boxes — only the style description on the background box differs. Drag to compare any two arms side by side.

Pipeline Adapter / LoRA Sampler Steps CFG Transformer / step Vectorial dawn Belle Époque 1900s s/step (avg)
Stock SFT — flow_match_euler_discrete 30 3.0 (+ negative slot) 2 (cond + uncond) 2577.3s 2738.8s ≈85.8 / 91.3
DMD 8-step lodestones-8step moss_dataspace_dmd 8 1.0 (folded) 1 784.0s 859.2s ≈98.0 / 107.4
DMD 4-step darask0-4step moss_dataspace_dmd 4 1.0 (folded) 1 449.4s 502.9s ≈112.4 / 125.7*

🔬 2. What every arm shared

🚀 Practical takeaways

In-app, DiffusionBear auto-selects the DMD adapters for runs ≤ 8 steps (4 → darask0, 5–8 → lodestones) and keeps stock trajectories above. For poster work where text on the layout matters most, the 30-step stock arm renders the most stable lettering; for fast iteration the 4-step arm is 5.7× cheaper. All arms run 100% locally, offline, on a single 16 GB M1 — no cloud, no subscription.