mesh-transformer-jax
mesh-transformer-jax 是一个基于 JAX 和 Haiku 构建的开源库,专为在 TPU 集群上高效训练和推理大规模 Transformer 模型而设计。它核心解决了单设备显存无法容纳巨型模型的难题,通过利用 JAX 的 xmap 和 pjit 算子实现“模型并行”策略,将超大模型拆分到多个加速器上协同计算。其并行方案借鉴了 Megatron-LM 的思路,特别针对 TPU 的高速二维网格网络进行了优化,能够轻松支撑参数量高达约 400 亿(40B)的模型训练,同时也实验性支持类似 ZeRo 的参数分片技术。
该工具最著名的成果是孕育了 GPT-J-6B 模型,这是一个拥有 60 亿参数、在 The Pile 数据集上训练的自回归文本生成模型,证明了其在实际大模型项目中的强大能力。mesh-transformer-jax 非常适合具备一定深度学习基础的研究人员和开发者,尤其是那些希望利用 TPU 资源探索大语言模型架构、进行微调或复现前沿算法的团队。对于普通用户而言,虽然直接操作代码有一定门槛,但可以通过其衍生的 Web 演示或 Colab 笔记本体验大模型的魅力。如果你正在寻求在 TPU 环境下突破模型规模限制,mesh-transformer-jax 提供了一个高性能且灵活的解决方案。
使用场景
某 AI 初创团队需要在有限的预算下,基于 TPU 集群训练一个参数量达 60 亿级的垂直领域法律问答模型,以替代昂贵的商用 API。
没有 mesh-transformer-jax 时
- 硬件门槛极高:传统单卡或简单数据并行方案无法容纳 6B 参数模型,团队被迫租用昂贵的多机多卡集群,导致研发成本飙升。
- 通信效率瓶颈:在跨设备同步梯度时,常规框架未能充分利用 TPU 特有的高速二维网格网络,造成大量计算资源浪费在等待通信上。
- 开发调试困难:手动实现模型并行切分逻辑复杂且易错,缺乏类似 Megatron-LM 的成熟 JAX 原生支持,工程师需花费数周时间排查底层分布式 bug。
- 扩展性受限:当尝试增加参数量以提升效果时,现有架构迅速遭遇显存墙,无法线性扩展至更大规模模型。
使用 mesh-transformer-jax 后
- 低成本大模型训练:利用其内置的
xmap/pjit算子实现高效的模型并行,成功在标准的 TPUv3 Pod 上跑通 6B 参数模型,硬件成本降低 60%。 - 极致通信优化:自动适配 TPU 高速互联架构,显著减少了跨芯片通信延迟,将训练吞吐量提升了近 3 倍,大幅缩短迭代周期。
- 开箱即用的并行策略:直接复用类 Megatron-LM 的并行方案及 GPT-J 预训练权重,团队仅需关注业务微调逻辑,将模型上线时间从数周压缩至数天。
- 平滑的能力扩展:凭借优秀的可扩展性设计,团队能够轻松将模型规模从 6B 向更高参数量探索,为后续提升法律推理精度预留了充足空间。
mesh-transformer-jax 通过原生支持高效模型并行,让中小团队也能在 TPU 上低成本、高效率地驾驭十亿级大模型的训练与微调。
运行环境要求
- Linux
- 非必需(主要设计用于 TPU)
- 若需在 GPU 上运行,需使用 resharding_example.py 将模型权重分片转换,具体显存需求取决于分片策略和模型大小(原版 GPT-J-6B 需多卡或多机并行),未指定具体 CUDA 版本
未说明(取决于模型规模和并行策略,TPU VM 架构下由云端实例决定)

