Skip to content

v0.18.1 — Metal stability + MLX buffer-floor fixes

Choose a tag to compare

@mrothroc mrothroc released this 03 May 23:06

v0.18.1 is a stability follow-up to v0.18.0 for the Apollo-protocol gated DeltaNet path. It ships Metal-side correctness fixes for the matmul-Neumann fallback in gated_delta_scan_chunked, plus an MLX bridge buffer-size floor for gated DeltaNet so graph-variant-heavy workloads do not under-size MLX graph buffers and trip cache-thrash behavior.

What's fixed

  • fix(gated-deltanet): keep default chunk size Metal-safe — Restores the omitted scan_chunk_size default to the Metal-tested width of 64, while keeping explicit larger chunk-size overrides available for backend-specific performance experiments; this prevents long-sequence defaults from silently selecting chunk sizes such as 128, 256, or 512 before those paths are validated on Metal.
  • fix(mlx): raise GDN graph op buffer floor — Changes MLX graph auto-tuning to use the normal 3x IR-op estimate for ordinary models but apply a 16000 minimum MLX_MAX_OPS_PER_BUFFER for configs containing gated_deltanet, addressing cache-thrash and low-buffer symptoms caused by compact GDN IR ops expanding into much larger MLX graphs.
  • fix(gated-deltanet): bound Metal solve backward — Replaces the Metal matmul-Neumann within-chunk solve fallback with a custom Metal triangular-solve primitive and explicit VJP, while keeping CUDA on its custom primitive and CPU on the row-wise fallback; this bounds the backward graph and avoids later misleading training failures from oversized Metal solve graphs.

Compatibility

These are pure correctness and stability fixes. There are no schema changes and no intentional default behavior changes beyond keeping the implicit gated DeltaNet chunk width on the previously Metal-safe value. Existing experiments should remain byte-identical except where they were previously hitting the buggy gated DeltaNet Metal or MLX graph-buffer paths.