跳到正文

目录

Modular 平台:Mojo 语言与 MAX 框架如何走到一起

Modular 平台:Mojo 语言与 MAX 框架如何走到一起

核心判断

modular/modular 不是某个单一工具的仓库,而是 Modular 公司把其 AI 平台的两条主线——MAX 推理框架与 Mojo 编程语言——放进同一个开源 monorepo 的载体。读者可以在这一个仓库里同时看到「面向 AI 部署的执行框架」和「面向 AI 硬件的系统语言」如何共享同一套编译器与运行时基础设施。

这个仓库的开源边界还在持续移动:一个多月里(26.5 到 26.6),编译器底层组件陆续入库,官方宣布接受对 Mojo 编译器本身的贡献,GPU 编程 API 则从语言标准库并入了 max 包。读这个仓库,理解「边界在哪」比记住某个目录名更重要——一个多月前的地图已经不够用了。本文以 2026-09-17 发布的 MAX 26.6 / Mojo 1.1.0 为口径展开。

系统地图:一个仓库,两条主线

以 main 分支(2026-09-25 核对)为准,仓库顶层结构如下:

modular/modular
├── Mojo/                      # Mojo 语言:编译器、标准库、文档、示例
│   ├── include/ + lib/        #   编译器源码(LLVM 风格布局)
│   ├── stdlib/                #   标准库
│   ├── docs/ + examples/      #   贡献者文档与示例代码
│   └── test/ + unittests/
├── max/                       # MAX 框架
│   ├── kernels/               #   加速器内核库
│   ├── python/max/serve/      #   推理服务(OpenAI 兼容端点)
│   ├── python/max/pipelines/  #   模型管线(Python 实现)
│   └── docs/ + examples/
├── AsyncRT/ Support/ Init/ Cache/ Config/   # 编译器与运行时底层组件
└── docs/ tools/ utils/ bazel/

两条线共享同一套底层编译器与运行时基础设施(AsyncRT、Support 等目录都是双方共用的 LLVM 风格组件),但回答的问题不同:

主线回答的问题主要产物
Mojo如何用一门系统语言为 CPU、GPU 到 NPU 编写高性能代码编译器 + 标准库
MAX如何把一个训练好的模型部署成可服务的推理端点内核库 + 推理服务 + 模型管线

Mojo:面向 AI 时代的系统语言

Mojo 官网的自我定位是「The systems language for the AI era」:为跨 CPU、GPU 等多种硬件写高性能代码,没有厂商锁定,语言本身用户友好且内存安全。对从 Python 过来的工程师,官方强调的路径是「Mojo meets developers where they are」——直接 import Python 库,只对性能关键路径加速,从原型到生产不需要整体重写。

语言现状有几点值得留意,网上的旧教程在这几处容易过时:

  • 函数声明是 def。fn 关键字连同 alias、__comptime_assert、@parameter if/for 语法已在 Mojo 1.1 中移除——它们此前经历了完整的弃用期,1.1 正式删除。
  • var 必须显式声明。Mojo 1.0 起要求变量声明带 var,struct 仍是定义值类型的关键字。官方文档现在的第一个例子长这样:
def main():
    var x = 10
    var y = x * x
    print(x + y)
  • 标准库开始有稳定性承诺。1.0 起 String、SIMD、List 等核心 API 被标记为 stable,官方承诺不在破坏兼容的方向上改动;破坏性变更普遍附带弃用别名和编译器自动修复建议。对要把 Mojo 用进生产代码的团队,这是从「实验语言」到「可依赖语言」的实质变化。

Mojo 的完整语法手册在 mojolang.org/docs,仓库里的 Mojo/docs/ 则是面向标准库与编译器贡献者的开发文档——前者教你写 Mojo,后者教你改 Mojo。

MAX:面向部署的推理框架

MAX 解决的是「模型训练完之后怎么办」。README 把它拆成三块:

  • max/kernels/:加速器内核库,提供针对 NVIDIA、AMD GPU 及 Apple 芯片优化的算子实现。
  • max/python/max/serve/:MAX 推理服务,对外暴露 OpenAI 兼容端点——现有 OpenAI SDK 客户端改一个 base_url 就能接入,不用重写调用代码。这是部署侧最实用的入口。
  • max/python/max/pipelines/:基于 Python 的模型管线。这个目录的实际能力面比「管线」两个字大:architectures/ 下有上百个模型架构实现(DeepSeek V2 到 V4、Gemma 3/4、FLUX 系列扩散模型等),另有 kv_cache、lora、speculative(投机解码)、sampling、diffusion、audio 等子模块,分别对应推理服务的关键环节。

