mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7
2848 字
8 分钟
CodeGeeX:国产代码开山
2026-07-16

CodeGeeX 论文解读:国产代码大模型的开山之作,用23种编程语言证明了一件事#

论文:CodeGeeX: A Pre-Trained Model for Code Generation with Multilingual Benchmarking on HumanEval-X 作者:Qinkai Zheng, Xiao Xia, Xu Zou, Yuxiao Dong, … Zhilin Yang, Jie Tang(清华大学 KEG 实验室) arXiv: 2303.17568 | 发表于 KDD 2023 这是智谱在代码领域的第一枪,也是国内最早开源的多语言代码生成大模型之一。130亿参数、8500亿tokens代码语料、覆盖23种编程语言——在2022年那个时间点,这个规模相当能打。更重要的是,它顺手搞了个 HumanEval-X 评测基准,把代码生成评测从”Python only”拉到了多语言维度。如果你要理解 GLM 系列怎么从通用语言模型扩展到代码领域,这篇是绕不开的起点。


一、先说背景:2022年的代码AI是什么局面#

2022年年中,代码生成这个赛道基本被 OpenAI 的 Codex 霸着。Codex 是 GPT-3 在代码上微调的产物,驱动着 GitHub Copilot,Python 代码生成确实强。但问题是——它只支持 Python,而且不开源。

开源阵营呢?Meta 的 InCoder、Salesforce 的 CodeGen 是主力选手,但训练数据量跟 Codex 差着量级。而且大家都在卷 Python,多语言代码生成基本是个无人区。

CodeGeeX 的出现填补了一个空白:一个开源的、多语言的、规模够大的代码预训练模型。它不是简单地把 GPT 架构换个数据源,而是从数据配比、训练策略到评测基准都做了系统性设计。

二、架构:GPT-style 但堆得很实在#

CodeGeeX 用的是 GPT-style decoder-only transformer,具体来说是一个 39层的 transformer decoder

核心参数摆一下:

  • 隐藏层维度:5,120
  • 前馈层维度:20,480
  • 注意力头数:40
  • 最大序列长度:2,048
  • 词表大小:52,224
  • 位置编码:可学习位置嵌入(Learnable Positional Embeddings)
  • 激活函数:FastGELU
  • Dropout:0.1

总参数量 13B,在2022年算是代码模型里的”大块头”了。对比一下:InCoder 最大 6.7B,CodeGen 最大 16B。CodeGeeX 卡在中间,但训练数据量是它的绝对优势。

解码策略支持贪心、温度采样、Top-K、Top-P 和 Beam Search——该有的都有,工程上比较完备。

一个值得注意的设计:它没有用后来流行的 RoPE,而是用了传统的可学习位置嵌入。这在2022年完全合理,RoPE 的大规模应用要到后面 ChatGLM2 时期才普及。

三、训练数据:8500亿tokens的”代码百科全书”#

这是 CodeGeeX 最硬的家底。

训练语料总量 8500亿 tokens,覆盖 23种编程语言,数据截止到 2022年6月。原始代码语料约 158B tokens,但因为训练跑了 5 个 epoch 以上,实际消耗了 213,000 步。

语言分布很能说明问题:

  • C++:28.5%
  • Python:26.7%
  • Java:16.0%
  • JavaScript:7.1%
  • C:6.7%
  • Go:4.7%

你看,Python 并不是占比最高的——C++ 才是。这跟后来很多模型”Python 优先”的策略不一样。CodeGeeX 从一开始就想做”全栈语言覆盖”,不是只服务 Python 开发者。

这种配比其实很有远见。在实际工业场景中,C++、Java 的代码量远大于 Python,一个只会写 Python 的代码模型实用性有限。

四、训练基础设施:昇腾芯片上的”暴力美学”#

这一节我特别想聊,因为它代表了中国 AI 算力自主化的一次重要实践。

CodeGeeX 的训练跑在 1,536 颗昇腾 910 AI 处理器上,使用 MindSpore v1.7.0 框架。具体配置:

  • 192 个节点,每节点 8 颗处理器
  • 8路模型并行 + 192路数据并行
  • 使用 ZeRO-2 优化器并行
  • 全局 batch size:3,072
  • 优化器:Adam,余弦学习率衰减(从 1e-4 到 1e-6)
  • Warmup:2,000 步;衰减:200,000 步

整个训练持续了 两个月

更关键的是训练效率的优化:通过工程调优,日吞吐量从 24.2B tokens 提升到 54.3B tokens,单步时间从 15秒 压缩到 10秒。提升超过 120%。

为什么我要强调这个?因为这是在昇腾芯片上做的。2022年,在国产AI芯片上跑通13B规模的模型训练,本身就是一个工程里程碑。它证明了国产算力基础设施可以支撑大模型训练,不是纸上谈兵。

五、HumanEval-X:给多语言代码评测立了个规矩#

这是论文的另一大贡献——HumanEval-X 评测基准。

在 HumanEval-X 之前,代码生成的标准评测就是 OpenAI 的 HumanEval(164道 Python 题)。你想比多语言?没有统一基准,各家各说各话。

HumanEval-X 的设计:

  • 164 道编程题 × 5种语言(Python、C++、Java、JavaScript、Go)= 820 个问题-解答对
  • 评测指标:pass@k(n=200, k=1/10/100)
  • 支持两个任务:代码生成跨语言代码翻译(20个翻译方向)

这个设计的精妙之处在于:同一道题,五种语言都有标准答案,这样就能公平比较不同模型在不同语言上的表现。而且翻译任务直接衡量模型对多种语言的”理解深度”——你不光要会写这种语言,还要理解另一种语言的代码在干什么。

