跳到主要内容
返回时间线
Hugging Face - Blog来源发表:

Mac上的PyTorch 2.15:MoE解码快5–6.5倍,视频VAE显存从270 GiB降到8 GiB

核心概要

PyTorch 2.15把FP8张量、原生分组矩阵乘法和一批专用Metal内核带进Mac的MPS后端,让本地大模型解码和视频生成更省时省内存。此前MPS上不少算子走MPSGraph,MoE解码要先把分组偏移拷回CPU再逐组循环,分块视频VAE解码的驱动内存峰值可达270 GiB。在M3 Ultra上,Qwen3.6-35B-A3B的解码从9.4升到61.3 tokens/s,Wan2.2的VAE解码内存峰值降到约8 GiB。

Source-provided article image: MPS in PyTorch 2.15
Hugging Face

深度剖析

Mac上的PyTorch模型在2.15里获得FP8存储、更快的语言模型解码和更省内存的视频解码,MPS不再只是能跑,而是把解码和生成中最贵的几步换成了专用Metal内核。 此前MPS上运行小模型也常要绕开不支持的算子、性能悬崖和意外内存增长,F.linear仍走MPSGraph,分组矩阵乘要把分组偏移拷到CPU再逐组循环。 在M3 Ultra配合torch.compile时,Qwen3.6-35B-A3B从9.4升到61.3 tokens/s,LFM2.5-8B-A1B从23.6升到123.6 tokens/s;Wan2.2分块VAE解码的驱动内存峰值从约270 GiB降到8 GiB。

解码阶段每个新token只以单行输入穿过模型,大矩阵乘退化为矩阵向量乘,2.15把已有的GEMV内核接到F.linear上,并给混合专家层写了原生分组矩阵乘。 分组矩阵乘在2.14里把分组偏移复制到CPU并循环各组,新的Metal内核直接在GPU上读取偏移,小分组另有专用内核。 在来自真实模型的96个BF16层形状上,F.linear取得1.23倍几何平均加速;FP32 softmax处理[1, 128256]一行logits从57微秒降到7微秒。

启示与展望

这则发布面向在Apple silicon Mac上使用MPS后端的PyTorch用户,覆盖语言模型解码、线性代数、卷积与填充、softmax与归约、MPS流以及若干新增算子。MPS现在要求macOS 15或更高版本,PyTorch 2.15要求Python 3.11或更高版本。发布方提到2.16将让注意力完全跑在Metal上,并继续把算子从MPSGraph迁出。

发布方说明2.16的部分改动已进入nightlies、部分仍在评审,细节可能在正式发布前变化。logspace尚不支持多元素的整数或布尔输出。上述加速数值来自指定硬件与torch.compile设置,发布方未给出其他配置下的表现。