截至 2026 年 9 月 30 日,PyTorch 2.14.1 发布记录仍列出 MPS 上 torch.linalg.svd、torch.linalg.lstsq 的修复。这说明 PyTorch 2.14 MPS 不可用或算子报错时,先分清构建、运行和项目验收三层;不要把 CPU fallback 当成 GPU 已正常运行。 先查 PyTorch 是否包含 MPS、当前 Mac 是否满足条件,再定位迁移错误、未实现算子或数据类型限制;最后用代表性科研任务和结果复核决定去留。(GitHub 发布记录)

适合遇到 torch.backends.mps.is_available() 返回 False、但拿不准是安装还是设备问题的研究生、博士生和科研人员。
如果你负责实验室环境配置,也可以用下文的检查记录留存可复核证据。

更新记录:2026 年 10 月 23 日。 已核对 PyTorch 2.14 发布说明、2.14 版 MPS 文档、环境变量文档及 2.14.1 修复记录;安装前请再检查官方文档是否更新。

先看版本改进,再把故障分成三个层级

PyTorch 2.14 为 Apple Silicon 增加了原生线性代数实现,并把更多 MPS 算子迁移到 Metal 内核;发布说明提到 SVD、eigh、QR、Cholesky 等改进。但这不是“所有模型、算子和科研流程都能在 MPS 上跑”的承诺。2.14.1 还专门修复了部分 MPS 线性代数问题,因此遇到问题时要记录补丁版本,不能只写“PyTorch 2.14”。(PyTorch 2.14 发布说明)

按这三个层级判断,能避免一开始就重装环境:

  • 构建支持:当前导入的 PyTorch 是否包含 MPS 后端。
  • 运行可用:这台设备和 macOS 是否能实际创建 MPS 张量。
  • 项目通过:你的模型、数据类型、关键算子和结果是否满足科研验收要求。

对 PyTorch 2.14,官方版本文档把 macOS 14.0 或更高版本列为运行条件之一;Apple Silicon 设备也必须能提供 MPS。不要用针对其他 PyTorch 版本的系统要求替代 2.14 文档。(PyTorch 2.14 MPS 文档)

is_built 为真、is_available 为假时,先核对当前环境

torch.backends.mps.is_built() 回答的是当前 PyTorch 安装是否编入 MPS 支持;torch.backends.mps.is_available() 回答当前运行环境是否能使用 MPS。前者为真不代表后者也为真。PyTorch 2.14 的 MPS 文档明确用这两个检查区分构建状态和运行状态。

在出现问题的同一个终端、Notebook 内核或作业启动环境运行下面的检查,并保存输出:

import platform
import torch

print("python:", platform.python_version())
print("machine:", platform.machine())
print("macOS:", platform.mac_ver()[0])
print("torch:", torch.__version__)
print("torch file:", torch.__file__)
print("MPS built:", torch.backends.mps.is_built())
print("MPS available:", torch.backends.mps.is_available())

if torch.backends.mps.is_available():
    x = torch.ones(3, device="mps")
    print("tensor device:", x.device)

如果 is_built() 为 False,优先检查实际加载的安装包,而不是先改模型代码。若它为 True、is_available() 为 False,对照设备架构、macOS 版本与该版本要求,再确认运行的是否真是目标 Mac,而非容器、远端 Linux 会话或不同的 Python 环境。PyTorch 文档也明确提示,构建支持存在并不能排除系统版本或设备条件不符。

导入异常或终端结果不一致:定位解释器与安装位置

不同终端得到不同结果,常见原因不是硬件突然变化,而是 python、pip、Notebook 内核或作业脚本指向了不同环境。只看 pip list 容易漏掉这一层,因为它不一定对应实际运行代码的解释器。

按以下顺序排查,先保留现场,再改动环境:

  • 在报错的运行入口打印 sys.executable、torch.__version__ 和 torch.__file__,与终端结果逐项对照。
  • 用该解释器对应的 python -m pip show torch 检查安装位置;不要只凭独立的 pip 命令判断。
  • 检查项目虚拟环境、Notebook 内核和启动脚本是否使用同一个 Python。
  • 若确认安装包来源或版本不符,在新建的隔离环境中按 PyTorch 官方本地安装选择器生成适用命令;不要在尚未确认解释器时反复覆盖现有环境。
  • 复测后保存版本、安装路径、macOS 版本、设备架构与两项 MPS 状态,方便同实验室成员重现。

PyTorch 官方安装页面会随受支持版本和安装选项变化;应以当前选择器给出的命令为准,不要照搬旧教程里的固定版本组合。

MPS 算子不支持时,CPU fallback 能补哪一段?

先区分“未实现算子”和“数据类型不能放到 MPS”。前者可能在开启 fallback 后由 CPU 执行;后者不一定能被 fallback 接管。PyTorch 的环境变量文档说明,PYTORCH_ENABLE_MPS_FALLBACK=1 会在 MPS 算子不受支持时回退到 CPU;这只说明有回退路径,不代表该操作仍在 GPU 上运行。(PyTorch MPS 环境变量说明)