快速开始
目录
Mesh Transformer JAX
一个基于 JAX 的俳句库,利用 xmap/pjit 操作符实现 Transformer 模型的模型并行。
该并行化方案类似于 原始的 Megatron-LM,由于其高速的二维网格网络,在 TPU 上表现高效。此外,还有一个实验性的模型版本实现了 ZeRo 风格的分片。
此库的设计目标是在 TPUv3 上实现约 400 亿参数规模的可扩展性,超过这一规模则应采用其他并行化策略。对于更大规模的模型,并行化,可以参考其他实现,如 GPT-NeoX 或 DeepSpeed 等。
未来的一个研究方向是将此代码库与 swarm-jax 集成,以通过流水线并行进一步提升可扩展性。
更新
2021年7月12日:新增微调指南
预训练模型
GPT-J-6B
一个拥有 60 亿参数的自回归文本生成模型,基于 The Pile 数据集训练而成。
链接
致谢
本项目离不开 TPU Research Cloud 提供的慷慨算力支持,同时感谢 EleutherAI 的协助。
特别感谢 Google Cloud TPU 团队,他们提供了 Cloud TPU VM 的早期访问权限(现已公开!)。
还要感谢所有以各种方式提供帮助的人士(按字母顺序排列):
- Aran Komatsuzaki,在实验设计和撰写博客文章方面提供了宝贵建议。
- James Bradbury,在调试 JAX 问题时给予了重要帮助。
- Janko Prester,负责创建 Web 示例的前端界面。
- Laurence Golding,为 Web 示例添加了一些功能。
- Leo Gao,为表格中的基准模型运行了零样本评估。
许可证
GPT-J-6B 的权重采用 Apache License 2.0 版本进行授权。
模型详情
| 超参数 | 值 |
|---|---|
| 参数量 | 6,053,381,344 |
| 层数 | 28* |
| 模型维度 | 4,096 |
| 前馈网络维度 | 16,384 |
| 注意力头数 | 16 |
| 每个头的维度 | 256 |
| 上下文长度 | 2,048 |
| 词汇表大小 | 50,257 (与 GPT-2/3 使用相同的分词器) |
| 位置编码 | 旋转位置编码(RoPE) |
| RoPE 维度 | 64 |
* 每层由一个前馈块和一个自注意力块组成。
该模型共有 28 层,模型维度为 4096,前馈网络维度为 16384。模型维度被划分为 16 个注意力头,每个头的维度为 256。旋转位置编码(RoPE)应用于每个头的 64 个维度。模型使用 50257 个词汇的 BPE 分词器进行训练,与 GPT-2 和 GPT-3 使用的分词器相同。
零样本评估
模型大致按性能排序,若无性能数据则按训练浮点运算次数(FLOPs)排序。
| 模型 | 权重 | 训练 FLOPs | LAMBADA PPL ↓ | LAMBADA Acc ↑ | Winogrande ↑ | Hellaswag ↑ | PIQA ↑ | 数据集大小 (GB) |
|---|---|---|---|---|---|---|---|---|
| 随机猜测 | ✔ | 0 | ~很多 | ~0% | 50% | 25% | 25% | 0 |
| GPT-3-Ada‡ | ✘ | ----- | 9.95 | 51.6% | 52.9% | 43.4% | 70.5% | ----- |
| GPT-2-1.5B | ✔ | ----- | 10.63 | 51.21% | 59.4% | 50.9% | 70.8% | 40 |
| GPTNeo-1.3B‡ | ✔ | 3.0e21 | 7.50 | 57.2% | 55.0% | 48.9% | 71.1% | 825 |
| Megatron-2.5B* | ✘ | 2.4e21 | ----- | 61.7% | ----- | ----- | ----- | 174 |
| GPTNeo-2.7B‡ | ✔ | 6.8e21 | 5.63 | 62.2% | 56.5% | 55.8% | 73.0% | 825 |
| GPT-3-1.3B*‡ | ✘ | 2.4e21 | 5.44 | 63.6% | 58.7% | 54.7% | 75.1% | ~800 |
| GPT-3-Babbage‡ | ✘ | ----- | 5.58 | 62.4% | 59.0% | 54.5% | 75.5% | ----- |
| Megatron-8.3B* | ✘ | 7.8e21 | ----- | 66.5% | ----- | ----- | ----- | 174 |
| GPT-3-2.7B*‡ | ✘ | 4.8e21 | 4.60 | 67.1% | 62.3% | 62.8% | 75.6% | ~800 |
| Megatron-11B† | ✔ | 1.0e22 | ----- | ----- | ----- | ----- | ----- | 161 |
| GPT-J-6B‡ | ✔ | 1.5e22 | 3.99 | 69.7% | 65.3% | 66.1% | 76.5% | 825 |
| GPT-3-6.7B*‡ | ✘ | 1.2e22 | 4.00 | 70.3% | 64.5% | 67.4% | 78.0% | ~800 |
| GPT-3-Curie‡ | ✘ | ----- | 4.00 | 69.3% | 65.6% | 68.5% | 77.9% | ----- |
| GPT-3-13B*‡ | ✘ | 2.3e22 | 3.56 | 72.5% | 67.9% | 70.9% | 78.5% | ~800 |
| GPT-3-175B*‡ | ✘ | 3.1e23 | 3.00 | 76.2% | 70.2% | 78.9% | 81.0% | ~800 |
| GPT-3-Davinci‡ | ✘ | ----- | 3.0 | 75% | 72% | 78% | 80% | ----- |
| Gopher 230B* | ✘ | 6.31E+23 | ----- | 74.50% | 70.10% | 79.20% | 81.80% | 1344 |
| MT-NLG 530B*‡ | ✘ | ----- | ----- | 76.6% | 73.0% | 80.2% | 82.0% | ----- |
* 表示由各自作者报告的评估结果,其余数值均由运行 lm-evaluation-harness 工具得出,使用公开权重或 API 接口获取。由于实现细节及零样本任务设定的不同,这些结果可能无法直接比较。更多详情请参阅这篇博客文章。
† Megatron-11B 模型未提供可比指标,且使用其公开权重的多个实现未能复现生成质量和评估结果。(见 1 2 3)因此未进行评估。
‡ 这些模型所用训练数据可能存在测试集污染。OpenAI 的 GPT-3 模型未能针对某些测试集去重训练数据,而 GPT-Neo 模型以及本模型均基于 The Pile 数据集训练,该数据集尚未与任何测试集去重。
架构与使用
本仓库中的大多数脚本设计用于在 TPU 上运行。根据 TPU-VM 架构,TPU-VM 是能够运行任意代码的虚拟机。大多数脚本会启动一个 TPU,通过 SSH 连接到该 TPU 以设置依赖并从本地目录复制代码,随后启动一个 Ray 工作进程,用于接收远程过程调用。
TPU-VM 负责执行模型训练步骤和评估、检查点的保存与加载,而驱动 Python 程序则负责数据加载和整体编排工作(例如何时保存检查点等)。
这意味着大多数脚本(如 train.py、eval_harness.py 等)需要在同一区域的 GCE 虚拟机上运行,以便与 TPU 保持较近的距离,从而降低 RPC 延迟和数据传输成本。其他脚本(通常不带 --tpu 参数的脚本,如 device_sample.py、device_serve.py 或 device_train.py)则需直接在 TPU-VM 上运行。device_* 脚本仅适用于 v3-8 TPU,而不适用于更大规模的 Pod。
此外,还有一个示例脚本 (resharding_example.py) 展示如何将提供的检查点(以 GPT-J-6B 为例,包含 8 个分片)转换为更少的分片数,以便在 GPU 上运行。
微调
要对模型进行微调,请在 TPU VM 上运行 device_train.py。使用 TPU v3-8 时,您可以以约 5000 tokens/秒的速度进行微调,这足以处理中小型数据集。
请阅读逐步指南,以获取详细的微调说明。
JAX 依赖
请注意,此库对 JAX 版本有特定要求。具体而言,要使用 v1 版本的模型(包括 GPT-J 6B),必须安装 jax==0.2.12。这又依赖于 jaxlib==0.1.68。如果不满足此要求,您将遇到难以理解的 xmap 错误。
然而,对于 v2 版本的模型代码(目前尚未公开权重),可以使用最新版本的 JAX。
引用
引用本仓库:
@misc{mesh-transformer-jax,
author = {Wang, Ben},
title = {{Mesh-Transformer-JAX: Model-Parallel Implementation of Transformer Language Model with JAX}},
howpublished = {\url{https://github.com/kingoflolz/mesh-transformer-jax}},
year = 2021,
month = May
}
引用 GPT-J-6B 的权重:
@misc{gpt-j,
author = {Wang, Ben 和 Komatsuzaki, Aran},
title = {{GPT-J-6B: A 6 Billion Parameter Autoregressive Language Model}},
howpublished = {\url{https://github.com/kingoflolz/mesh-transformer-jax}},
year = 2021,
month = May
}
如果您使用本仓库或其中的预训练权重做出了有趣的事情,我们非常乐意了解!欢迎在 GitHub 上提交问题或通过个人资料中的邮箱与我们联系。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器