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的生成方式是顺序生成,每次根据前文预测下一个词。训练过程中团队与华为合作,在华为昇腾910 AI处理器上完成。使用FP16精度、数据并行和模型并行训练技术,经过两个月完成训练。
训练过程中,CodeGeeX团队还与华为昇思 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二代模型升级
今年7月团队推出了第二代模型CodeGeeX2-6B。它 使用 ChatGLM2-6B 作为基底模型,在此基础上使用代码数据进行微调。这样一来,新模型规模减小到6B,但效果显著提升,如 Python Pass@1 提升57%,已超过参数规模更大的 StarCoder 模型。
HumanEval (Pass@1,10,100)
ModelPass@1Pass@10Pass@100CodeGen-16B-multi19.234.655.2CodeGeeX-13B22.939.660.9Codex-12B28.846.872.3CodeT5Plus-16B-mono30.951.676.7Code-Cushman-00133.554.377.4LLaMA-65B23.7-79.3LLaMA2-70B29.9--CodeGen2.5-7B-mono33.458.482.7StarCoder-15B33.26184.7CodeGeeX2-6B35.962.688.3
HumanEval-X (Pass@1)
ModelPythonC++JavaJavaScriptGoRustOverallCodeGen-16B-multi19.218.11518.4131.814.2CodeGeeX-13B22.917.12017.614.44.316Replit-code-v1-3B2220.120.120.112.28.617.2CodeGen2.5-7B-multi30.624.32927.518.920.125.1StarCoder-15B35.528.231.533.221.317.827.9CodeGeeX2-6B35.929.330.832.222.518.128.1
CodeGeeX2 继承了 ChatGLM2 的中英文语言理解能力,支持更长的文本序列。此外,支持语言种类从23种提升到上百种。新版模型权重对学术研究完全开放,可在GitHub或Hugging Face上获取权重的下载及使用方式。
结语
综上所述,CodeGeeX 从一个编程语言生成模型发展成一个可供广大开发者使用的AI编程助手,已经走过两年时间。期间团队进行了模型设计、训练、评估、优化、产品化等一系列创新性的工作。先使用 GPT 结构训练出百亿参数规模的通用模型,然后以 ChatGLM 为基础进行调优,使新版模型效果更优。在 IDE 插件中集成代码生成等功能,真正将AI的力量带入到开发的日常之中。
当前 CodeGeeX 插件已经积累大量用户,也获得他们的认可。团队将继续改进产品,以期让编程对所有人来说都更简单、更有效率。大模型编程助手正在成为编程发展的新方向,相信未来必将惠及更多开发者,提升软件开发的生产力。
关于掘力计划
掘力计划由稀土掘金技术社区发起,致力于打造一个高品质的技术分享和交流的系列品牌。聚集国内外顶尖的技术专家、开发者和实践者,通过线下沙龙、闭门会、公开课等多种形式分享最前沿的技术动态。
知网论文要钱期间费用的论文家庭小论文典论论文读后感艾青论文论文议题半导体材料论文电力发展论文论文的要旨供应室论文租船论文酒香也怕巷子深议论文与国际贸易有关的论文工程事故论文论文的任务要求怎么写论文中的引用会查重吗淘宝运营论文论文研究不足之处怎么写小学教育专业毕业论文选题学会变通800字议论文独立议论文800字创业梦论文预则立不预则废议论文本科论文查重查哪些部分珍惜当下议论文800字祥林嫂论文以智慧为话题的议论文公园景观论文乌镇论文高二议论文范文800字心智论文论文索引格式关于选择的议论文800字保护环境人人有责论文论文比较分析法研究生发表论文要求知识与命运议论文双11论文柳宗元论文医疗卫生论文遗传病的论文学前教育毕业论文完整版写医学论文用什么软件系统仿真论文机械硕士论文毕业论文高铁万圣节论文黄庭坚论文陈皮论文科研类论文政工论文网论文中的绪论会计专业本科论文机械制造与自动化论文题目灯光设计论文中学美术论文关于挫折的议论文800字论文评阅人贫困是一笔财富议论文民族教育论文论文总复制比绿豆论文山东省优秀学位论文图书信息管理系统论文研究生论文中期检查报告伪装 论文论文降重软件免费版献爱心议论文论文表格重复小论文标题光小论文价值观的议论文医学检验本科毕业论文执勤论文皮亚杰论文论文格式案例谈改革论文好的小论文药士论文杂文是议论文吗论文查重20话说诚信议论文换位思考的议论文素材论文查重比例合格标准俄语专业导论论文调研型论文起点的议论文法学毕业论文范文大全把握今天议论文循证医学论文怎么写党章论文论文图表查重云教学论文论文标题范文毕业论文的题目怎么取民诉法论文选题成功在于尝试议论文农业专业论文甄嬛论文施工类论文改正缺点议论文论文拼接诚信是做人之本议论文一年级数学论文范文生活科技论文洗钱论文论文答辩翻译以矛盾为话题的议论文chatgpt论文写作人力资源管理毕业论文题目新闻编辑论文有关医学检验的论文哄抢议论文中老年眼病论文武威论文分寸议论文承载力论文茶花女的论文中国济分析论文两课论文211论文护理论文发表网自驾游论文科技创新论文2000字中式家具论文关于植物的科学小论文新能源汽车技术的论文论文讲述博士学位论文字数要求课程开发论文典论论文读后感银川论文八达岭论文欲速则不达高中议论文狐狸与葡萄的论文本科生能发表论文吗财务管理专业的论文选题英语毕业论文查重关工委论文大学生创业论文3000字公法的论文spe论文西班牙语毕业论文题目数学思维论文机器人技术论文论文发表重复率百合花论文议论文的基本结构是原子吸收论文金融导论论文企业团队论文著作权法论文我身边的经济学论文物流英文论文电力系统及其自动化论文淘宝网店论文思想政治教育专业论文选题物流学年论文脑外科论文本科论文毕业后还查吗关于网红的论文地质专业论文中国药科大学毕业论文抗战议论文电大行政管理专科论文徐悲鸿论文偶然议论文采茶论文自动变速器论文土木工程论文网发论文查重吗唯品会的论文非盈利会计论文会计学本科毕业论文选题历史系论文论文logo手工制作论文议论文突围取样论文专业论文润色公司武士道论文茶健康论文议论文作文网利用chatgpt写论文现场管理论文sci论文第二作者有用吗艺术素养论文杭电论文顾城的论文人际关系与沟通技巧论文策划案论文惯性力论文硕士论文没过英语毕业论文翻译方向维普数据库论文查询孝敬的议论文平安论文奖灵芝论文碰撞的议论文电灯论文