
PyTorch 2.15 正式引入对 Mac MPS(Metal Performance Shaders)后端的多项关键改进,旨在将 macOS 打造为运行和训练 PyTorch 模型的一流平台。此次更新带来了 FP8 格式支持、显著的语言模型解码加速,以及针对音频、视频处理和高开销训练负载的专用 Metal 内核优化。
据开发团队介绍,针对此前 MPS 后端存在的不支持操作、性能断崖及内存异常增长等问题,团队通过替换 MPSGraph 为专用 Metal 内核,修复了来自 Hugging Face Hub 的真实模型在 Mac 上的短板。以下是本次更新的核心亮点:
核心升级亮点
- FP8 登陆 Mac:新增
float8_e4m3fn支持,存储空间仅为 BF16 的一半,并支持缩放矩阵乘法及 CUDA/CPU 已支持的其他操作。 - MoE 模型解码提速 5–6.5 倍:得益于原生分组矩阵乘法和专用解码路径,Qwen3.6-35B-A3B 在 M3 Ultra 上的生成速度从 9.4 tokens/s 飙升至 61.3 tokens/s(对比 2.14 版本)。
- LLM 每 Token 耗时降低:单行线性层采用专用矩阵-向量内核,词汇表 Softmax 速度提升约 8 倍。
- 视频生成显存大幅优化:Wan2.2 视频 VAE 解码的驱动内存峰值从 270 GiB 降至 8 GiB。
- 线性代数运算增强:支持复数 LU 分解、三角方程组求解,加速小矩阵逆运算及 QR 分解。
- 系统要求更新:MPS 现需 macOS 15 或更高版本;PyTorch 2.15 需 Python 3.11 或更高版本。
实际应用场景变化
对于使用 transformers、diffusers 或 ComfyUI 等工具的 Mac 用户,2.15 版本带来了以下实质性改进:
- 本地大语言模型性能飞跃:除 MoE 模型外,密集模型也受益于更快的线性层和采样速度。例如 LFM2.5-8B-A1B 在 M3 Ultra 上的速度从 23.6 提升至 123.6 tokens/s。
- 视频生成更省显存:Wan2.2 分块 VAE 解码时的驱动内存峰值从 270 GiB 降至约 8 GiB,解决了此前因常数填充导致的内存无限增长问题。
- 图像编辑正确性修复:修复了 Qwen-Image-2.1 在 MPS 上 VAE 编码器损坏图像的问题。编解码往返 PSNR 从 10.06 dB 提升至 29.95 dB,与 CPU 表现一致。
- FP8 权重支持:FP8 张量内存占用减半,且
F.scaled_mm可直接在 GPU 上进行乘法运算。
技术细节深度解析
FP8 与内存优化
PyTorch 2.15 在 MPS 上添加了 torch.float8_e4m3fn 张量,每个值仅占 1 字节。用户可使用 F.scaled_mm 进行逐张量或逐行缩放的乘法运算,有效节省显存并提升计算效率。
LLM 解码加速机制
在解码阶段,大型矩阵乘法转化为矩阵-向量乘积。2.15 版本将 F.linear 连接至专用的 GEMV 内核,并融合偏置加法,使常见解码输入的几何平均加速比达到 1.23 倍。对于混合专家(MoE)层,新的 Metal 内核直接在 GPU 上处理分组矩阵乘法,避免了旧版本中 CPU-GPU 的数据拷贝与循环开销。
线性代数与复数计算
MPS 现在支持 complex64 的 LU 分解、求解及三角方程组求解,解锁了复数行列式等运算。针对相机几何等场景,提供了最多 4×4 FP32 矩阵批次的快速求逆内核。此外,SVD 在数值极端情况下的鲁棒性得到增强,能正确处理极小奇异值及极大/极小输入幅度。
卷积、填充与训练优化
针对音频和视频模型的高开销操作,新版本引入了多条 Metal 新路径:conv1d 前向传播采用专用内核;常数填充迁移至 Metal 内核,彻底修复了视频 VAE 解码中的内存泄漏问题;反射和复制填充实现了更快的 Metal 实现并修复了反向传播正确性;nn.Dropout 和非原地 Dropout 现在使用融合内核。
Softmax 与归约操作加速
令牌采样速度显著提升。softmax 和 log_softmax 运行在专用 Metal 内核上,针对 [1, 128256] 行 logits 的 FP32 Softmax 耗时从 57 µs 降至 7 µs,加速约 8 倍。
开发者控制力增强
Python 端公开了 MPS 流接口,torch.mps.Stream 和上下文管理器允许开发者直接选择工作流,Tensor.record_stream 则帮助分配器跟踪跨流张量使用情况,使事件计时更加可靠。
PyTorch 2.16 预览
下一代版本 2.16 的开发工作已在进行中,部分特性已在夜间构建版中可用:
- 更快的 LLM 解码:通过每 16 个内核提交一次命令缓冲区,实现 CPU 编码与 GPU 处理的并行。预计 LFM2.5-8B-A1B 和 Qwen3.6-35B-A3B 的解码速度将分别再提升 16% 和 19%。
- 注意力机制全 Metal 化:缩放点积注意力将彻底移除 MPSGraph 依赖,所有形状均运行在 Metal 内核上。在 M5 Pro 上,特定配置的解码时间预计从 465 µs 降至 65 µs。
- 更多操作迁移:批量归一化、MSE 损失、
std_mean等将进一步迁移至 Metal。其中bincount在特定场景下速度提升显著,从 6.8 秒缩短至半毫秒。 - 安装包缩小:默认捆绑 Metal 3.1 着色器,
libtorch_cpu.dylib大小从 384 MiB 降至 287 MiB,并为 Metal 4.1 原生 FP8 矩阵乘法奠定基础。
PyTorch 2.15 标志着 Mac 在 AI 推理和训练能力上的重要跃升。开发团队表示,未来将继续致力于消除图断裂以支持更多模型的端到端编译,并欢迎社区通过 GitHub 反馈 MPS 相关的性能瓶颈或缺失功能。