modelbeast/HARDWARE.md
type-two b3de1a4e35 docs(fleet): add m2max gen node; m4pro is capability-capped not hands-off
m2max (96GB/4TB, added 2026-08-03): second bf16/trellis box, runs trellis_mac
+ trellis2_mlx. m4pro corrected to 26GB and hands-on.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-24 11:53:28 +10:00

71 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MODELBEAST hardware guide — what runs on which Mac
Which Apple Silicon Mac can run which operator, by **unified memory (RAM)**. Numbers below are *measured on the M3 Ultra* unless marked *(est.)*; peak = peak unified memory during a run.
## How to read this
- **Unified memory is the gate.** CPU and GPU share one pool. A model's *peak* must fit in `RAM ~3-5GB` (macOS + apps). For comfort without swapping, want peak **+ 8-12GB** headroom. Swapping = usable but slow.
- **Chip tier = speed, not fit.** An M1 Max 64GB *runs* the same models as an M3 Max 64GB, just slower. Rough per-generation speed: **Ultra > Max > Pro > base**, and **M5 > M4 > M3 > M2 > M1** per core. Our M1 Ultra runs the 3D stack at ~2× the M3 Ultra's time — fine for throughput, not for latency.
- **`net` operators run on *any* Mac** — an 8GB M1 mini is a perfectly good node for `fal_*` / `openrouter_image`, because the compute is in the cloud. Same for light `cpu` ops.
- **bf16 caveat (M1/M2):** M1 (and to a lesser extent M2) lack full hardware bf16. `trellis_mac` (torch-MPS, bf16) is **unverified on M1/M2 — treat as M3+**. `hunyuan3d_mlx` is fp16 MLX and runs fine on every Apple Silicon Mac with the RAM.
- **You can push the GPU memory ceiling** with `sudo sysctl iogpu.wired_limit_mb=<MB>` (e.g. raise a 128GB box's GPU cap toward ~120GB). Helps the largest models on Ultra/Max.
## Per-operator memory (sorted light → heavy)
| Operator | Lane | Weights | Peak RAM | Min Mac | Recommended | Notes |
|---|---|---|---|---|---|---|
| `fal_*`, `openrouter_image` | net | 0 | ~0 | **8 GB** | 8 GB | cloud compute; RAM irrelevant |
| `ffprobe` | cpu | 0 | <1 GB | 8 GB | 8 GB | trivial |
| `ffmpeg_frames` | cpu | 0 | <1 GB | 8 GB | 8 GB | frame extraction |
| `blender_convert` | cpu | 0 | 14 GB *(est.)* | 8 GB | 16 GB | needs Blender installed |
| `colmap_poses` | cpu | 0 | 28 GB *(scales w/ #images)* | 8 GB | 16 GB | needs COLMAP+GLOMAP |
| `bg_remove_local` (RMBG-2.0) | gpu | 0.8 GB | ~3 GB *(est.)* | **8 GB** | 16 GB | light; great first-step everywhere |
| `sf3d` | gpu | 3.7 GB | **~9 GB** | 16 GB | 24 GB | ~5s draft mesh |
| `seedvr2_upscale` | gpu | 6.8 GB | ~812 GB *(est.)* | 16 GB | 24 GB | image upscale |
| `hunyuan3d_mlx` INT4/INT8 *(self-convert)* | gpu | 1.63 GB | ~410 GB | **16 GB** | 1624 GB | fits small Macs; see [Hunyuan guide](vendor/hunyuan3d-mlx/HARDWARE.md) |
| `flux_local` Klein 4B *(default)* | gpu | 15 GB | **18.0 GB** | 24 GB | 32 GB | 9s image, the volume workhorse |
| `flux_local` schnell-4bit | gpu | 8.9 GB | **19.1 GB** | 24 GB | 32 GB | fast FLUX.1 draft |
| `hunyuan3d_mlx` fp16 *(our default, 4096/120k)* | gpu | 13 GB | **20.2 GB** | 24 GB *(tight)* | 32 GB | Stage 1 alone ~10 GB; both stages ~20 GB |
| `trellis_mac` | gpu | 14 GB | ~1518 GB | 24 GB | 32 GB | **M3+ (bf16)**; SOTA local mesh |
| `wan_video` 5B q8 (832×480×49f) | gpu | 18 GB | **9.2 GB** RSS | 16 GB *(tight)* | 32 GB | measured on M3 Ultra AND M2 Max 2026-08-04, identical RSS; scales with res/frames use `--tiling aggressive` on big jobs. MLX cache will *opportunistically* balloon into free RAM (81 GB footprint seen on 96 GB box) that's cache, not demand |
| `ardy_motion` (textmotion) | gpu | 15.6 GB | **~22 GB** | 32 GB | 48 GB | Llama-3-8B text encoder is ~14.5 GB of it; motion model sub-GB. First job per boot pays ~12 min load |
| `flux_local` FLUX.1 dev | gpu | 31 GB | **25.1 GB** | 32 GB | 48 GB | cinematic, ~2 min |
| `flux_local` Klein 9B | gpu | 32 GB | **28.4 GB** | 36 GB | 48 GB | best object accuracy in the lineup |
| `mflux_image_edit` (Qwen-Image-Edit) | gpu | 54 GB | ~3040 GB *(est.)* | 48 GB | **64 GB+** | the heavyweight local editor |
| `brush_train` (3DGS) | gpu | 0 | scales w/ scene | 16 GB | 32 GB | Gaussian-splat training |
## What each Mac can do, by RAM
| RAM | Realistic role | Runs |
|---|---|---|
| **8 GB** (M1/M2/M3 base) | cloud + light node | all `net` ops, `ffmpeg`/`ffprobe`, `bg_remove_local`, a 34B Ollama LLM. *That's a genuinely useful fleet node.* |
| **16 GB** (base/Pro) | light local gen | above + `sf3d`, `seedvr2_upscale`, `colmap`, Hunyuan **INT4/INT8**, 78B Ollama. FLUX/fp16-Hunyuan/trellis won't fit. |
| **24 GB** (M2/M3 base, M4 Pro) | entry real-gen | above + `flux_local` **Klein 4B**, `hunyuan3d_mlx` fp16 *(tight)*, `trellis_mac` *(M3/M4 only)*. The practical floor for the full local 3D + image stack. |
| **32 GB** (Pro/Max) | comfortable all-round | the whole core stack with headroom: Klein 4B, hunyuan fp16 4096, trellis, FLUX dev. |
| **3648 GB** (Max) | hero-tier images | + FLUX.1 **dev**, FLUX.2 **Klein 9B** (the accuracy king). |
| **64 GB** (Max/Ultra) | everything but the giant | + `mflux_image_edit` (Qwen 54 GB) comfortably; run two mid models resident. |
| **96128 GB** (Ultra) | multi-model resident | several big models loaded at once; our **M1 Ultra 128 GB** tier runs it all (mind the bf16 caveat for trellis). |
| **192256 GB+** (Ultra) | the flex | every operator + a big local LLM (70B235B) resident alongside our **M3 Ultra 256 GB** primary. |
## Our fleet, mapped
| Node | RAM | Tier | What it serves |
|---|---|---|---|
| **M3 Ultra** | 256 GB | the flex | everything + primary/queue |
| **M1 Ultra** | 128 GB | multi-model | `hunyuan3d_mlx` (MLX-native), FLUX, sf3d, RMBG, cpu ops *not* trellis (bf16 unverified) |
| **M2 Max** (m2max) | 96 GB | multi-model | `flux_local`, `hunyuan3d_mlx`, **`trellis_mac`** + **`trellis2_mlx`**, `sf3d`, `seedvr2_upscale`, `mflux_image_edit`, `bg_remove_local`, cpu ops. M2 = real bf16, so it *can* do trellis (the M1s can't). 4 TB disk the fleet's model-storage box. Laptop, often asleep |
| **M1 Max** (studio) | 32 GB | second gen node | `flux_local` (Klein 4B), `hunyuan3d_mlx` (fp16), `bg_remove_local`, `ffmpeg`/`ffprobe` *not* trellis (M1 bf16); ~2× M3 time. Shared audio box |
| **M4 Pro** | 26 GB | light helper | `bg_remove_local`, `ffmpeg_frames`/`ffprobe`, Ollama 7B too small for the 1828 GB gen models |
| **M4 mini** | 16 GB | light helper | `bg_remove_local` + cpu ops too small for FLUX/fp16-hunyuan/trellis |
| **M1 mini** | 8 GB | cloud+light node | `bg_remove_local`, `ffmpeg`/`ffprobe`-class, `net` ops the cheapest-useful tier |
## Buying / sizing rules of thumb
- **Cheapest useful node:** any **8 GB** Apple Silicon cloud + ffmpeg + background-removal + small LLM.
- **Cheapest *real* local-gen box:** **24 GB** (M4 Pro mini / M2-M3 24 GB) Klein 4B images + local 3D.
- **Sweet spot for one do-everything machine:** **3248 GB M-series Max** the entire core stack, hero images, both local 3D models, comfortably.
- **Want Qwen image-edit or multiple big models resident:** **64 GB+**.
- **M1 owners:** prefer `hunyuan3d_mlx` over `trellis_mac` for local 3D (bf16). Everything MLX (FLUX via mflux, hunyuan) is first-class on M1.
*Fleet policy + queue routing: [CLUSTER.md](CLUSTER.md). Measured benchmarks: [BENCHMARKS.md](BENCHMARKS.md). Hunyuan-specific RAM tiers: [vendor/hunyuan3d-mlx/HARDWARE.md](vendor/hunyuan3d-mlx/HARDWARE.md).*