fix(metal): GDN bfloat16, PA scheduler, error handling, MLX SDPA fixes#2047
Open
emanueleDiVizio wants to merge 9 commits into
Open
fix(metal): GDN bfloat16, PA scheduler, error handling, MLX SDPA fixes#2047emanueleDiVizio wants to merge 9 commits into
emanueleDiVizio wants to merge 9 commits into
Conversation
…duler Reapply upstream fixes from PRs EricLBuehler#2031/EricLBuehler#2034: fix quadratic scheduling complexity when sequences are waiting, and add FCFS priority ordering to prevent starvation.
…l prefill Add an optional MLX SDPA backend using steel flash attention kernels for Metal prefill. Enable head_dim=256 support for models like Qwen3.5 that use larger attention head dimensions.
3bbe0a9 to
af3e7f0
Compare
ljchang
added a commit
to ljchang/mistral.rs
that referenced
this pull request
May 25, 2026
The GDN (Gated Delta Net) kernels in mistralrs-core/src/metal/kernels/gdn.metal
instantiate templates with `bfloat16_t` — the ggml/llama.cpp convention
inherited from the CUDA port. Apple Metal's stdlib exposes the
IEEE bfloat16 type as `bfloat` (Metal 3.1+, macOS 14+), with `bfloat16`
also present as a forward-only struct (`__Reserved_Name__Do_not_use_bfloat16`)
in the extended_vector private header. Neither name is `bfloat16_t`.
The precompiled metallib path works because it's built against
build-time headers that may resolve `bfloat16_t` differently. But the
runtime-compiled path (used when MISTRALRS_METAL_PRECOMPILE=0, the only
working mode on Apple Silicon GPUs whose precompiled-metallib function
variants don't match the current device) bails with:
error: unknown type name 'bfloat16_t'; did you mean 'bfloat16'?
instantiate_conv1d_update(bfloat16_t);
This blocks Qwen 3.5 / 3.6 inference on Metal under precompile=0 since
those models hit the GDN path for their hybrid (FullAttention +
LinearAttention) layers — Gemma 4 and dense-only models are unaffected.
Fix: typedef `bfloat16_t` to the public `bfloat`. Aliasing to `bfloat16`
also resolves the original parse error but then explodes at template
instantiation with "incomplete type" errors because the extended_vector
declaration is forward-only.
Tested end-to-end with `Qwen/Qwen3.6-27B` + AFQ4 ISQ on Apple Silicon /
macOS 26 — GDN kernels compile cleanly and inference produces tokens.
Note: this fix overlaps with PR EricLBuehler#2047 (fix/metal: GDN bfloat16, PA
scheduler, error handling, MLX SDPA fixes) which has been open since
2026-04-02 and contains the same typedef plus several unrelated
improvements. Either this fix or that PR (whichever lands first) closes
the precompile=0 GDN gap; happy to drop this commit if EricLBuehler#2047 is
prioritized.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR fixes multiple correctness, performance, and stability issues encountered while running mistral.rs on Apple Silicon (M-series) with real multi-user inference workloads (Qwen3.5 MoE + Mixtral).
The changes focus on:
Several of these issues only surface under concurrent decode or long-running sessions.
Key changes
Scheduler (from upstream PRs #2031/#2034)
GDN / Metal
bfloatvsbfloat16_t) in Metal kernelsStability
Performance / Features
Test plan