Cua 推出一款 Metal shim,可在 macOS VMs 内加速 LLMs
进程作用域层解锁了 llama.cpp 的 GPU 路径,并在 Cua 的 M1 Ultra 测试中带来了高达 16.36x 的生成速度提升。
By Ryan Merket · Published
Primary source: X
Why it matters
Cua's release turns an apparent VM hardware limit into a software capability-selection problem, making isolated macOS inference practical for more agent workloads if the results hold across chips and runtimes.

Cua 创始人 Francesco Bonacci (@francedot) 于 8 月 11 日 发布了一个开源的 Metal 能力层,Cua 表示该层能显著加速在 Apple Silicon macOS 虚拟机中运行的 llama.cpp 推理。
该发布针对 Apple 虚拟化堆栈中的一个狭窄瓶颈进行了解决。Apple 的 Virtualization.framework 已经允许 macOS 来宾通过一个准虚拟化(paravirtualized)的图形设备将 Metal 工作发送到主机 GPU。Cua 发现其默认的 macOS Tahoe guest 报告了一个较为保守的能力配置文件,导致 llama.cpp 禁用了虚拟 GPU 实际可以执行的更快内核。
Cua 的层改变了单个进程的这些能力回答。在 X 上的一个讨论串 中,Cua 报告了在 M1 Ultra 上三个模型的 prompt 处理速度提升在 7.20x 到 11.08x 之间,令牌生成速度提升在 8.87x 到 16.36x 之间。
Bonacci 于 2025 年 3 月在离开 Microsoft 之后在旧金山创立了 Cua;他与联合创始人 Dillon DuPont (@ddupont808) 在 Microsoft 时曾从事 Windows Agent Arena 的开发,这是一个面向桌面代理的基准和测试平台。Bonacci 创办 Cua 时带来了 Lume,它是一个用于 Apple Silicon 上本地 macOS 和 Linux 虚拟机的开源管理器。Cua 加入了 Y Combinator 的 X25 批次,随后扩展到跨平台沙箱、计算机控制驱动和代理基准测试等领域。
虚拟 GPU 走了慢路径
在 Cua 的测试中,默认的 Tahoe guest 报告了 Apple GPU family 5 和 32 KB 的最大 threadgroup 内存。llama.cpp 在选择 Metal 内核之前会读取这些值。基于报告的配置文件,它禁用了 SIMD-group reduction、SIMD-group matrix operations 和 bfloat16 支持。
Cua 的 进程范围的兼容层 拦截了选定的 Metal 查询,并报告支持到 Apple family 9,同时将 threadgroup-memory 的回答提升到 64 KB。主机桥接、虚拟 GPU 和来宾内核保持不变。
这一差别很重要,因为 Cua 也将这项工作用更熟悉的术语 GPU passthrough 来描述。此次发布并未将 M1 Ultra 的物理 GPU 直接分配给来宾。它保留了 Apple 的准虚拟化 GPU 通路,并改变了被注入的单个进程认为该设备支持的功能。
Apple 的 Metal feature tables 将 M1 系列 GPU 分类到 Apple family 7。Cua 所报告的 family 9 是一个经过测试的兼容性配置文件,而不是对物理硬件的检测。Cua 表示,每一种额外的 Metal 工作负载、主机芯片和 macOS 组合都需要单独验证。

Cua 的基准接近裸机速度
对于 TinyLlama 1.1B Q4_K_M,Cua 测得 prompt 处理从 431.86 提升到 4,786.70 每秒 tokens,增长 11.08 倍。令牌生成从 12.63 提升到 206.60 每秒 tokens,增长 16.36 倍。解锁后的 prompt 处理结果达到了 Cua 4,871.99 每秒 tokens 裸机测量的 98.25%。
生成结果保留了更大的虚拟化差距。裸机生成达到了 286.71 每秒 tokens,使得解锁后的虚拟机性能为主机性能的 72.06%。Cua 基于每个工作负载十次 llama-bench 样本的中位数计算了 TinyLlama 的数据。
Cua 使用 Google 的 Gemma 4 12B instruction-tuned QAT Q4_0 模型重复了测试。prompt 处理从 71.66 提升到 515.76 每秒 tokens,而生成从 3.41 提升到 49.67 每秒 tokens。那些解锁后的结果分别达到了 Cua 相应裸机测量值的 99.59% 和 94.82%。已发布的 Gemma 证据 包含了十次样本的中位数、模型哈希和基准日志。
对于 Meta 的 Muse Glimmer 30B Q4_K-M,在一个 64 GiB Tahoe guest 中运行时,Cua 报告 prompt 处理从 25.83 提升到 194.97 每秒 tokens,生成从 2.38 提升到 21.08 每秒 tokens。Muse Glimmer 证据集 使用三次运行的中位数,并覆盖仅文本的 llama.cpp 推理。它不包括 Ollama、该模型的多模态投影器和推测解码。
这些结果仍然是 Cua 在一台 M1 Ultra 上运行的基准。Cua 在仓库中根据 MIT 许可发布了源代码、构建脚本、校验和、原始输出和环境记录,为其他开发者提供了足够的材料来复现或挑战这些测量结果。
MLX 暴露了边界
Cua 并未在所有 Metal 软件上发现普遍的性能提升。MLX-LM 在其测试中基本保持不变,prompt 处理从 1,656.55 增至 1,665.47 每秒 tokens,生成从 172.09 降至 170.86 每秒 tokens。
更早的、更广泛的能力配置文件在宣称支持 Metal 3 时还导致了 MLX 设备初始化失败。根据 Cua 的 技术说明,当时 MLX 请求了一个准虚拟化设备无法创建的 residency 集。Cua 在那次失败之后将发布范围缩小到了 Apple-family 和 threadgroup-memory 的回答。
当前实现要求在主机上启用不受限的设备功能级别,并通过 DYLD_INSERT_LIBRARIES 将一个动态库注入到选定的来宾进程中。经过加固或受平台保护的可执行文件可能会拒绝该注入。移除这些环境变量会使工作负载回到其默认的能力路径。
Cua 还将该方法描述为实验性且对版本敏感,因为它依赖于来宾 Metal 实现中的私有行为。未来的 macOS 发行版可能会更改该行为。对 Bonacci 来说,当前的短期押注是:只要开发者能识别哪些保守的能力检查阻止了更快的内核,Apple Silicon 虚拟机就包含足够可用的 GPU 能力来在本地以接近主机的速度运行推理。