← 返回 2026-09-21

SiliconBench:统一内存桌面设备上 LLM 服务的速度、内存与保真度评测基准 SiliconBench: Speed, Memory, and Fidelity for LLM Serving on Unified-Memory Desktops

Ranran Haoran Zhang, Aysa Xuemo Fan, David Munhá Correia, Alex Cheema, Rui Zhang 📅 2026-09-12 👍 8 2026-11-02 18:30
Apple Silicon LLM推理服务 基准测试 多节点推理 并发服务 统一内存

首个联合评测九个 Apple Silicon 推理引擎速度、内存与保真度的审计基准。

前置知识

统一内存架构

Apple Silicon 和 NVIDIA DGX Spark 等桌面设备采用 LPDDR 低功耗内存,CPU 与 GPU 共享同一物理内存池,没有独立的显存。以 64 GB 的 Mac 为例,模型权重、KV 缓存与 macOS、浏览器、IDE 等前台应用共同竞争这 64 GB,可用池会随前台负载动态变化。

本文的核心命题 D2「内存纪律」完全建立在统一内存共享这一约束之上:推理引擎占用过多内存会挤压系统,触发页面压缩甚至请求失败,这是数据中心 HBM 显卡上不存在的问题。

连续批处理与 KV 缓存分页

连续批处理指请求可随时加入/离开当前批次,而非凑齐整批再算;PagedAttention 将 KV 缓存切成固定大小的块按需分配,像操作系统分页一样避免碎片。配合混合调度步,prefill 与 decode 可共用一次前向传播。这些是 CUDA 数据中心服务的标准技术。

论文 Table 1 用「查询布局、KV 分配方式、调度步组成」三个维度刻画九个引擎的架构差异,并发扩展性(D1)的差距正是由这些实现选择决定的,不读懂数这些概念就看不懂实验设计。

张量并行与流水线并行

张量并行将单层权重矩阵切分到多台设备,每步都需要通信;流水线并行将不同层分配到不同设备,按阶段串行传递激活。多机互联带宽决定成败:Thunderbolt 5 RDMA 可达数十 GB/s,而普通 TCP 仅有几个 GB/s。

D3 多节点扩展是本文三大 desiderata 之一,结论「TP over RDMA 扩展、PP over TCP 倒退」直接来自这两种并行策略与传输层的组合对比。

TTFT(首 token 延迟)

Time-To-First-Token,从 HTTP 请求提交到流式返回第一个内容 token(含 reasoning 输出)的时间,由 prompt 处理(prefill)时间主导。Agent 场景中每次工具往返都要重算长上下文,TTFT 直接决定任务回合时长。

本文的核心工作负载是单用户 agent 同时发起 4–16 个并发请求、长上下文短回复,vllm-metal 凭借 packed prefill–decode 路径把 agent $c=16$ 的中位 TTFT 压到 219 ms,是区分各引擎的关键指标。

任务级保真度

同一模型权重在不同推理引擎上因 kernel 非确定性、精度混合、chat 模板差异会产生输出漂移。任务级保真度用下游任务的加权 F1 来量化:在 GMRID 供应链事件分类任务(1146 条、8 类、0-shot/5-shot)上对比各引擎与 NVIDIA A100 参考实现。

本文发现仅看速度会漏掉两类隐性劣化:ollama 因 chat 模板问题 5-shot F1 落后参考约 30 个百分点,vllm-mlx 0-shot 低 5.0 个百分点——这些在吞吐榜上都不可见。

研究动机

