GLM-130B 论文解读:清华把 1300 亿参数的双语大模型,整个儿开源了
论文:GLM-130B: An Open Bilingual Pre-trained Model 作者:Aohan Zeng, Xiao Liu, Zhengxiao Du 等 19 人(清华 KEG / 智谱) arXiv: 2210.02414,ICLR 2023 如果说上一篇 GLM 是”宪法”,那这篇就是第一次把宪法落成实打实的”大国重器”。1300 亿参数、中英双语、4000 亿 token、768 张 A100 训了 60 天——然后把权重、代码、训练日志、工具包一股脑全开源。这是 ChatGLM 的直接基座,也是那个年代少数几个你能真正下载、真正复现的千亿模型。
一、先说背景:2022 年,你想下一个千亿模型有多难
先把时间拨回 2022 年年中。那会儿的开源社区是什么光景?
GPT-3 已经出来两年了,1750 亿参数,但权重不开源,你只能用 API。Google 的 PaLM、Switch Transformer 一个比一个大,但都是只发论文不给模型。国内的 ERNIE TITAN 3.0 号称 2600 亿参数,也是看得见摸不着。
也就是说,对一个普通研究者、一个想搞中文大模型的小团队来说,局面是这样的:你知道千亿模型存在,你知道它大概怎么训的,但你拿不到它、复现不了它、更别提在它基础上做自己的东西了。整个领域被少数几家闭源玩家攥在手里。
GLM-130B 就是冲着这个局面来的。它的定位一句话:做一个完全开源、可复现、中英双语的千亿级基座模型。注意”完全”两个字——不是只放个权重,是权重、代码、训练日志、复现工具包全放。这在当时的千亿模型里,几乎找不到第二家。
这件事的战略意义,怎么强调都不过分。它等于给整个中文社区递了一把枪:你不用再从零开始证明”千亿模型能不能训出来”,人家已经训好、开源、还把踩过的坑写成日志给你看了。你要做的是直接站在它肩膀上,去做指令微调、去做 ChatGLM、去做你自己的应用。
后面的历史证明,这把枪打出去,正中靶心。
二、架构:GLM 骨架 + 一堆为稳定性堆的料
模型架构还是继承上一篇的 GLM 填空骨架,但往 1300 亿这个规模上堆的时候,换了一堆更硬的零件。我把规格先摆出来:
- 参数总量 1300 亿
- 70 层 Transformer
- 隐藏维度 12288,96 个注意力头
- 词表约 15 万,用自研的 icetk 分词器
- 位置编码用 RoPE,激活用 GeGLU,归一化用 DeepNorm
这里面有三个点值得单独拎出来讲,因为它们都是”为了在 FP16 下把 1300 亿稳稳训完”而专门挑的。
词表:icetk,一个为中英双语省 token 的分词器
icetk 是智谱自研的分词器,词表大概 15 万(其中约 13 万是文本 token,还预留了一部分给图像码本——名字里的”ice”就是 image 和 text 的意思,天生为多模态留了口子)。
为什么要专门搞一个?因为中文用 GPT 那套 BPE 分词特别吃亏。GPT 的词表是英文优先的,一个中文字经常被切成两三个 token,等于同样的中文文本,你要多花一倍以上的 token 才能表达完。训练和推理都按 token 算钱,这就是纯纯的浪费。
icetk 针对中英双语一起优化,中文的压缩效率高得多。同样的中文句子,用 icetk 分出来的 token 数明显更少。这意味着两件事:一是训练时同样的算力能看到更多中文内容,二是推理时生成中文更快更便宜。这个设计对”中文友好”是实打实的加成,后来 ChatGLM 的中文表现好,这儿是有底子在的。
DeepNorm:把 1300 亿稳住的关键一招
1300 亿参数、70 层深,最大的敌人不是算不动,是训不稳。层数一深,梯度要么爆炸要么消失,训着训着 loss 就飞了。
GLM-130B 用的是 DeepNorm。简单说,它是在 Post-LN(归一化放在残差之后)的基础上,给残差连接和初始化各乘了一个跟深度相关的缩放系数。效果是:你可以把 Transformer 堆到上千层还不用那么小心翼翼地调学习率。原论文(DeepNet)宣称能稳到 1000 层,GLM-130B 这 70 层对它就是小菜一碟。
配合 DeepNorm,他们还把所有 bias 都初始化为 0,进一步降低早期训练的不稳定。这一套组合拳,是 1300 亿能在 60 天里一路训到底、不中途崩盘的重要保障。
RoPE + GeGLU:跟着当时最优解走
位置编码用 RoPE(旋转位置编码),激活函数用 GeGLU(GLU 门控 + GeLU 激活)。这两个都是当时已经被证明在大规模下表现最好的选择,GLM-130B 没有在这俩上标新立异,就是稳稳地拿来用。这其实也是一种成熟——把创新预算花在刀刃上(双语、开源、稳定性),而不是每个零件都要自己造一遍。
三、训练:4000 亿 token、768 张 A100、60 天
数据:中英各 2000 亿,真正的双语
这是 GLM-130B 最核心的差异化之一。训练数据总共 4000 亿 token:
- 英文 2000 亿:主要来自 Pile
- 中文 2000 亿:来自 WuDaoCorpus(悟道)加上自采的中文语料
中英 1<1>1>。这个配比很重要。当时很多号称”多语言”的模型,中文占比低得可怜,本质还是英文模型带了个中文补丁。GLM-130B 是真金白银地砸了 2000 亿中文 token,这是它中文能力强的根本来源。
训练目标上,95% 的 token 走 GLM 那套自回归填空,剩下 5% 走多任务提示训练(Prompted Training)——就是把各种下游任务改写成”挖空填空”的形式混进去一起训。这 5% 相当于在预训练阶段就提前让模型见了几十个任务的题型,为后面的零样本/少样本能力打底。
填空本身也分两种:短空 [MASK](挖得短,偏理解)和长空 [gMASK](挖掉一大段甚至一整句,偏生成),两种混着用,比例大概是 30% 短空、70% 长空。这样理解和生成两头都照顾到——这是上一篇 GLM 那个”旋钮”思想在大规模上的直接落地。
算力:96 台 DGX-A100,60 天
训练用了 96 台 DGX-A100,每台 8 张 A100 40G,加起来 768 张 A100,连续训了约 60 天。并行策略是三维混合并行:数据并行 + 4 路张量并行 + 8 路流水线并行。
FP16 而不是 BF16:一个很有态度的选择
这里有个细节特别能体现这个团队的品味。训练精度上,他们选了 FP16 混合精度,而不是当时更流行、更省心的 BF16。
为什么?因为 BF16 只有 A100 这类新卡才支持,FP16 几乎所有 GPU 都支持。选 FP16,是为了让模型将来能在更多样的硬件上复现和推理——包括国产硬件。这个选择是有代价的:FP16 的数值范围比 BF16 窄,更容易溢出,训练稳定性更难搞。
果然,训练中途他们就遇到了 loss 突刺(loss spike)。团队把这事完整复盘了,定位到根因是 embedding 层的梯度在 FP16 下溢出。解法有两手:一是跳过出问题的 batch,二是给 embedding 层的梯度乘一个 0.1 的缩放系数(梯度缩减),把它压回 FP16 能表示的范围。
最难得的是,他们把这次踩坑和解决过程,原原本本写进了开源的训练日志里。别人是报喜不报忧,他们是把摔跤的姿势也拍给你看。这种透明度,对复现者来说是真金白银。
四、性能:英文打 GPT-3,中文碾压同门
数字摆出来:
| 基准 | GLM-130B | GPT-3 175B | 差距 |
|---|---|---|---|
| LAMBADA(零样本) | 80.2 | 76.2 | +5.0% |
| MMLU(5-shot) | 44.8 | 43.9 | +0.9pp |
| Big-Bench-lite | 更优 | — | 领先 |
英文上,GLM-130B 整体优于 GPT-3 175B。考虑到它参数还更少(1300 亿 vs 1750 亿)、训练 token 量也更克制,这个结果是很硬的。
中文上更夸张,对比当时国内最强的 ERNIE TITAN 3.0(2600 亿参数):
| 基准 | GLM-130B 相对 ERNIE TITAN 3.0 |
|---|---|
| CLUE | +24.26% |
| FewCLUE | +12.75% |
注意,对面是 2600 亿参数,GLM-130B 只有 1300 亿,用一半的参数量,把中文理解基准拉开 24 个点。这就是 2000 亿中文 token + icetk 高效分词 + GLM 填空框架三者叠加的威力。中文这块,GLM-130B 在当时基本是独孤求败。
五、开源:这才是全篇最重的一笔
性能再强,如果这篇论文只是又一个”看得见摸不着”的千亿模型,它的历史地位会大打折扣。真正让它成为里程碑的,是开源的深度。
GLM-130B 放出来的东西包括:
- 完整模型权重
- 全部训练代码
- 完整的训练日志(包括那次 loss spike 的复盘)
- 复现工具包(从数据预处理到多机训练的全套)
- 量化与推理加速工具
而且不是只能在 A100 上跑。它支持的平台横跨一大票硬件:NVIDIA A100、海光 DCU、华为昇腾 910,甚至神威超算。一份权重,多种国产硬件都能跑起来——这背后就是前面坚持用 FP16 而不是 BF16 埋的伏笔。
INT4 量化:4 张 3090 就能跑 1300 亿
更贴心的是,他们还做了 INT4 量化。1300 亿参数,FP16 下要 260GB 显存,普通人根本碰不起。但做成仅权重 INT4、激活仍用 FP16之后,整个模型压到约 70GB——这意味着 4 张 RTX 3090(或者 8 张 RTX 2080 Ti)就能把它跑起来。
而且量化后的精度损失极小:LAMBADA 只掉了 0.74%,MMLU 甚至几乎没变(+0.05%)。也就是说,一个实验室、甚至几个博士生凑几张消费级显卡,就能跑动并研究一个千亿双语模型。这在 2022 年,是把大模型研究的门槛直接踹下来了一大截。
这个”量化下放”的动作,我认为是全篇最被低估的贡献之一。它让 GLM-130B 不只是一个 SOTA 数字,而是一个真正能被社区用起来、改起来的基础设施。ChatGLM 后来的爆发,根子就在这里。
六、承上启下:ChatGLM 的直接基座
最后交代一下它在系列里的位置。
往上,GLM-130B 继承的是上一篇 GLM 的填空框架,把”自回归填空 + 二维位置 + Prefix-LM 掩码”放大到了 1300 亿,并用中英双语和工程稳定性证明了这套框架在大规模下依然成立。
往下,它就是 ChatGLM 的直接基座。后面 ChatGLM-6B、ChatGLM 系列,本质都是在这套 GLM 骨架上做指令微调和对话优化。可以说,没有 GLM-130B 这个开源的千亿基座把路趟出来,就没有后来 ChatGLM 在中文社区的燎原之势。
它是从”理论框架”到”开源生态”之间的那座桥。
收尾:我的一点看法
这篇论文最了不起的地方,不是任何一个单点技术,而是**“完全开源”这个决定本身**。在 2022 年那个闭源玩家垄断千亿模型、所有人都在拿 API 说事的年代,清华团队选择把 1300 亿参数的权重、代码、日志、工具包一股脑放出来,还附带一份踩坑复盘。这不是一个技术决策,这是一个生态决策。它赌的是”把地基送出去,能换来一整片森林”,后来 ChatGLM 的爆发证明这个赌赢了。
第二个让我佩服的是那种”为别人着想”的工程品味。坚持用 FP16 而不是 BF16,就为了让更多硬件能复现;专门做 INT4 量化,就为了 4 张 3090 也能跑;自研 icetk,就为了中文少花 token。这些选择每一个都不是为了刷自己的 SOTA,而是为了降低别人的门槛。一个团队愿不愿意为社区牺牲一点自己的便利,是能看出格局的。GLM-130B 处处透着这种格局。
第三个是诚实。把 loss spike 这种训练事故完整写进日志、公开复盘根因和解法——这在当时是极其罕见的。大部分团队报喜不报忧,GLM-130B 却把摔跤的姿势也拍给你看。对想复现的人来说,这份”失败经验”比成功配方更值钱。
当然也有局限。放在今天看,1300 亿、4000 亿 token 已经算不上大了,MMLU 44.8 这个绝对分数在今天也只是入门水平。它的中文虽强,但中英 1<1>1> 的配比也意味着它的英文知识密度其实不如纯英文喂出来的模型。而且 GLM 那套填空+Part A/Part B 的结构,实现复杂度比纯自回归高,这也是后来社区里 GLM 路线相对小众的原因之一。
但我始终认为,评价一个模型不能只看它自己的跑分,还要看它释放了什么。GLM-130B 释放的是整个中文大模型社区的想象力——它让”训一个千亿双语模型”从一个只属于巨头的传说,变成了任何团队都能下载、能复现、能改进的现实。就凭这一点,它在中文 AI 史上的位置,无可替代。
附:核心数据速查
模型规格
| 指标 | 数值 |
|---|---|
| 参数量 | 1300 亿 |
| 层数 | 70 |
| 隐藏维度 | 12288 |
| 注意力头 | 96 |
| 词表 | ~15 万(icetk,~13 万文本 token) |
| 位置编码 / 激活 / 归一化 | RoPE / GeGLU / DeepNorm |
训练配置
| 项目 | 数值 |
|---|---|
| 训练数据 | 4000 亿 token(中英各 2000 亿) |
| 训练目标 | 95% 自回归填空 + 5% 多任务提示 |
| 空类型 | ~30% 短空 [MASK] + ~70% 长空 [gMASK] |
| 算力 | 96 台 DGX-A100(768 张 A100 40G) |
| 时长 | 约 60 天 |
| 并行 | 数据 + 4 路张量 + 8 路流水线 |
| 精度 | FP16 混合精度(为兼容更多硬件) |
性能对比
| 基准 | GLM-130B | 对手 | 差距 |
|---|---|---|---|
| LAMBADA(零样本) | 80.2 | GPT-3 76.2 | +5.0% |
| MMLU(5-shot) | 44.8 | GPT-3 43.9 | +0.9pp |
| CLUE | — | ERNIE TITAN 3.0 | +24.26% |
| FewCLUE | — | ERNIE TITAN 3.0 | +12.75% |
开源与部署
| 项目 | 内容 |
|---|---|
| 开源内容 | 权重 + 代码 + 训练日志 + 复现工具包 |
| 支持硬件 | NVIDIA A100 / 海光 DCU / 昇腾 910 / 神威 |
| INT4 量化 | ~70GB,4×RTX 3090 可跑,精度几乎无损 |
关键概念清单
- GLM-130B = 清华/智谱的 1300 亿开源双语基座模型
- icetk = 自研中英多模态分词器(image + text,词表 ~15 万)
- DeepNorm = Post-LN + 深度相关缩放,稳定超深 Transformer
- RoPE = Rotary Positional Embedding(旋转位置编码)
- GeGLU = GLU 门控 + GeLU 激活的组合
- [MASK] / [gMASK] = 短空(偏理解)/ 长空(偏生成)标记
- Prompted Training = 把下游任务改写成填空形式混入预训练
- FP16 / BF16 = 两种半精度格式,FP16 兼容更广、BF16 数值更稳
- Loss Spike = 训练中途的损失突刺,这里由 embedding 梯度溢出引起
- 梯度缩减 = 给 embedding 梯度乘 0.1,压回 FP16 可表示范围
- 3D 并行 = 数据 + 张量 + 流水线三维混合并行
- INT4 量化 = 仅权重 4 比特,激活保持 FP16,显存压到 ~70GB
- CLUE / FewCLUE = 中文理解 / 中文少样本理解基准
- LAMBADA / MMLU = 英文长程依赖 / 多学科知识基准
- ERNIE TITAN 3.0 = 百度 2600 亿中文模型(当时的对比对象)
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时