模型支持面可以从官方 quickstart 的选项感受:text-to-text、image-to-text、video-to-text 三类输入都有现成端点示例,从 8 GiB 显存就能跑的 Gemma 3 4B,到需要超过 96 GiB 显存(建议 NVIDIA B200 或 AMD MI355X)的 Gemma 4 31B,跨度很大。官方也明确建议生产环境用数据中心级 GPU(NVIDIA B200/H200/H100 或 AMD MI355X/MI325X/MI300X),消费级设备和 Mac 能跑,但可用模型更少、速度更慢。

两条线的交汇点

Mojo 与 MAX 不是两套孤立技术,交汇发生在两个层面。

一是实现层:MAX 的推理内核就是用 Mojo 写的,跑在同一套编译器上。在 MAX 里给加速器写自定义算子,语言就是 Mojo——官方的说法是「Write GPU kernels in the same language you use for CPUs—no CUDA, no separate DSL」。

二是包结构层,这是 26.5 之后的新变化:GPU 编程 API 已从 Mojo 标准库整体迁入 max 包——std.gpu 变成 max.gpu,std.algorithm 变成 max.algorithm,layout 包一并迁入。26.6 的 release notes 把 max.gpu 称为 accelerator programming 的完整入口——语言标准库正在把加速器相关的部分让渡给框架包,两条线在包命名空间层面也合流了。这个动向比任何架构图都更能说明「共享同一套基础设施」不是修辞。

一个模型的部署路径

把抽象组件串起来,看官方 quickstart 走一遍「serve 一个模型」要经过什么:

# 1. 创建项目并安装 max 包(官方推荐用 pixi 管理)
pixi add max

# 2. 配置 Hugging Face 访问令牌,并在 HF 上同意目标模型的许可协议
export HF_TOKEN="hf_..."

# 3. 起一个本地推理端点
max serve --model google/gemma-3-4b-it

端点就绪后,新开一个终端,用 OpenAI Python SDK 直连:

from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")

之后的调用代码与访问 OpenAI 服务完全一致。quickstart 的最后一步是压测这个端点——max serve 起服务、OpenAI SDK 验证兼容性、再跑 benchmark,三步就是 MAX 日常使用的最小闭环。整个过程不涉及写 Mojo:部署视角的用户最多只用到 max 包,Mojo 是给要下探到算子层的人准备的。

版本节奏与最新动态

MAX 的大版本节奏约为每 6-8 周一个:2026 年至今发了 26.1(1 月 29 日)、26.2(3 月 19 日)、26.3(5 月 7 日)、26.4(6 月 18 日)、26.5(8 月 11 日)、26.6(9 月 17 日)。Mojo 的版本号随 MAX 走,26.5 那次正是 Mojo 1.0.0 正式发布,1.1.0 随 26.6 而来。

26.6 的几个动态能看出这条产品线的走向:

  • 模型覆盖继续铺开:新增音频生成模型 MiniMax-Music3(44.1 kHz 立体声)、Thinking Machines 的多模态模型 Inkling(NVFP4 MoE)与 GLM-5.3,Kimi、Qwen、Gemma 家族覆盖面扩大。
  • 投机解码支持 DFlash、DSpark 草稿模型(在 Gemma 4 31B 上验证)——不改变模型输出地加速 token 生成。
  • 内核持续提速:release notes 给出的口径包括 Gemma 4 decode attention 最快 4.8 倍、MoE routing 7.9 倍、B200 上低批量 NVFP4 量化 16 倍、MI355 上 decode attention projection 最高 6.6 倍。这些数字出自官方自述,覆盖的模型与卡型各有不同,横向比较其他框架时需自行对齐口径。
  • Mojo 1.1 改进了编译期与生成代码性能,新增类型推断式成员引用(SIMD[.float64, 4] 可省略 DType 前缀),语言服务器开始对常见 off-by-one 笔误给出修复建议。

