Running LLMs inside macOS virtual machines on Apple Silicon has been painfully slow — until now. A team at Cua has discovered that the performance bottleneck isn't the hardware or the hypervisor, but a conservative GPU capability report that forces llama.cpp into slow code paths. Their fix delivers 11-16x faster inference, bringing VM-based LLM performance to nearly bare-metal speeds.

The Problem

Apple's Virtualization.framework presents macOS guest VMs with a virtual GPU backed by the host's Apple Silicon GPU. This is paravirtualization — the host keeps control of the hardware and the guest submits Metal work through a virtual driver.

The problem: the virtual GPU reports a conservative Metal capability profile. In a stock macOS Tahoe VM, the device reports roughly an Apple 5-era GPU family, 32 KB maximum threadgroup memory, and no SIMD-group matrix support. Modern Metal applications use these capability answers to select kernels — so llama.cpp, seeing limited capabilities, selects slower code paths even though the underlying hardware can do much more.

This is different from traditional GPU passthrough on x86 Linux, where VFIO can assign a physical PCI device directly to a VM. Apple's Virtualization.framework doesn't offer true GPU passthrough — it always goes through the virtualization layer, which reports whatever capabilities Apple chose to expose.