统一内存桌面(Apple Silicon、DGX Spark)正成为本地 LLM 服务的主流平台:Ollama、llama.cpp、LM Studio 每年在 Mac 上有数十万次安装,mlx_lm 月下载量 145 万,mlx-community 社区已有 4710 个转换模型。但至少九个活跃开发的推理栈在这个硬件上竞争,用户几乎只按吞吐量选型,这掩盖了三个具体问题。其一,模型权重和推理缓存与 macOS 及前台应用共享内存,一个引擎可能吞吐排名靠前,却把内存吃到接近物理上限,导致前台应用卡顿或请求失败。其二,单个 coding agent 就会向本地服务器同时发出 4–16 个请求,缺乏连续批处理和内存纪律的栈会在并发下变慢甚至崩溃。其三,即使所有请求都完成,任务级质量也可能悄悄劣于参考实现:维护实验中 ollama 因 GGUF 裸导入丢失 ChatML 分隔符导致分类任务约 92% 解析失败,vllm-mlx 在零请求错误的情况下 0-shot F1 仍比参考低 5.0 个百分点。现有基准没有一项能在同一平台上联合评测速度、内存与保真度。

本文的目标是本文要构建 SiliconBench,一个面向统一内存桌面的联合审计基准:在九个 Apple Silicon 引擎上测量并发 chat 与 agent 服务的吞吐、延迟、内存占用和请求完成率,并用 NVIDIA A100 上的参考实现单独评估任务级保真度。作者提出三条解释框架 desiderata:D1 服务架构就绪度(支持新模型架构并在并发下高效服务)、D2 内存纪律(高效使用共享内存的同时为 macOS 和前台应用保留余量)、D3 多节点扩展(跨机器高效分布式推理)。同时配套 DGX Spark CUDA 参考赛道,通过三个共享引擎家族的桥接对锚定 Apple 结果,并建立一条结合受限 agent 修复与人工审核的持续维护流程,保证基准随软件演进而不过时。

与已有工作不同的是,已有消费级硬件推理基准(Rajesh et al. 2025、Barrios 2026、Benazir & Lin 2025 等)主要在单一栈或狭窄硬件切片上测量吞吐和任务质量;多节点工作如 Petals、prima.cpp 面向异构集群而非审计并发服务。SiliconBench 的独特切入有三点:第一,在单一平台同时审计九个栈的三个维度,而不是只测速度;第二,通过 llama.cpp/vLLM/SGLang 三个桥接对把 Apple Silicon 与其 CUDA 同源引擎锚定在 DGX Spark 上,用相同 prompt、权重和并发网格区分「引擎差距」与「硬件差距」;第三,维护模式创新——prompt 集固定不动、框架适配器每两周由 Claude Code agent 在写白名单内更新、人工审核后才重新生成官方结果,从而把「基准过时」问题转化为受控的软件验证问题。

核心方法

SiliconBench 的整体思路是「三透镜审计」:速度、内存、保真度分开测量、合并解释。直觉来自真实场景:单用户 agent 把一个任务扇出到 4–16 个并行请求,请求携带长上下文但只要短回复,每次工具往返都支付一次 TTFT。工作负载分两个 split 各 100 条:chat split 取自 OpenOrca 和 CNN/DailyMail(21–3.5K token,固定输出 64 或 256 token);agent split 取自 BFCL V3、Hermes、ClawsBench(0.3K–8.9K token,上限 256 token,工具调用预置)。并发扫描 $c \in \{1, 8, 16\}$,闭环发送、每级 3 条 warmup、温度为 0、要求非思考生成,每框架 1 小时墙钟上限。模型以 Qwen3-0.6B BF16 为九栈公共基线,用 Qwen3.5-0.8B(混合线性注意力)和 Gemma-4-E4B-it(多模态、跨层共享 KV)考察新架构支持。主审计硬件为 64 GB Apple M5 Pro(macOS 26.6),保真度用 GMRID 分类($N=1146$、8 类、0/5-shot)对 A100 参考核加权 F1。

