Commit Graph

18 Commits

Author SHA1 Message Date
m3ultra
ace4be37ba benchmarks: Hunyuan T1 mx.compile micro gate — parity PASS, 1.04x (GEMM-bound; T3/T4 are the real levers)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 12:40:06 +10:00
m3ultra
fcb5e80702 benchmarks: trellis_mac sparse-conv ablation - Metal flex_gemm = 1.72x end-to-end vs pure-torch fallback
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 00:50:56 +10:00
m3ultra
793f8a88bb benchmarks: m1max studio added to fleet MLX matrix - 7.1 TF, 336 GB/s second-best bandwidth
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 00:35:15 +10:00
m3ultra
ed2ee8dc16 benchmarks: 6-machine fleet MLX matrix — bf16-on-M1 answered, head_dim-64 padding critical on M4/M5
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 00:31:55 +10:00
m3ultra
27564e80eb perfcheck: nightly fleet GPU canary + the contention lessons that shaped it
BENCHMARKS.md says what a model cost the day it was measured; nothing noticed if a
macOS/torch update or a thermal fault halved a node. perfcheck runs the whole fleet
in ~35s off godcheck's 03:30 cron on the m4mini and reports drift into
GODCHECK_LATEST.md.

Probes matmul (fp16/fp32), memory bandwidth, and SDPA at head_dim 64 vs 56 — the
latter turning CorridorKey's fast-path cliff into a permanent canary: it confirms
the padding win fleet-wide (1.96x-5.26x) and tells us if a future torch closes it.
Runs on venvs/rmbg/bin/python, already identical fleet-wide, so nothing new is
installed (nothing lands on the disk-tight m1max).

First cross-machine capability table for all 6 nodes. The M3 Ultra is ~2.2x the M1
Ultra on fp16 matmul, but they share ~625 GB/s — so bandwidth-bound stages run alike
while compute-bound ones scale. Both Ultras reach only ~78% of spec bandwidth on a
single kernel; the smaller Macs hit ~88%.

Measuring a fleet that is doing real work is the whole problem, and naive
benchmarking here is off by 11x:

- min, not median: a concurrent trellis_mac job dragged a median-of-5 matmul from
  ~24500 to ~2150 GFLOP/s, which reads exactly like a catastrophic regression.
- n=4096 not 2048: 2048 is dispatch-bound and swung 48% run-to-run; 4096 reproduces
  to 0.1% even while contended.
- sdpa 16x2048 not 8x1024: sub-ms probes are dispatch noise — 8x1024 gave ratios of
  0.79/3.95/2.35 on three runs of one machine, the first "proving" 56 is faster.
- busy nodes are excluded, not blamed: GPU contention is invisible to load average
  (M3 Ultra read load 2.45 with its GPU pinned), so bench.py samples ioreg GPU% before
  it touches the GPU — our own matmul pins the device, so ordering is the trick.
- baselines are the median of recent history, not a saved best: the M4 Pro also serves
  Ollama and is bimodal (~3200 vs ~5500 fp32), so a best-observed baseline pins to a
  lucky outlier and alerts forever.
- a regression must repeat before it is believed ([~] watching -> [!] CONFIRMED).

Validated by re-running the fleet against its own baselines: zero false alarms,
including a sweep where the M3 Ultra read 43 GB/s under load and was correctly
marked BUSY rather than reported as a 93% regression.

Also found: the m4mini is the only node with Tailscale SSH (RunSSH: true) and it does
NOT propagate remote exit codes — `ssh m4mini "exit 7"` returns 0, so any
`if ssh m4mini ...` test silently always passes. Test on output instead, which is
what godcheck already does (and why it is unaffected). It also cannot ssh to itself,
so run_fleet detects its own tailnet IP and benches the local node via the shell.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 18:03:03 +10:00
m3ultra
26c4cfd099 benchmarks: 8-machine CorridorKey matrix — tiled keys 2048 on the 2020 M1 mini 2026-07-17 15:04:00 +10:00
m3ultra
a6a6d110b2 benchmarks: NEGATIVE result — I2V-synthesized orbits don't reconstruct in 3D
Tested single image -> I2V orbit -> colmap -> brush. COLMAP registered 26/49
frames but triangulated ZERO 3D points (vs 1006 for real iPad footage);
gauge fix failed, 'reconstruction' in 2.4s. Brush still emitted a 190MB .ply
from geometry-free input = garbage.
Cause: the subject isn't rigid (tail dissolves, orb appears, figure morphs).
Video models optimise temporal plausibility, not multi-view consistency.
You cannot synthesize your way out of capture. Documented so it isn't retried.
Also: TI2V-5B 704x704/49f/40steps = 337s.
2026-07-17 02:07:19 +10:00
m3ultra
acec2cc6c5 benchmarks: first M3 Ultra mlx-video/Wan numbers + the auto-tiling SIGKILL gotcha
Wan2.1-T2V-1.3B: 3s @ 832x480/50 steps = 809.6s (denoise 780.7s, 15.6s/step).
Quality genuinely good (coherent 49-frame photoreal fox).
Default --tiling auto SIGKILLs past ~25 frames (bisect: 25f OK, 33f killed) --
NOT memory (4GB RSS, 195GB free, 179GB max_buffer). auto never enables temporal
tiling; fails AFTER denoising. Fix: --tiling aggressive. Plus 3 packaging bugs.
2026-07-17 01:47:48 +10:00
m3ultra
fe0da76016 benchmarks: fleet ablation results — sdpa 4.5x M1 cliff (bf16 innocent), tiled768+compile new best, M4 swap wall 2026-07-16 22:48:50 +10:00
m3ultra
175e1eeac4 benchmarks: CorridorKey MLX Ultra tuning — tiled512+compile patch wins (1.47x M3, best quality, 2.3GB) 2026-07-16 21:38:08 +10:00
m3ultra
1537d94cf7 benchmarks: 4096 hunyuan defaults confirmed fleet-safe (M3 + M1) 2026-07-16 11:11:33 +10:00
m3ultra
06f33be865 pool cpu lane across nodes; hunyuan Studio-quality defaults
runner: gpu AND cpu are now a node pool. Per-node cpu_slots (primary 3,
helpers 2, nodes.json-overridable); net stays primary-only. Python-less ops
(ffmpeg/ffprobe) now run remotely on the node's system python3. Verified: 9
concurrent ffmpeg_frames distributed 4 local / 2 m1 / 2 m4.

