网络瓶颈与硬件升级实验
在初步测试中,作者发现将KV缓存从GB10传输到Mac Mini时,25,000个token的计算耗时不到1秒,但通过2.5 GB USB以太网适配器传输却耗时25秒。这意味着96%的总时间都消耗在网络传输上,GPU处于空闲等待状态。为了更准确地评估解耦架构(Disaggregated)的优势,作者意识到需要两个关键条件:更快的网络和非思维链模型(Non-thinking model)。此前使用Qwen 3.5等思维模型时,隐藏推理token的生成速度在所有平台上几乎相同,掩盖了预填充(Prefill)阶段的差异。
为此,作者购买了一个Thunderbolt 5外部 enclosure,试图安装Intel 810网卡(100G QSFP双端口),但Mac OS提示缺少驱动,实验失败。随后,他改用之前用于框架集群的Mellanox Connect X4网卡(50G QSFP端口),Mac OS立即识别并加载了内置驱动。连接端使用了Microchip CSR 812交换机,经过调试建立链路后,KV缓存传输速度提升了约30%。作者推测,若能解决100G网卡的驱动问题,速度还会更快。
解耦架构性能基准测试
在硬件升级后,作者选用Llama 3.1 8B模型(非思维链、稠密模型)和Llama Ben工具进行HTTP API层面的基准测试。测试对比了三种配置:GB10单独运行(BF16)、Mac Mini单独运行(4bit)以及GB10预填充+Mac Mini解码的解耦模式。测试结果显示,GB10在2048和4096 token的提示处理长度下,吞吐量接近1,800 tokens/秒,而Mac Mini的预填充速度较低,但其解码速度显著更快。解耦模式在4096 token输入下,首字生成时间(TTFT)约为2.4秒,与GB10单独的2.3秒几乎持平,证明50G链路带来的开销几乎可以忽略不计。
然而,诚实的数据揭示了局限性:解耦模式的解码速度为34 tokens/秒,低于Mac Mini单独的52 tokens/秒,这归因于远程KV缓存注入的开销。作者指出,单张RTX Pro 6000工作站显卡凭借6倍的内存带宽和3.5倍的算力,可能在两项指标上都优于双机解耦方案。但核心变量在于内存带宽:Mac Mini M4 Pro的内存带宽为273 GB/s,而Mac Studio M3 Ultra高达819 GB/s,是前者的三倍。
Mac Studio M3 Ultra 最终验证
作者将Mac Mini替换为Mac Studio M3 Ultra(512GB统一内存),保持相同的网络架构(Connect X4/X7网卡和交换机)和Llama 3.1 8B模型进行对比。尽管Mac Studio的内存带宽是Mac Mini的三倍,但在Batch Size为1时并未完全饱和,解码速度从52 tokens/秒提升至106 tokens/秒,约为前者的两倍。在预填充阶段,Spark单独运行达到1,585 tokens/秒,Mac Studio单独运行达到1,420 tokens/秒,解耦模式下的预填充速度为1,584 tokens/秒,与Spark单独运行几乎一致,链路开销仅约18毫秒。
最终的解码数据表明,解耦模式下的解码速度为84 tokens/秒,虽低于Mac Studio单独的106 tokens/秒(因KV缓存注入开销),但仍是Spark单独运行(14 tokens/秒)的六倍。结合Spark极高的预填充速度(1,700+ tokens/秒)和Mac Studio强大的解码能力,这种组合展现出实际构建的价值。
| 配置 | 预填充吞吐量 (tokens/s) | 解码速度 (tokens/s) | 首字生成时间 (TTFT, 4096 tokens) |
|---|---|---|---|
| GB10 (Spark) 单独 | ~1,585 | 14 | 2.3s |
| Mac Mini (M4 Pro) 单独 | 较低 | 52 | 较高 |
| Mac Studio (M3 Ultra) 单独 | 1,420 | 106 | - |
| 解耦 (Spark Prefill + Mac Mini Decode) | ~1,584 | 34 | 2.4s |
| 解耦 (Spark Prefill + Mac Studio Decode) | ~1,584 | 84 | - |
70B模型量化困境与备选方案
在尝试将Llama 3.1 70B模型部署到DGX Spark上时,遇到了严重的量化兼容性问题。由于完整精度的70B模型需要140GB显存,而Spark仅有128GB,必须使用量化版本。然而,作者尝试的FP8、AWQ(int4)、W4A16以及GPTQ Marlin等量化格式均告失败。根本原因在于VLM wheel for Spark仅支持BF16和FB16内核,缺乏针对SM121架构的量化内核支持,重新编译源码成本过高。因此,测试转向了32B和27B量级的模型,这些模型在BF16精度下可舒适运行于Spark,同时在Mac Studio上使用4bit MLX量化版本进行对比。
预填充阶段:Spark优势随模型增大而显著
在预填充(Prefill)阶段,DGX Spark展现出随模型规模增大而提升的性能优势。对于32B的Qwen 2.5模型,Spark以875 tokens/s的速度领先,远超Mac Studio的356 tokens/s,DAG(分布式)模式达到792 tokens/s,约为Mac Studio的两倍以上。对于27B的Gemma模型,Spark预填充速度为779 tokens/s,Mac Studio为379 tokens/s,DAG为722 tokens/s。数据表明,DAG的首个Token生成时间(TTFT)始终与Spark的单卡预填充时间一致,且随着模型从8B增至27B/32B,Spark在预填充上的优势从微弱领先扩大至2到2.5倍。这说明在较大模型规模下,分布式预填充的价值更加凸显,因为Spark的预填充速度远超Mac Studio。
解码阶段:带宽瓶颈解除与性能差距缩小
解码(Decode)阶段的表现与预填充截然不同。在8B模型中,Mac Studio凭借带宽优势以8倍于Spark的速度领先,但在27B和32B模型中,这一差距急剧缩小至1.25到1.3倍。对于Qwen 32B,Mac Studio解码速度为29 tokens/s,Spark为23 tokens/s;对于Gemma 27B,Mac Studio为30 tokens/s,Spark为24 tokens/s。作者指出,DAG的解码速度损失约20%用于KV Cache注入开销,这解释了为何DAG数据接近Spark单卡数据。性能变化的原因在于:对于Gemma,滑动窗口注意力限制了KV Cache读取量;对于Qwen,VLM内核融合大幅降低了带宽需求。随着模型变大,Spark的解码效率相对提升,Mac Studio的带宽优势不再主导局面。
综合性能对比与硬件建议
综合三个不同架构和规模的模型测试,结果呈现出清晰的规律:预填充阶段Spark主导,解码阶段Mac Studio优势随模型增大而减弱。以下是关键性能数据汇总:
| 模型 | 配置 | 预填充 (Tokens/s) | 解码 (Tokens/s) | 备注 |
|---|---|---|---|---|
| Llama 3.1 8B | Spark (BF16) | 1420 | 23 | Mac Studio解码快8倍 |
| Llama 3.1 8B | Mac Studio (4bit) | 1585 | 29 | 带宽瓶颈明显 |
| Llama 3.1 8B | DAG | 1585 | 24 | TTFT跟随Spark |
| Qwen 2.5 32B | Spark (BF16) | 875 | 23 | DAG预填充792 |
| Qwen 2.5 32B | Mac Studio (4bit) | 356 | 29 | 解码差距缩小至1.3倍 |
| Qwen 2.5 32B | DAG | 792 | 24 | TTFT跟随Spark (5.2s) |
| Gemma 2 27B | Spark (BF16) | 779 | 24 | DAG预填充722 |
| Gemma 2 27B | Mac Studio (4bit) | 379 | 30 | 解码差距缩小至1.25倍 |
| Gemma 2 27B | DAG | 722 | 24 | TTFT跟随Spark (5.7s) |
"Two machines doing what they're good at. Talking over a 50 gig link and spitting out tokens faster than either one could alone. That's the whole pitch and it finally delivers."
尽管异构推理概念验证成功,但作者认为对于新购机用户,DGX Spark和Mac Studio的组合性价比不高。鉴于两者价格昂贵,更推荐购买RTX Pro 6000构建专用工作站,以获得更强的整体性能。