核心创新是把「引擎声明的配置」与「实测行为」分开审计,并用三条门槛把可用性下限与性能差异解耦。首先 Table 1 从查询布局(packed $N_q = \sum_{b=1}^{B} q_b$ 行 vs padded $B T_{\max}$ 行,$T_{\max} = \max_b q_b$)、活跃 KV 分配(分页/连续/预分配单元)、调度步组成(混合步/分离步)、内存策略(显式上限/建议提示/无界增长)四个维度刻画九个引擎,再验证这些声明是否兑现:例如 mistral.rs、vllm-mlx、sglang 都声明显式预算,实测却在吞吐下降时逼近物理内存。其次设立三条审计门槛——两个 split 上每个并发级完成率 $\geq 90/100$、保真度落在参考约 1.5 个百分点的带内、三个模型全部可服务——速度只报告不强制的门槛设计把「能不能用」与「快不快」分开。最后,内存纪律的判据不是「是否完成」而是「是否留有余量」,并首次提出部署悬崖概念:无 OOM 报错但 macOS 页面压缩使性能静默劣化 2.5 倍。

方法步骤详情

流程分七步。第一步,配置审计:记录每个引擎的批处理方式、KV 布局、prefill/decode 组合和内存策略(Table 1)。第二步,速度扫描:每个并发级 3 条 warmup 后闭环保持至多 $c$ 个在飞请求,吞吐为总生成 token 除以整轮扫描墙钟时间,TTFT 从 HTTP 提交计到首个流式内容或 reasoning 输出,失败请求仍计入墙钟。第三步,内存追踪:记录每级峰值系统内存和运行内轨迹。第四步,保真度测量:在 GMRID 上以 0-shot 和 5-shot 生成,与 A100 上 vllm-nv 参考同权重同精度对比加权 F1(2026-08-21 构建)。第五步,CUDA 参考:llama.cpp、vLLM、SGLang 三个家族在 DGX Spark GB10 上用相同 prompt、权重和并发网格测速度与延迟。第六步,扩展研究:Qwen3.8-27B(稠密 4-bit/8-bit)和 Qwen3.6-35B-A3B(MoE)在 M5 Pro 上测 $c=1/2/4$;两台 64 GB M4 Pro Mac mini 经 Thunderbolt 5 RDMA 对比 llama.cpp 的 PP-over-TCP 与 mlx_lm/EXO 的 TP-over-RDMA(Qwen3.5-35B-A3B 8-bit,512 输出 token)。第七步,维护流程:agent 只能写白名单内的适配器与模型配置,工作负载、评分、聚合由维护者控制,审核后才重跑官方结果。

技术新颖性

技术新颖性有四点。第一,多维联合审计本身是新的:此前没有基准在统一内存平台同时测并发扩展、内存余量和任务级保真度,本文证明三者排名互不一致——chat 吞吐并列第一的 ollama 在内存和保真度两项都不合格。第二,对 padded 批处理的量化分析:30K/5K/10 token 三段 prompt 实际仅 35010 个 token,但 padded 路径按 $[3, 30000]$ 布局横跨 90000 个位置,浪费 61% 的查询计算和 KV 内存 I/O,并首次给出「32 GB 上页面压缩致 2.5 倍减速、64 GB 上无惩罚」的部署悬崖实证。第三,桥接对设计:用 llama.cpp/vLLM/SGLang 三个共享引擎家族在 DGX Spark 上跑同 workload,使「Metal 后端缺内核」与「引擎本身不支持」可被区分(sglang 上游 CUDA 能服务两个新模型而 MLX 后端一个都不行)。第四,多节点受控对比:选一个单节点放得下的 35B 模型,把多机引擎效率与容量解锁场景解耦,得到 TP-over-RDMA 与 PP-over-TCP 的干净结论。

实验结果