观察到的现象 优先核对 低风险动作
is_built() 为假 当前导入的 PyTorch 安装 在隔离环境核对安装包来源与解释器
is_built() 为真、is_available() 为假 macOS、设备与运行位置 对照 2.14 文档的条件,保留完整环境输出
模型或张量迁移时报错 迁移前后的设备与 dtype 用最小张量复现,逐项检查输入、参数和中间结果
某个运算提示 MPS 未实现 报错中的具体算子及输入形状 单独测试该算子;需要时短暂启用 CPU fallback 并记录
float64 或 complex128 无法迁移 数据类型是否需要双精度 必须保留双精度时转到 CPU,不要把它当作普通算子缺失

MPS 不支持 torch.float64(torch.double)和 torch.complex128(torch.cdouble);官方文档指出,双精度张量无法分配或复制到 MPS,因此 fallback 不能解决这种设备迁移限制。若研究流程确实依赖双精度,应在 CPU 上执行相关部分,并按项目要求重新验收,而不是静默改为较低精度。(PyTorch MPS 文档中的数据类型说明)

注意: 开启 fallback 后,程序能继续运行,不等于目标算子已由 MPS 执行。复测时要记录启动环境变量,并查看运行日志和关键张量的设备位置。

程序跑完了,但科研结果能通过吗?

能启动、能结束,最多说明这次执行没有因当前错误中断;它不能证明整条运算链都在 GPU 上,也不能证明结果满足课题精度要求。Apple 对 PyTorch MPS 的说明提供了把张量和模型移至 mps 并检查张量设备的基础验证方式;科研项目还需要在自己的数据和指标上做验收。(Apple 关于 Metal 与 PyTorch 的说明)

建议用一份脱敏、可重复的小样本做 CPU 与 MPS 对照:

  • 固定输入样本、模型权重、预处理步骤和随机种子,并记录软件版本。
  • 检查模型参数与关键输入张量的 .device;不要只看设备选择变量。
  • 如果使用 fallback,保留控制台提示,并把 CPU 回退视为混合执行路径,而非纯 MPS。
  • 对比项目实际关心的输出、损失、误差或下游指标,并按预先设定的容差判断;不要在结果不一致后临时放宽阈值。
  • 把数据筛选、评估代码和运行配置一起保存,供课题组复核。

CPU 与 MPS 的数值结果不应仅凭“逐位相同”判断。PyTorch 的数值准确性与可复现性说明提醒,硬件、运算顺序及执行环境会影响结果;你应依据研究方法预先定义容差和验收指标,并完整记录种子与环境。(PyTorch 2.14 可复现性说明)

按检查里程碑决定继续用 MPS、转 CPU 还是交给 HPC

用下面的清单做最终分流。任何关键条件未通过,都先停在对应里程碑,不要把运行成功直接当作迁移完成。

  • [ ] 环境里程碑: torch.__file__、Python 解释器、PyTorch 版本与 macOS 版本已记录,确认不是终端和 Notebook 使用了不同环境。
  • [ ] 设备里程碑: is_built() 与 is_available() 的结果已分开记录;可用时,已成功创建 mps 张量。
  • [ ] 算子里程碑: 模型关键路径中的算子已用代表性输入测试;触发 fallback 的算子与输入 dtype 已记录。
  • [ ] 精度里程碑: CPU 对照使用相同输入、权重和评估流程,项目指标通过预定容差。
  • [ ] 资源里程碑: 任务规模、内存需求、运行时长和数据管理要求适合当前设备,并且复测能够重复。
验收结果 建议路线 适用边界
代表性任务通过,关键输出满足项目标准 继续用 MPS 保存版本、dtype、fallback 设置与评估结果
仅少数算子回退,且任务结果通过验证 有条件地保留 MPS 与 CPU 混合路径 明确标记回退算子,不能宣称全程 GPU 加速
需要双精度或结果未过预设容差 暂用 CPU,进一步定位差异 不要为了使用 MPS 擅自改变科学计算精度
任务规模、资源或持续运行要求超出本机条件 评估高校 HPC HPC 更适合其资源与调度模型,但不提供 macOS 环境替代

如果问题落在复现环境而非代码本身,可先整理一份脱敏样例和环境记录,按官方 MPS 说明复核条件;若差异集中在数值结果,则依据项目预先设定的指标和容差继续排查,而不是只凭应用启动成功或单次运行结束放行。

实验室现有方案也有边界:HPC 通常不是 macOS 环境;本地 CPU 可能无法满足目标任务的资源或时限;为偶发验证单独购置 Mac,则会带来采购与维护成本。若你只需阶段性复现或测试 Apple Silicon 上的 MPS,可了解 VMSPIN 的远程 Mac 使用方式,再按当前可用条件选择环境;需要估算租用成本时,先核对 VMSPIN 套餐与计费信息。通过 VNC、SSH 或网页控制台访问真实 Mac,可以补上本地设备或 HPC 缺少 macOS 的验证环节,但仍应以你自己的任务、权限和数据要求验收。长期稳定重负载、必须接入物理接口,或需要大规模并行计算时,租用远程 Mac 未必合适,应保留自有设备或高校 HPC 的路线。