diff --git a/BENCHMARKS.md b/BENCHMARKS.md index 40f2e8a..c330595 100644 --- a/BENCHMARKS.md +++ b/BENCHMARKS.md @@ -202,3 +202,28 @@ Verdict: keep (free, safe) but the paint UNet is GEMM-bound — fusion alone is small. The bigger Hunyuan levers are Target 3 (MoE `.item()` sync-tax, −4800 syncs/gen, unlocks whole-DiT compile) and Target 4 (manual→fused SDPA in paint DINO). E2E flag-on-vs-off measurement pending after those. + +## 2026-07-19 — A0 GATE: first end-to-end MLX TRELLIS.2 (Jourloy PR#175 fork, m3ultra) + +Same anatomy image, seed 42, 1024-cascade, tex 2048: + +| path | wall (incl. load) | bake | peak mem | output | +|---|---|---|---|---| +| torch-MPS (trellis-mac) | 248.8 s | 19 s @191K faces | 20.8 GB | 21 MB GLB | +| **mlx-experimental (Jourloy)** | **216.6 s** | 83 s @**2.74M faces** | 75.4 GB | 131 MB PBR GLB | + +**VERDICT: ADOPT — the MLX path BEAT the MPS baseline on wall-clock while +baking 14× the faces.** Key discovery: `mlx-experimental` is a HYBRID — +resolver log shows `Conv backend: flex_gemm; Attention: flex_gemm_sparse_attn`, +i.e. sparse ops still run pedronaugusto's Metal kernels; MLX runs the dense +stages. The feared naive-MLX-sparse-conv path never executes. Model load is +lazy/instant on the MLX side (vs 103 s torch load). + +Quality: geometry excellent at full density; the DARK-PATCH texture defect +REPRODUCES on this second, independent pipeline — both paths share the +pedronaugusto mtldiffrast/BVH texel sampling. Culprit narrowed to those +shared Metal kernels OR the decoded tex attrs; the pure-Python KDTree bake +control (running) decides. fal renders clean with the same weights, so the +attrs are likely fine → Metal sampling is the prime suspect. + +Caveat: 75 GB peak fits both Ultras but check m1 headroom under load.