九引擎审计(Qwen3-0.6B BF16,M5 Pro)显示并发扩展差距巨大:vllm-metal 是唯一在两个 split 上都超 2 倍扩展的栈(chat 3.65 倍、agent 2.71 倍,$c=1 \to 16$),且是唯一在 agent $c=16$ 保持中位 TTFT 低于 250 ms 的栈(219 ms);chat $c=16$ 上它与 ollama 差距不到 1%,agent split 上领先 32%。批处理特性相同的 hf_transformers chat 仅扩展 1.23 倍且 agent 无法在 1 小时内完成,说明相同架构不保证性能。完成率上 6/9 栈全程 $\geq 90/100$:mlx_lm 在 agent $c=16$ 崩到 2/100,mistral.rs 崩溃。内存上 vllm-metal 峰值稳定在 34.7–34.9 GB,llama.cpp 几乎平坦,omlx 有界增长;ollama 从 $c=1$ 起占 Metal 建议提示的 94–97%,mistral.rs 在 agent $c=8$ 达 59.3 GB 却只完成 13/100,sglang 和 vllm-mlx 完成全部 600 请求但内存逼近物理容量,无界的 mlx_lm 为 7% 吞吐把 chat 内存占用翻了近三倍。保真度上 8 个 Qwen3-0.6B 栈中 6 个落在参考约 1.5 个百分点带内;ollama 5-shot 仅 0.4462(参考 0.7364),vllm-mlx 0-shot 0.3592 比参考 0.4094 低 5.0 个百分点;新模型上全部 5 个受测栈在 1.4 个百分点内。大模型研究中 MoE 吞吐差距收窄:omlx 在 $c=1$ 领先,vllm-metal 在 $c=4$ 优势 4%–17% 且平均 TTFT 最低。DGX Spark 上 CUDA vLLM 和 SGLang 达 4.3–7.7 倍扩展且 TTFT 平坦。多节点上 EXO TP-over-RDMA 两节点 decode 87.0 tok/s(1.30–1.37 倍),mlx_lm 1.28–1.32 倍,llama.cpp PP-over-TCP 倒退至 0.80–0.84 倍;prefill 因计算受限扩展更好(短上下文约 2 倍)。最终仅 llama.cpp、vllm-metal、omlx 通过全部三条审计门槛。