六、实验结果:13B vs 16B,以小博大#

代码生成#

CodeGeeX 的 HumanEval-X 平均 pass@1:18.40%

对比:

模型参数量平均 pass@1
GPT-J-6B6B7.90%
GPT-NeoX-20B20B9.78%
InCoder-6.7B6.7B11.33%
CodeGen-Multi-6B6B14.28%
CodeGen-Multi-16B16B16.73%
CodeGeeX13B18.40%

看到了吗?CodeGeeX 用 13B 参数干赢了 CodeGen 的 16B。参数量少 20%,分数高 10%。这就是数据质量和数据量的优势。

分语言来看:Python 22.89% 最高,Go 14.43% 最低。这个分布很合理——Go 的生态和训练数据相对少,模型表现自然弱一些。

代码翻译#

翻译任务更刺激。20个翻译方向,CodeGeeX 微调版(CodeGeeX-13B-FT)在 11/20 个方向上拿到最佳 pass@100。

几个亮点数字:

  • Java → Python:pass@1 达到 75.03%,pass@100 达到 95.13%
  • C++ → Python:pass@1 62.79%,pass@100 87.10%
  • JavaScript → Python:pass@1 67.63%,pass@100 89.30%

翻译进 Python 和 C++ 是 CodeGeeX 的强项;翻译进 JavaScript 和 Go 则是 CodeGen 更强。这说明两个模型的”语言偏好”不同,跟训练数据配比直接相关。

七、推理部署:INT8量化,速度翻倍#

模型再好,跑不起来也白搭。CodeGeeX 在推理优化上做了 INT8 量化

  • 显存占用:从 ~26.9GB 降到 14.7GB,降幅 45.4%
  • 配合 FasterTransformer,128 tokens 生成只需 1.61秒,约 13ms/token

这个速度在2022年的代码补全场景里完全够用。你想想,一个程序员打字的速度大概也就每秒2-3个token,模型13ms一个token,比人快多了。

八、实际应用:每周47亿tokens的代码补全#

论文最后披露了一个运营数据:CodeGeeX 的 IDE 插件每周生成 47亿 tokens 的代码补全,83.4% 的用户反馈编码效率有所提升。

这个数字放在2022-2023年是非常可观的。它说明 CodeGeeX 不只是个学术成果,而是真正跑在了开发者日常工具里。后来 CodeGeeX 插件成了 VS Code 和 JetBrains 生态里最流行的国产AI编程助手之一。


收尾:我的一点看法#

第一,CodeGeeX 的历史意义大于它本身的性能数字。 18.40% 的 pass@1 放在今天看不算什么——GPT-4 级别的模型早把 HumanEval 刷到 90%+ 了。但在2022年,一个开源的、多语言的、13B规模的代码模型,它的存在本身就是突破。它给国内开发者提供了一个不依赖 OpenAI API 的选择,这在当时的地缘政治环境下意义重大。

第二,HumanEval-X 的贡献被低估了。 一个好的评测基准比一个好的模型更持久。模型会过时,基准会一直被引用。直到今天,多语言代码生成的论文还在用 HumanEval-X 做对比,这就是它的影响力。

第三,昇腾训练这件事值得被记住。 在 NVIDIA 一家独大的时代,用 1,536 颗昇腾 910 跑通 13B 模型训练,这不仅是技术验证,更是产业备份。如果有一天 A100/H100 真的完全断供,这段经验就是救命稻草。

第四,从技术路线看,CodeGeeX 是 GLM 家族”从通用到垂直”的关键一步。 智谱后来的 CodeGeeX2、CodeGeeX3 都是在这个基础上迭代的。它验证了一件事:GLM 的技术栈可以迁移到代码领域,而且效果不差。

总的来说,CodeGeeX 不是一篇”惊艳”的论文——没有石破天惊的新架构,没有碾压级的性能数字。但它是一篇”扎实”的论文,解决了正确的问题,在正确的时间点,用正确的方式。在 AI 发展史里,这种”正确但朴素”的工作往往比炫技更值钱。


附:核心数据速查#

项目数值
总参数量13B
架构39层 GPT-style decoder
隐藏层维度5,120
注意力头数40
最大序列长度2,048
词表大小52,224
训练数据总量850B tokens(23种语言)
训练硬件1,536 × 昇腾 910
训练时长~2个月
HumanEval-X 平均 pass@118.40%
HumanEval-X 题目数164 × 5语言 = 820对
翻译任务最优方向11/20(pass@100)
INT8 量化显存14.7GB(↓45.4%)
推理速度~13ms/token
周生成代码量4.7B tokens

关键概念清单#

术语解释
HumanEval-XCodeGeeX 提出的多语言代码生成评测基准,覆盖5种语言、164道题
pass@k代码生成评测指标:生成k个候选答案,至少一个正确的概率
GPT-style decoder仅含解码器的 Transformer 架构,自回归生成
Learnable Positional Embeddings可学习位置嵌入,每个位置一个可训练向量
ZeRO-2零冗余优化器第二阶段,对梯度和优化器状态做分片
INT8 量化将模型权重从 FP16/FP32 压缩到 8bit 整数,减少显存占用
FasterTransformerNVIDIA 的高效 Transformer 推理引擎
代码翻译将一种编程语言的代码自动转换为另一种编程语言
MindSpore华为开发的深度学习框架,CodeGeeX 训练所用
昇腾 910华为 AI 训练芯片,CodeGeeX 训练的算力基础
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

CodeGeeX:国产代码开山
https://mizuki-eaf.pages.dev/posts/glm/codegeex国产代码开山/
作者
无名之子
发布于
2026-07-16
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录