News

Metal-Shim beschleunigt LLM-Inferenz in macOS-VMs um bis zu 16-fach

llama apple-silicon llm local-inference virtualization

Das Cua-Team hat eine schlanke Kompatibilitätsschicht für Apples Virtualization.framework vorgestellt, die LLM-Inferenz in macOS-Gast-VMs auf Apple Silicon drastisch beschleunigt. Der Ansatz nutzt kein echtes GPU-Passthrough im VFIO-Sinne, sondern manipuliert Metal-Faehigkeitsabfragen pro Prozess.

Das Problem

  • Apples Virtualization.framework stellt einer macOS-VM nur eine paravirtualisierte GPU mit konservativen Faehigkeitswerten zur Verfügung
  • llama.cpp wählt daraufhin langsamere Kernel-Pfade, obwohl die Hardware neuere unterstützen würde
  • Bekanntes Limit auch bei Tart-Nutzern als offenes Issue dokumentiert

Die Lösung

Ein prozessbezogener Metal-Capability-Shim (DYLD_INSERT_LIBRARIES) überschreibt ausgewählte Abfragen:

  • supportsFamily: bis Apple Family 9 (1009) -> true
  • Maximaler Threadgroup-Speicher: 32 KB -> 64 KB
  • Damit aktiviert: SIMD-Group-Matrix, SIMD-Group-Reduction, bfloat16-Pfade

Benchmark-Ergebnisse (M1 Ultra, 48-Core GPU)

  • TinyLlama 1.1B: Prompt-Processing 11,08x schneller (4.786 vs. 432 tok/s, 98% Bare-Metal), Token-Generation 16,36x schneller
  • Gemma 4 12B QAT Q4_0: Prompt-Processing 7,20x (99,6% Bare-Metal), Token-Generation 14,54x (94,8% Bare-Metal)
  • MLX-LM Llama-3.2-3B: Keine Veränderung - MLX war im Stock-VM bereits schnell; Release-Shim belässt Metal 3 auf Standardwert

Einordnung und Limitierungen

  • Experimentell und versionsabhaengig - private Metal-Implementierungsdetails können sich mit macOS-Releases ändern
  • Wirkung auf den injizierten Prozess beschränkt; gehärtete Executables könnten Injektion ablehnen
  • Nur M1 Ultra mit Tahoe-Guest getestet; weitere Chips, Gäste und Workloads benötigen separate Validierung
  • Kein echtes VFIO-Passthrough - Virtualization.framework-Rendering-Limitierungen bleiben bestehen

Original: github.com/trycua/cua