Serving engines differ in batching and memory management: overview of the nine Apple Silicon configurations.
Table 1: Serving engines differ in batching and memory management: overview of the nine Apple Silicon configurations.
Chat and agent splits exercise different serving regimes. SiliconBench prompt splits; agent tool calls pre-baked.
Table 2: Chat and agent splits exercise different serving regimes. SiliconBench prompt splits; agent tool calls pre-baked.
Six of eight stacks match on Qwen3-0.6B; all five match on each newer model. Fidelity (BF16), weighted F1 on GMRID, scored against the vllm-nv reference on an NVIDIA A100.
Table 3: Six of eight stacks match on Qwen3-0.6B; all five match on each newer model. Fidelity (BF16), weighted F1 on GMRID, scored against the vllm-nv reference on an NVIDIA A100.
TP over RDMA scales; PP over TCP regresses. Throughput on Qwen3.5-35B-A3B 8-bit, 512 output tokens, 1–2 M4 Pro Mac mini (64 GB), TB5+RDMA.
Table 4: TP over RDMA scales; PP over TCP regresses. Throughput on Qwen3.5-35B-A3B 8-bit, 512 output tokens, 1–2 M4 Pro Mac mini (64 GB), TB5+RDMA.
Three stacks pass all three audit gates. Speed, memory, and fidelity summarize Qwen3-0.6B.
Table 5: Three stacks pass all three audit gates. Speed, memory, and fidelity summarize Qwen3-0.6B.
Similar chat throughput masks different performance on agent workloads: output throughput at c=1, 8, 16 on the chat and agent splits, Apple M5 Pro. Qwen3-0.6B BF16, n=100.
Figure 2: Similar chat throughput masks different performance on agent workloads: output throughput at c=1, 8, 16 on the chat and agent splits, Apple M5 Pro. Qwen3-0.6B BF16, n=100.
The MoE throughput gap narrows, while TTFT still separates the serving paths. Agent prompts, 100 requests per level; Qwen3.8-27B (dense, 4-bit) and Qwen3.6-35B-A3B (MoE, 4-bit) on Apple M5 Pro.
Figure 3: The MoE throughput gap narrows, while TTFT still separates the serving paths. Agent prompts, 100 requests per level; Qwen3.8-27B (dense, 4-bit) and Qwen3.6-35B-A3B (MoE, 4-bit) on Apple M5 Pro.
CUDA vLLM and SGLang sustain stronger concurrency scaling on Qwen3-0.6B. Bridge pairs: the three engine families shared between the Apple M5 Pro roster and the DGX Spark reference track, same workload.
Figure 4: CUDA vLLM and SGLang sustain stronger concurrency scaling on Qwen3-0.6B. Bridge pairs: the three engine families shared between the Apple M5 Pro roster and the DGX Spark reference track, same workload.
Completing every request does not ensure memory discipline. Throughput vs. peak system memory for Qwen3-0.6B BF16 on Apple M5 Pro, 100 requests per split at concurrency 1, 8, 16.
Figure 5: Completing every request does not ensure memory discipline. Throughput vs. peak system memory for Qwen3-0.6B BF16 on Apple M5 Pro, 100 requests per split at concurrency 1, 8, 16.
First-token latency across stacks (Appendix B): only vllm-metal combines sub-quarter-second median TTFT with increasing agent throughput at c=16 (219 ms).
Figure 6: First-token latency across stacks (Appendix B): only vllm-metal combines sub-quarter-second median TTFT with increasing agent throughput at c=16 (219 ms).
查看结构化数据
任务指标本文基线提升
Chat 吞吐并发扩展(Qwen3-0.6B BF16,M5 Pro,n=100) 输出吞吐扩展倍数(c=1→16) vllm-metal 3.65× hf_transformers 1.23×(相同 packed/分页/混合步特性) 同为 packed+paged+mixed 实现,扩展性差距近 3 倍,说明实现质量决定性能
Agent 吞吐并发扩展(约 4K token 长上下文) 输出吞吐扩展倍数(c=1→16) vllm-metal 2.71×,c=16 领先第二名 32% 其余 padded/串行 prefill 路径增益不足 30% 或失败 唯一在两个 split 上扩展均超 2× 的栈
Agent 首 token 延迟(c=16) 中位 TTFT vllm-metal 219 ms sglang 655 ms(但吞吐从 80.6 跌至 45.3 tok/s),其余栈超过 1 s 唯一兼具亚 250 ms TTFT 与增长中吞吐的栈
内存纪律(agent split 峰值系统内存) 峰值内存 / 64 GB 物理容量 vllm-metal 34.7–34.9 GB 且随负载平坦 mistral.rs 59.3 GB(仅完成 13/100);sglang、vllm-mlx 锯齿逼近物理内存 在吞吐最高的同时保持最大内存余量
任务级保真度(GMRID 分类,Qwen3-0.6B,5-shot) 加权 F1(vs A100 参考带约 ±1.5pp) vllm-metal 0.7423(带内);ollama 0.4462(带外) vllm-nv 参考 0.7364 暴露 ollama chat 模板导致落后参考约 30 个百分点的隐性劣化
两节点 decode(Qwen3.5-35B-A3B 8-bit,ctx 512,TB5 RDMA) decode tok/s 与两节点加速比 EXO TP 87.0 tok/s(1.30–1.37×) llama.cpp PP-over-TCP 32.4 tok/s(0.80–0.84×,倒退 16–20%) 证明 TP+RDMA 扩展、PP+TCP 倒退

局限与改进

作者承认的限制包括:主审计只用一台 Apple M5 Pro,硬件多样性不足;DGX Spark 参考只覆盖三个引擎家族且仅测速度与延迟;主审计锚定小模型,更大的稠密/MoE 研究只覆盖选定的引擎且使用了更新的构建和不同的 GGUF/MLX 量化格式,每个配置只测一次,无重复实验;保真度依赖单一分类任务且没有正式的运行间方差估计,约 1.5 个百分点的带不是形式化噪声估计,带内不排名;多节点只测两台机器且模型单机也放得下。我自己的观察补充如下:吞吐定义为总生成 token 除以整轮墙钟,部分完成的运行(如 mlx_lm 23–31/100)会系统性压低其吞吐,与完成率混淆;mlx_lm 合法的零内容工具调用被计为失败、而 ollama 的 agent 吞吐又把约 254 个空内容 token 计入产出,说明完成率和吞吐指标对「内容承载 token」不敏感,需要内容感知的记账;主 split 刻意排除了 10K 以上长上下文和 1K 以上长生成,而这正是本地 agent 即将高频遇到的场景;对前台内存需求动态变化的自适应未评估,D2 只测了静态负载。