开源范围本身也在扩大。26.5 到 26.6 之间,AsyncRT、Support、Init、Cache、Config 等编译器与运行时底层组件陆续入库(Mojo 目录同时从小写 mojo 更名为大写 Mojo),官方并宣布接受对 Mojo 编译器本身的贡献。仓库根目录的 AGENTS.md、CLAUDE.md、AI_TOOL_POLICY.md 则是给 AI 编码工具划定的行为边界——基础设施仓库如何与 AI 工具协作,这里本身就是一份现成的样本。

贡献边界

接受贡献的区域:Mojo 标准库(Mojo/stdlib)、Mojo 编译器(2026-09 起,贡献者文档见 mojolang.org 的 contributing 指南)、MAX 加速器内核库(max/kernels)、MAX 模型架构(max/python/max/pipelines/architectures)、代码示例与 Mojo 文档。官方贡献指南要求先读 CONTRIBUTING.md,再进入对应区域的开发文档(max/docs、Mojo/docs/stdlib)。

一点提醒:仓库 main 分支的 README 在写作时仍保留着「We aren’t accepting contributions to the Mojo compiler yet」一句,与 26.6 release notes 及官方贡献指南已不一致,属于 README 自身的滞后——以 release notes 和贡献指南为准。

如果你的目标只是看懂这个平台,从 max/docs 与 Mojo/docs/stdlib 入手即可;要动手贡献,标准库或内核库的小改进是最平滑的起点。

适用边界

这个仓库适合:评估 MAX 做模型部署的团队(OpenAI 兼容端点意味着接入成本几乎只有换 base_url);想在 GPU 编程上摆脱 CUDA 单一生态、又不想学一门全新 DSL 的系统工程师(Mojo 提供 CPU/GPU 同语言的路径);以及想给 AI 基础设施贡献代码的人——从标准库到编译器,贡献阶梯是完整的。

它不适合作为:Mojo 语法或 MAX 部署的学习教程入口——那些在 mojolang.org 与 max.modular.com 的 quickstart 站点;也不适合需要立刻锁定长期 API 承诺的团队——标准库 stable 名单还在逐版扩大,GPU API 更是在连续几个版本里挪动位置,跟进这类变动是使用这个仓库的固定成本。

许可证要分开看:仓库与贡献适用 Apache License v2.0(带 LLVM Exceptions),Mojo 官网也明确「fully open source under the Apache License 2.0」;但 MAX 的使用与分发遵循 Modular Community License,与前者不同。引入第三方依赖(如 Hugging Face 上的模型权重)时,许可证需要自行核验,README 对此有明确提示。

对「该不该现在上车」这类问题,一个务实的判断是:部署需求驱动的团队可以从 MAX 26.6 直接试起,成本主要在 GPU 与模型许可协议;语言投资人(无论是写算子还是押注生态)则值得等标准库 stable 面再扩大一两个版本——Mojo 1.0 才刚把稳定性承诺立起来,路标清晰,但路还没走完。

参考来源与口径说明

  • 仓库元数据(stars 29883、forks 3181、最近推送 2026-09-24):GitHub API,2026-09-25 读取。
  • 目录结构、贡献边界、许可证:仓库 main 分支 README.md、CONTRIBUTING.md、LICENSE 文件,2026-09-25 核对;文中目录树为简化示意,完整结构以仓库为准。
  • 版本时间线与 26.6 / Mojo 1.1 动态:仓库 releases(max/v26.6.0 等 tag 的 release notes 原文);内核提速数字为官方自述口径。
  • max serve、pixi add max、OpenAI SDK 接入与显存门槛:max.modular.com 官方 quickstart(get-started 页)。
  • Mojo 定位、语法现状(def/var/struct)与 stable API 承诺:mojolang.org 官网与 Mojo manual(basics 页),以及 26.5、26.6 release notes 中关于 Mojo 1.0/1.1 的段落。
  • Modular Community License 条款见 modular.com/legal/community;本文不构成许可意见。
  • README「不接受编译器贡献」一句与 release notes 的矛盾在贡献边界一节注明,裁决依据是 26.6 release notes 与 mojolang.org 贡献指南两处官方口径。

参与讨论

使用 GitHub 登录。欢迎补充事实、异议与实践。