hunyuan3d_mlx: default to Studio-quality (octree 384, texture 4096, remesh
120k) — 4096 bake verified watchdog-free on M3 Ultra; big quality gain
(defined face, 120k faces). remesh_faces now a param. All param-overridable.
2026-07-16 10:59:44 +10:00
m3ultra
573afa7b7a hunyuan3d_mlx operator (local MLX image→3D) + cluster docs
- server/operators/hunyuan3d_mlx: native-MLX Hunyuan3D 2.1, both stages, PBR.
  Verified end-to-end on M3 Ultra: 260s total, 40k-face GLB w/ 2048² PBR.
  Weights public (no HF login). Runs on M1 (MLX-native).
- scripts/install_hunyuan3d_mlx.sh: uv py3.11 venv + MLX-path deps.
- CLUSTER.md: local-first policy + M3/M1/M4 fleet roles + central-queue howto.
- BENCHMARKS/README/AGENTS: hunyuan3d_mlx rows + trellis head-to-head.
2026-07-16 10:10:43 +10:00
MODELBEAST
4b73b90625 BENCHMARKS: TRELLIS.2 local working — 289s/~4.8min gen, SOTA quality
trellis_mac verified end-to-end: 18.4MB PBR GLB, clean coherent geometry on a
thin-ringed astrolabe (far beyond SF3D draft quality). ~15GB one-time download
then ~5min cached generation. All three local image->3D paths now live: sf3d
(fast draft), trellis_mac (SOTA local), plus fal cloud tier.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 10:23:37 +10:00
MODELBEAST
c42f066723 flux_local: HF_HUB_DISABLE_XET fix + full local FLUX lineup benchmarks
- run.py: force HF_HUB_DISABLE_XET=1 (xet chunked downloader fails on BFL repos
  with 'Unable to parse string as hex hash value'; HTTP path is reliable)
- BENCHMARKS.md: warm generation times for all 5 local FLUX models on M3 Ultra
  (Klein 4B 9.1s, schnell-4bit 18.5s, Klein 9B 18.7s, schnell 20.4s, dev 108s).
  Verdict: Klein 9B = best hero-asset quality (beats schnell at same speed),
  Klein 4B = volume workhorse.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 00:37:24 +10:00
MODELBEAST
6c54091130 BENCHMARKS: first local-vs-cloud image A/B (Klein 4B vs nano-banana)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 23:27:37 +10:00
MODELBEAST
7c0914f714 BENCHMARKS: first M3 Ultra FLUX.2 Klein 4B numbers — 8s/image at 1024px, 18GB peak
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 22:42:41 +10:00
MODELBEAST
605b1ae347 Phase 1 + framework: settings/secrets, queue lanes, job mgmt, inbox, 8 new operators
Framework:
- server/settings.py: key/value settings + secrets, env-injected into operator
  subprocesses, secret values masked in API and redacted from job logs
- runner: gpu/cpu/net concurrency lanes, job cancel/retry/delete, multi-input,
  graceful 'not installed' error when a tool venv is missing
- db: settings table, asset_ids column (migrated), MODELBEAST_DATA test override
- main: settings + job-action endpoints, inbox watch folder auto-ingest
- store: operators can tag output asset kind (splat, colmap_dataset)

Operators (11 total):
- fal_trellis/trellis2/hunyuan3d/rodin via shared _lib/fal_common.py (verified
  params + endpoint ids; recursive result-URL extractor handles per-endpoint keys)
- sf3d, trellis_mac: local MPS image-to-3D, installed with Metal kernels built,
  gated on owner HuggingFace auth
- colmap_poses (COLMAP 4.x + GLOMAP global mapper), brush_train (native Metal 3DGS)
- Scan pipeline validated end-to-end through the UI: frames -> colmap (48/48
  registered, 0.6px) -> brush -> splat.ply -> in-app SplatViewer

Frontend:
- Settings modal, operator gating (lock + disabled run when requires_env unmet),
  job cancel/retry/delete, Compare grid (multi-select side-by-side viewers),
  SplatViewer (gaussian-splats-3d, Ply format forced for extensionless URLs)

Tooling: scripts/install_{colmap,brush,sf3d,trellis_mac}.sh; vendor/ + venvs/
gitignored; tests/smoke.sh (12 checks passing); BENCHMARKS.md

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 21:42:27 +10:00