独立分析的弱点

第一,保真度评估过窄:仅一个 8 分类供应链事件分类任务,无法暴露长文本生成、代码生成或指令跟随质量的引擎间差异,且作者未隔离 ollama 模板问题的根因。改进方向是加入多任务保真度套件(摘要 ROUGE、代码执行通过率)并做模板归一化消融。第二,指标记账语义不一致:mlx_lm 的 70/100 是合法工具调用被 harness 记为失败,ollama 的 agent 吞吐又把约 254 个空内容 token 计入产出,完成率和吞吐在 agent 场景下都需内容感知的重新定义。第三,单机单次测量:大模型配置每个只测一次且构建与量化格式不统一,4%–17% 的区间跨度和无方差估计使小差距不可解释,应至少重复 3 次并报告置信区间、统一量化格式。第四,内存评估是静态的:未测前台应用内存需求波动时引擎的自适应行为(如 Metal 建议提示的实时响应),可引入合成的前台内存压力进程做共评测。第五,多节点规模太小:两节点、单机可容纳的模型无法回答 D3 的原始动机「容量解锁」,也未测 vllm-metal 的 MLX ring PP 路径。

未来方向

作者方向上:把快照制维护跑成真正的双周节奏(目前 2026-04-11 至 04-23 的五次早期运行尚不能证明可持续性);通过社区 PR 扩大引擎与模型覆盖,特别是补上 DeltaNet 内核(mistral.rs)和 MLX 后端的混合 SSM 内核(sglang);扩展到 10K 以上长上下文和 1K 以上长生成两个被明确排除的 regime;评估引擎对前台内存动态的自适应。基于成果可延伸的方向:其一,把三透镜审计移植到 DGX Spark 和即将出现的其他统一内存平台,检验 desiderata 的平台普适性;其二,多节点研究扩展到超过单机内存的模型(如 70B+),考察 TB5 RDMA 下 TP 规模上限与 expert parallelism 跨 Mac Studio 集群;其三,用 Metal DSL 工具链(如 TileLang for Metal)的成熟度曲线预测新架构的支持滞后时间,把 D1 从静态覆盖审计变成预测模型;其四,把保真度从分类 F1 扩展为包含输出分布层面(logprob KL、token 级漂移率)的连续谱,配合正式的方差估计建立可排名的保真度度量。

复现评估

复现基础较好:基准代码、逐次运行结果和维护日志全部开源(github.com/WindChimeRan/SiliconBench2026),维护者 agent 指令固定在 commit 616aa51c,prompt 集、采样种子和数据集版本跨快照固定,保证性能差异来自框架变化而非数据漂移。硬件门槛是主要障碍:主审计需要 64 GB Apple M5 Pro(macOS 26.6),Figure 1 需要 32 GB M1 Pro 和 64 GB M1 Max,多节点需要两台 64 GB M4 Pro Mac mini 加 Thunderbolt 5 连接,CUDA 参考需要 DGX Spark GB10 和 NVIDIA A100。软件侧依赖锁在特定版本(如 MLX 0.31.x),论文已证明依赖更新随时可能破坏五个栈中的三个,复现者需按快照日期对齐构建版本(保真度用 2026-08-21 构建)。总体难度中等偏高:有一台 64 GB Apple Silicon 即可复现核心的九引擎审计和保真度部分,完整复现含 DGX Spark 和双 mini 多节点则需专门硬件。

相似论文推荐