Mojo 1.0 官方当前要求 macOS 15 及以上、Apple Silicon M1–M5、Xcode 或命令行工具 16 及以上。这意味着,M1 和 M2 不能因为“找不到 GPU”就直接判定为不支持;先检查系统版本、Xcode 路径和 Metal Toolchain,通常比重装整个环境更快。(Mojo 1.0 系统要求)
症状:Mojo 能运行,但 GPU 探测失败 → 先修 macOS、Xcode 和 Metal 工具链。
症状:最小 GPU 程序成功,但 max serve 失败 → 停止重装 Mojo,转查模型架构、内核覆盖和可用内存。
最后更新于 2026 年 8 月 21 日,本文命令与兼容性信息核实自 Mojo 系统要求、MAX 26.5 发布说明、MAX 包说明、Apple Xcode 文档及 MAX 模型目录。
这篇文章适合三类人:
- 已经能执行
mojo,但 GPU 示例报设备或 Metal 错误的 Mac 开发者。 - 正在用 Apple Silicon M1/M2 评估 MAX serve,却分不清芯片支持和模型支持的 AI 工程师。
- 需要为团队准备可复现 Apple Silicon 环境,或准备把故障迁移到远程 Mac 的平台负责人。
先按故障层级分流
一个常见失败场景是:你在终端执行 mojo --version 能看到 1.0.0,普通 CPU 程序也能运行,但 GPU 示例在编译阶段报 Metal、metallib 或设备初始化错误。此时,不能把所有问题都归类成“Mojo 没装好”。
你需要把结论拆成三层:
- Mojo 语言层:
mojo命令存在,版本正确,普通程序可以编译或运行。 - Metal / GPU 层:Mojo 能加载 Apple 的 Metal 路径,并识别 Apple GPU。
- MAX 模型层:目标模型的架构、量化格式和 Apple Silicon 内核都能被 MAX 编译与执行。
这三个结论相互独立。第一层正常,不代表第二层正常;第二层正常,也不代表第三层的模型一定能服务。
| 观察结果 | 故障更可能在哪一层 | 先保留什么证据 | 下一步 |
|---|---|---|---|
mojo: command not found |
包管理器或环境路径 | which mojo、mojo --version、环境目录 |
检查当前虚拟环境,不要先动系统 |
| Mojo 普通程序能跑,GPU 示例失败 | Metal Toolchain、Xcode 路径或系统版本 | sw_vers、xcode-select -p、完整编译日志 |
先核验 Apple Silicon 与 Xcode 16 |
GPU 探测失败,报 metallib 或 Metal 错误 |
Metal 开发工具链 | xcrun --find metal、下载命令退出状态 |
安装或重新安装 Metal Toolchain |
最小 GPU 程序成功,max serve 失败 |
MAX 模型、内核或内存 | max serve 完整日志、模型 ID、设备参数 |
查模型目录和统一内存 |
| 只有某个项目失败 | 环境混用或缓存污染 | which mojo、which max、Python 路径 |
只重建当前项目环境 |
⚠️ 不要只保存最后一行错误。至少记录命令、当前目录、虚拟环境路径、版本输出和完整 stderr。很多“GPU 不可见”问题,真正原因出现在前面几行的 Xcode 或动态库检查中。
如果需要给团队提交工单,建议一次性保存下面这组信息:
sw_vers
uname -m
system_profiler SPHardwareDataType
xcode-select --print-path
xcodebuild -version
xcrun --find metal
which mojo
which max
mojo --version
python -c "import sys; print(sys.executable)"
Apple Silicon 与系统边界
Mojo 1.0 在 macOS 上的官方硬件范围是 Apple Silicon M1–M5。M1、M2 属于官方列出的兼容芯片,当前文档将它们标记为 “Known compatible”,因此“GPU 未识别”不能直接等价于“芯片已淘汰”。(Mojo 1.0 系统要求)
系统侧需要同时满足:
- macOS Sequoia,也就是 macOS 15 或更高版本。
- Apple Silicon 处理器,不能把 Intel Mac 当作同一条 Apple GPU 排障路径。
- Xcode 或 Xcode Command Line Tools 16 或更高版本。
- GPU 编程所需的 Metal Toolchain 已经存在。
先执行:
sw_vers -productVersion
uname -m
system_profiler SPHardwareDataType
xcodebuild -version
判断逻辑很简单:
uname -m不是arm64:停止 Apple GPU 排查,换用 Apple Silicon 环境或远程 Mac。- macOS 低于 15:先升级系统,或者直接在满足要求的环境复现。
- Xcode 版本低于 16:先升级 Xcode 或命令行工具。
- 以上都满足,但 GPU 仍不可见:进入 Metal Toolchain 和开发者目录排查。
Mojo 的语言开发最低内存要求是 8 GiB,但官方同时明确说明,MAX 推理和模型服务需要明显更多内存,具体取决于模型。也就是说,系统能安装 Mojo,不代表它适合加载你准备服务的模型。(Mojo 1.0 系统要求)
Metal Toolchain 与内置 Metal Framework
macOS 自带 Metal Framework,但这不等于已经安装了 Mojo GPU 编译所需的额外 Metal Toolchain。官方排障文档明确建议,在 Apple GPU 未识别或出现 Metal Toolchain 错误时执行:
xcodebuild -downloadComponent MetalToolchain
这条命令适合三种情况:
xcrun --find metal找不到工具。- GPU 编译阶段出现
metallib、Metal compiler 或 KGEN 相关错误。 - 你刚升级 macOS 或 Xcode,之前能运行的 GPU 程序突然失败。
Mojo 官方文档也特别提醒,升级 macOS 或 Xcode 后,可能需要重新安装 Metal Toolchain。
下载完成后,不要只看终端显示“下载完成”。重新检查退出状态:
xcodebuild -downloadComponent MetalToolchain
echo $?
xcrun --find metal
xcrun --find metallib
echo $? 返回 0 只能说明这一次命令成功结束,最终仍要用 GPU 程序验证。你可以使用官方的 Mojo GPU 入门示例,或者按系统要求页中的最小探测程序创建 check_gpu.mojo:
from gpu.host import DeviceContext
def main():
var ctx = DeviceContext()
print("GPU:", ctx.name())
然后运行:
mojo check_gpu.mojo
官方文档给出的预期行为是:程序创建 DeviceContext 并输出设备名称;如果 Mojo 找不到 GPU,则会抛出说明尝试过哪些路径的错误。
经验:如果
xcrun --find metal成功,但check_gpu.mojo仍失败,不要继续重复下载。此时重点转向 Xcode 当前指向的开发者目录、项目环境中的 Mojo 版本,以及编译缓存。
Xcode 路径与命令行工具
安装多个 Xcode、删除旧版 Xcode,或者系统升级后保留了旧的命令行工具路径,都可能造成“你看到的是新版,工具实际调用的是旧版”。
先查看当前开发者目录:
xcode-select --print-path
xcodebuild -version
Apple 文档说明,xcode-select --print-path 会返回当前命令行工具使用的开发者目录。如果没有有效目录,命令会直接报错。你也可以在 Apple 的命令行工具配置文档 中核对路径切换规则。
如果你安装的是完整 Xcode,常见路径是:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
如果你只使用命令行工具,则可以切换到:
sudo xcode-select --switch /Library/Developer/CommandLineTools
切换后再次确认:
xcode-select --print-path
xcodebuild -version
xcrun --find metal
不要在没有确认路径的情况下直接删除 /Library/Developer 或重装全部 Xcode。这样做会增加两个隐性成本:
- 破坏其他项目正在使用的 SDK、签名工具或编译缓存。
- 让团队成员无法复现原来的环境,最后只能重新下载并记录一整套依赖。
如果机器上有多个 Xcode,也可以只对当前命令临时指定开发者目录:
DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer" xcodebuild -version
这样可以先验证指定版本是否能找到 Metal 工具,而不必改变系统默认设置。
uv、pixi 与旧 modular 环境
如果 mojo 能运行,但你怀疑环境错位,先不要执行全局清理。检查每个关键命令到底来自哪里:
which mojo
which max
which python
python -c "import sys; print(sys.executable)"
python -c "import importlib.util; print(importlib.util.find_spec('max'))"
重点看四种错位:
- 终端调用的是全局
mojo,而项目实际使用 pixi 环境。 mojo来自稳定版,Python 包却来自 nightly。max来自旧的modular包,项目代码已经按照 MAX 26.5 拆包方式安装。- 同一台 Mac 上,
uv、pixi和系统 Python 的路径交叉覆盖。
MAX 26.5 已支持按用途安装:
uv pip install --upgrade mojo
uv pip install "max[serve]"
如果需要基准测试,再安装:
uv pip install "max[benchmark]"
只有需要全部组件时,才使用:
uv pip install "max[all]"
官方 26.5 说明指出,modular 包计划在 26.6 退役;因此,缺少 max serve 命令时,先判断是不是服务组件没有安装,而不是马上判断 Metal 坏了。(MAX 26.5 发布说明)
清理时限定在当前项目:
python -m pip list | grep -E 'mojo|max|modular'
确认路径后,再删除当前虚拟环境并重建。不要删除其他项目共用的缓存,也不要把稳定版与 nightly 混装作为“临时解决方案”。它可能让一个错误消失,却把版本复现问题留给下一次部署。
GPU 探测成功与 MAX serve 失败
这是最容易误判的一层。
如果 check_gpu.mojo 能输出 Apple GPU 名称,说明 Metal 调用链基本可用。此时再执行:
max serve --model <模型 ID> --devices gpu:0
如果失败发生在模型下载之后、图编译或内核选择阶段,问题通常已经不在 Mojo 安装层。
你需要检查三件事。
模型架构
MAX 只支持模型目录中列出的架构。官方 MAX 支持模型页面 按架构、示例模型、编码格式和多 GPU 能力列出了当前范围。模型仓库名称相似,不代表内部架构、量化格式和张量形状完全相同。
因此,先确认:
- 模型架构是否出现在 MAX 支持表。
- 使用的量化格式是否在该架构支持范围内。
- 是否依赖自定义模型代码或
--trust-remote-code。 - 该模型是否只在 NVIDIA 或 AMD 路径上有优化内核。
Apple Silicon 内核覆盖
MAX 26.5 已将 Apple Silicon GPU 运行支持扩展回 M1 和 M2,并修复了此前 Apple Silicon 矩阵乘法内核在 M1/M2 上可能产生错误结果的问题。换句话说,M1/M2 可以作为 MAX 26.5 的候选环境,但不是所有模型都因此自动可用。(MAX 26.5 更新记录)
Apple Silicon 上的 MAX 模型支持仍然是逐步扩展,而不是与 NVIDIA、AMD 环境完全等价。模型目录和版本变更记录应当一起检查,不能只看芯片名称。
统一内存
Apple Silicon 使用统一内存。系统、模型权重、KV Cache、编译过程和其他应用会竞争同一资源。Mojo 文档只给出了开发最低值 8 GiB,没有为所有 MAX 模型给出统一内存门槛;MAX 快速入门也会根据模型提示不同的内存约束。
所以,遇到模型编译失败时,先退出浏览器、IDE 和其他推理进程,再重复测试。你还需要记录:
vm_stat
sysctl hw.memsize
如果只有大模型失败、小模型能运行,且日志出现分配失败、缓存不足或编译进程被系统终止,优先判断为资源或模型适配问题,而不是重新安装 Metal。
三种处置路径
完成最小 GPU 探测后,你可以按结果做决定:
✅ 继续修本机环境
适合 mojo 路径错位、Xcode 指向旧版本、Metal Toolchain 缺失,或者只有当前虚拟环境损坏的情况。修复后重新运行同一份 check_gpu.mojo,不要更换测试样本。
✅ 换用更适合 Mac 的模型
适合 GPU 已识别,但目标模型架构、量化格式或 Apple Silicon 内核不在当前覆盖范围内。先从 MAX 支持模型表中选择明确列出的架构,再逐步增加模型规模。
⚠️ 迁移到内存更充足的 Apple Silicon 环境
适合本机统一内存不足、团队需要多人复现、设备经常被其他任务占用,或你需要固定的远程验收环境。迁移时必须带上 sw_vers、xcodebuild -version、Metal 探测输出和 max serve 完整日志,否则只是换了一台机器重复猜测。
如果团队还没有固定的环境记录,可以先参考 MacHTML 帮助中心 整理账号、交付和远程连接要求,再把同一份探测脚本交给每位开发者执行。
当前 Mac 与远程 Mac 的取舍
如果你只是偶尔写 Mojo GPU 内核,当前 Mac 的优势是零交付等待、可以直接连接本地设备,也适合长期稳定的个人开发。但它有三个现实限制:统一内存会被日常应用抢占;多人无法同时复现同一环境;升级 macOS 或 Xcode 后,Metal Toolchain 可能需要重新验证。
当任务变成 MAX serve 模型验证、团队协作或短期扩容时,继续反复修一台本机往往不划算。你可以在完成最小 GPU 探测后,按芯片代际、内存需求和使用周期提交远程 Apple Silicon Mac 需求,再用同一组日志验证迁移结果。MacHTML 的 Mac 环境方案 更适合这种临时算力、测试环境和可复现部署场景;如果你的工作是长期稳定重负载,或必须使用本地物理接口,自购 Mac 仍然更合适。
需要稳定的 Mac GPU 环境?立即使用 MacHTML
MacHTML 提供可快速开通的远程 Mac,让你直接进入真实 Apple Silicon 硬件环境排查 GPU 与 Metal Toolchain 问题。 无需购买和维护本地设备,按需租用 Mac 算力节点,降低开发、测试与模型部署成本。 从 Mojo 编译、MAX serve 到长时间运行任务,都能通过远程连接获得稳定的 Mac 环境。 根据项目周期灵活选择配置与租期,开通速度快,让你的 GPU 排障和开发工作尽快恢复。