mesh-transformer-jax

GitHub
6.4k 884 困难 1 次阅读 今天Apache-2.0语言模型开发框架
AI 解读 由 AI 自动生成,仅供参考

mesh-transformer-jax 是一个基于 JAX 和 Haiku 构建的开源库,专为在 TPU 集群上高效训练和推理大规模 Transformer 模型而设计。它核心解决了单设备显存无法容纳巨型模型的难题,通过利用 JAX 的 xmappjit 算子实现“模型并行”策略,将超大模型拆分到多个加速器上协同计算。其并行方案借鉴了 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
GPU
  • 非必需(主要设计用于 TPU)
  • 若需在 GPU 上运行,需使用 resharding_example.py 将模型权重分片转换,具体显存需求取决于分片策略和模型大小(原版 GPT-J-6B 需多卡或多机并行),未指定具体 CUDA 版本
内存

未说明(取决于模型规模和并行策略,TPU VM 架构下由云端实例决定)

依赖
notes该工具主要设计用于 Google Cloud TPU v3 环境(特别是 TPU-VM 架构),利用 xmap/pjit 算子进行模型并行。GPT-J-6B 模型必须使用特定旧版 JAX (0.2.12) 和 jaxlib (0.1.68),否则会报错。脚本通常需要在与 TPU 同一区域的 GCE 虚拟机上运行以协调任务,或直接登录 TPU-VM 运行设备脚本(仅限 v3-8 配置)。若要在 GPU 上运行,需手动对检查点进行重分片(resharding)。
python未说明
jax==0.2.12 (用于 v1 模型/GPT-J-6B)
jaxlib==0.1.68 (用于 v1 模型/GPT-J-6B)
ray
haiku
mesh-transformer-jax hero image

快速开始

目录

  1. Mesh Transformer JAX
    1. 更新
  2. 预训练模型
    1. GPT-J-6B
      1. 链接
      2. 致谢
      3. 许可证
      4. 模型详情
      5. 零样本评估
  3. 架构与使用
    1. 微调
    2. JAX依赖
  4. 待办事项

Mesh Transformer JAX

一个基于 JAX 的俳句库,利用 xmap/pjit 操作符实现 Transformer 模型的模型并行。

该并行化方案类似于 原始的 Megatron-LM,由于其高速的二维网格网络,在 TPU 上表现高效。此外,还有一个实验性的模型版本实现了 ZeRo 风格的分片

此库的设计目标是在 TPUv3 上实现约 400 亿参数规模的可扩展性,超过这一规模则应采用其他并行化策略。对于更大规模的模型,并行化,可以参考其他实现,如 GPT-NeoXDeepSpeed 等。

未来的一个研究方向是将此代码库与 swarm-jax 集成,以通过流水线并行进一步提升可扩展性。

更新

2021年7月12日:新增微调指南

预训练模型

GPT-J-6B

一个拥有 60 亿参数的自回归文本生成模型,基于 The Pile 数据集训练而成。

链接

下载精简权重(仅 bf16 权重,用于推理,9GB)

下载完整权重(包含优化器参数,61GB)

部分训练检查点

Colab 示例

Web 示例

Aran 的博客文章

致谢

本项目离不开 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.pyeval_harness.py 等)需要在同一区域的 GCE 虚拟机上运行,以便与 TPU 保持较近的距离,从而降低 RPC 延迟和数据传输成本。其他脚本(通常不带 --tpu 参数的脚本,如 device_sample.pydevice_serve.pydevice_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),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|2周前
开发框架图像Agent

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 真正成长为懂上

160.4k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

109.2k|★★☆☆☆|昨天
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像

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 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架