8月12日,在掘力计划系列第21场《解析大语言模型的训练和应用》活动中,智谱AI的薛宇飞博士应邀作了题为《CodeGeeX:从代码生成模型到AI编程助手》的技术分享。
薛宇飞博士是智谱AI大模型事业部的副总裁,他拥有清华大学计算机系的博士学位和博士后经历,在人工智能领域有多年的研究和产品经验,曾任职于多家顶级科技公司。这次薛博士以自身团队在代码生成模型方面的研究为切入点,详细介绍了从训练一个大规模的通用代码生成模型,到落地产品化并开发IDE插件,最终使广大开发者能够享受到AI编程助手带来的便利。
背景:编程向更简单方向发展
从计算机诞生以来,编程工作就在不断朝着更简单、更符合人的思维逻辑方向发展。早期的机器语言极为复杂难懂,汇编语言相比机器语言提高了可读性和生产效率,然后出现了面向过程和面向对象的高级语言,进一步降低了编程的门槛。近年来,低代码平台的兴起使不专业的开发者也能参与软件开发,AI辅助代码生成技术更是让自动编程成为可能。
自动生成代码的想法随着人工智能技术的进步也在逐步实现。早期主要采用基于规则的方法,2015年第一次有研究将深度学习应用于代码生成,取得了一定进展。2020年, Transformer 架构不仅通过 GPT-3 模型展示它在自然语言生成方面的惊人能力,也开始被应用到了代码生成领域。2021年,OpenAI 推出了规模达到百亿参数的 Codex 代码生成模型,使自动代码生成真正具备实用性。此后,业界纷纷推出自己的代码生成模型和编程助手产品。
CodeGeeX 模型训练
CodeGeeX 项目于2022年1月启动,4月开始正式训练,6月训练完成。训练数据主要来源于公开数据集和 GitHub 高质量代码。公开数据集提供初始训练语料,GitHub 代码经筛选后确保质量。第一版 CodeGeeX 支持23种编程语言,其中 Python、C++、Java 的训练代码量最大。大模型可以从不同语言中学习通用逻辑,不需要语言完全均衡。
原始代码数据需要进行预处理。首先对代码进行分词,然后将每个词转换成对应的ID,得到模型可直接识别的格式。此外,每个代码片段前加语言标识,让模型更好地学习到不同语言的特性。
CodeGeeX 采用GPT结构,包含40个 Transformer 层,参数总量达到130亿。基于GPT的生成方式是顺序生成,每次根据前文预测下一个词。训练过程中团队与华为合作,在华为N腾910 AI处理器上完成。使用FP16精度、数据并行和模型并行训练技术,经过两个月完成。
训练过程中,CodeGeeX团队还与华为N思 MindSpore 团队的工程师一起对训练框架进行了优化。如通过算子融合等技术,将训练速度提升了2.5倍;加入流水线并行后,整体效率可提升3倍之多。这些成果为后续国产芯片的大模型训练带来借鉴。
模型评测与优化
训练完成后,对模型进行评测与优化才能使其投入实际使用。由于之前针对多语言代码生成模型缺乏科学的评测基准,团队基于HumanEval构建了HumanEval-X评测基准,将其从只支持 Python 扩展到 C++、Java、JavaScript 和 Go 五种语言,可以更全面地评估模型的多语言生成能力。
评测结果显示,CodeGeeX 在 Python 和 Java 上的 Pass@1 指标明显优于对手模型,其他语言也有出色表现,是当时综合表现最优的开源多语言代码生成模型。
为减小模型大小便于实际部署,团队使用量化与推理优化技术。最终模型从 27GB 降低到 15GB,推理速度也提升2倍多。基于上述工作,CodeGeeX 能够在普通 GPU 上流畅运行。
AI编程助手应用
代码生成模型完成之后,团队着手开发 IDE 插件,将模型应用到实际编程过程中。CodeGeeX 插件支持 VS Code 和JetBrains 等主流 IDE。用户可以利用代码补全、生成注释等功能,也可以通过自然语言聊天提问。
代码补全可以智能提示后续代码;语义代码注释可自动添加详细注释;代码翻译可以在多种语言之间转换。这些功能都基于 CodeGeeX 模型或在其基础上进行微调得到。用户可以选择中文或英文注释。新版模型支持更多语言,如 Kotlin、Vue 等。
CodeGeeX 插件可以自动生成复杂SQL查询语句,通过公开SQL练习平台的题目,前20题全部正确,最后10题也有很多正确,达到可助力编程的程度。该插件已经累积15万用户,日活跃2.5万,获得广大开发者认可。
CodeGeeX 2.0 模型升级
今年7月团队推出了第二代模型CodeGeeX2-6B。它 使用 ChatGLM2-6B 作为基底模型,在此基础上使用代码数据进行微调。这样一来,新模型规模减小到6B,但效果显著提升,如 Python Pass@1 提升57%,已超过参数规模更大的 StarCoder 模型。
CodeGeeX2 继承了 ChatGLM2 的中英文语言理解能力,支持更长的文本序列。此外,支持语言种类从23种提升到上百种。新版模型权重对学术研究完全开放,可在GitHub或Hugging Face上获取权重的下载及使用方式。
结语
综上所述,CodeGeeX 从一个编程语言生成模型发展成一个可供广大开发者使用的AI编程助手,已经走过两年时间。期间团队进行了模型设计、训练、评估、优化、产品化等一系列创新性的工作。先使用 GPT 结构训练出百亿参数规模的通用模型,然后以 ChatGLM 为基础进行调优,使新版模型效果更优。在 IDE 插件中集成代码生成等功能,真正将AI的力量带入到开发的日常之中。
当前 CodeGeeX 插件已经积累大量用户,也获得他们的认可。团队将继续改进产品,以期让编程对所有人来说都更简单、更有效率。大模型编程助手正在成为编程发展的新方向,相信未来必将惠及更多开发者,提升软件开发的生产力。