modelbeast/HARDWARE.md

65 lines
5.7 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 |
| `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) |
| **M4 Pro** | 24 GB | light helper | `bg_remove_local`, `ffmpeg_frames`/`ffprobe`, Ollama 7B too small for the 1828 GB gen models |
## 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).*