Four finite FP16 numbers become zeros in Apple MLX GroupNorm.

Recorded on MLX 0.32.2 CPU: standard GroupNorm, one group, affine=False, input [-128,128,-128,128]. Expected after FP16 rounding: [-1,1,-1,1]. Observed: [0,0,0,0]. The variance 16384 fits in FP16, but the sum of squares 65536 overflows before division.

The research patch preserves channel membership and uses float32 statistics for nonempty FP16/BF16 groups. Simply enabling pytorch_compatible can change the groups, so it is not a general substitute.

332 forward scenarios + 24 gradient scenarios; 1424 main assertions per variant, including 428 numerical comparisons. Main failures: 45 before, zero after. All 41 candidate compatibility checks pass, including empty inputs. The failed first prototype and test-harness corrections are retained in the archive.

Limits: float32 range remains finite; GPU, compiled execution, large-model performance and training quality are untested. A separate float64 observation has no validated fix here. Related InstanceNorm and BatchNorm reports are credited; no absolute novelty or upstream acceptance claim.

Report, reproduction, patch and original logs:
https://www.gero.uz/research/articles/mlx-groupnorm-low-precision.html

Independent, AI-assisted research and publication preparation. Original tests ran sequentially on CPU with one numerical thread. Publication checks preserve the existing results; they do not rerun the numerical suites.

#MLX #MachineLearning #NumericalComputing

Code: https://github.com/kadyrbekovhamit-cyber/gero-numerical-observatory/tree/main/audits/2026-09-10-mlx-groupnorm-low-precision/

Synthetic narration: macOS Samantha, fictional Alex Vector. Original evidence diagrams. AI-assisted research, writing and production. Technology Product / Xamit Kadirbekov. No sponsor or paid promotion.
