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 Kompatibilitaetsschicht fuer 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 Verfuegung
  • llama.cpp waehlt daraufhin langsamere Kernel-Pfade, obwohl die Hardware neuere unterstuetzen wuerde
  • Bekanntes Limit auch bei Tart-Nutzern als offenes Issue dokumentiert

Die Loesung

Ein prozessbezogener Metal-Capability-Shim (DYLD_INSERT_LIBRARIES) ueberschreibt ausgewaehlte 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 Veraenderung - MLX war im Stock-VM bereits schnell; Release-Shim belaesst Metal 3 auf Standardwert

Einordnung und Limitierungen

  • Experimentell und versionsabhaengig - private Metal-Implementierungsdetails koennen sich mit macOS-Releases aendern
  • Wirkung auf den injizierten Prozess beschraenkt; gehaertete Executables koennten Injektion ablehnen
  • Nur M1 Ultra mit Tahoe-Guest getestet; weitere Chips, Gaeste und Workloads benoetigen separate Validierung
  • Kein echtes VFIO-Passthrough - Virtualization.framework-Rendering-Limitierungen bleiben bestehen

Original: github.com/trycua/cua