论文阅读_代码生成模型_CodeGeeX

英文名称: CodeGeeX: A Pre-Trained Model for Code Generation with Multilingual Evaluations on HumanEval-X
中文名称: CodeGeeX:一种用于代码生成的预训练模型,并在HumanEval-X上进行多语言评估
链接: https://arxiv.org/abs/2303.17568
代码: https://github.com/THUDM/CodeGeeX 7.6k Starhttps://github.com/THUDM/CodeGeeX2 6.5k Star
作者: Qinkai Zheng, Xiao Xia, Xu Zou, Yuxiao Dong, Shan Wang, Yufei Xue, Zihan Wang, Lei Shen, Andi Wang, Yang Li, Teng Su, Zhilin Yang, Jie Tang
机构: 清华大学, Zhipu.AI, 华为
日期: 2023-03-30
引用次数: 89

1 读后感

这是一篇比较早的论文,于 2022 年 4 月至 6 月期间,在 1,536 个 Ascend 910 AI 处理器集群上,对 23 种编程语言进行了训练,总共使用了超过 850B 个 token,模型于 2022 年 9 月公开发布。

该论文介绍了 CodeGeeX 的第一代技术,而 CodeGeeX2 则基于 ChatGLM2,底层结构转向了 llama2。新版本没有附带新的论文和开源代码。

通过阅读这篇论文,我们可以了解到开发代码生成的起始阶段,包括:现有对基础架构的调整、数据组织和模型评估的过程。从代码实现的角度来看,CodeGeeX 是完全开源的。它使用 Mindspore 作为深度学习框架,而非主流的 torch。不过,它提供了类似于 torch 的调用方法,所以只需简单浏览即可。

与 copilot 相比,CodeGeeX 免费使用的。我的使用体验是:功能差异不大,只是质量稍逊色一些。

2 摘要

目标:介绍 CodeGeeX,一个拥有 130 亿参数的,支持多编程语言的代码生成模型。

方法:CodeGeeX 用 850 B 个 token 进行了模型预训练,涵盖了 23 种编程语言。

结论:实验结果表明,CodeGeeX 在性能上优于规模相似的多语言代码模型。

3 引言

主要贡献

  • 推出了 CodeGeeX,一个 13B 参数的 23 语言代码生成模型,其在代码生成和翻译上超过了同等规模的多语言基线。
  • 为 VS Code、JebBrains 和 Tencent Cloud Studio 开发了 CodeGeeX 扩展插件,比 Copilot 有更多功能,包括代码完成、生成、翻译和解释,且能提高 83.4% 用户的编码效率。
  • 创建了 HumanEval-X 基准测试,以评估多语言代码模型在代码生成和翻译任务的功能正确性,推动对预训练代码模型的理解和发展。

4 实现

4.1 模型架构

基于 Transformer 框架,采用了仅解码器网络进行自回归语言建模。CodeGeeX 的核心架构是一个 39 层的转换器解码器。在每个 Transformer 层中,应用了多头自注意力机制,然后是 MLP 层、层归一化和残差连接。并使用了 FastGELU 激活函数。

采用 GPT 范式,在大量未标记的代码数据上训练模型。

在顶部查询层和解码方面,原始的 GPT 模型使用池函数来获取最终输出。而文中模型在所有其他转换器层之上使用了一个额外的查询层,并通过注意力来获得最终的嵌入。

4.2 预训练

4.2.1 训练数据

训练语料库包含两部分:

第一部分来自开源代码数据集,包括 Pile(Gao 等人,2020 年)和 CodeParrot3。Pile 包含了 GitHub 上星级超过 100 的公共仓库的子集,从中选择了 23 种流行编程语言的文件,包括 C++,Python,Java,JavaScript,C,Go 等。根据每个文件的后缀和它所属仓库的主要语言来确定编程语言。CodeParrot 是来自 BigQuery 的另一个公开的 Python 数据集。

第二部分是直接从 GitHub 公共仓库中抓取的 Python,Java 和 C++ 的补充数据,这些数据在第一部分中没有出现。选择的仓库至少有一个星级,总大小在 10MB 以内,然后过滤掉那些:1)平均每行超过 100 个字符的文件,2)自动生成的文件,3)字母比例小于 40% 的文件,4)大于 100KB 或小于 1KB 的文件。按照 PEP8 标准格式化 Python 代码。

4.2.2 Tokenization

考虑到 1)代码数据中存在大量自然语言注释,2)变量、函数和类的命名通常是有意义的词,将代码数据与文本数据相同,并应用 GPT-2 标记器。由于词汇表包含来自各种自然语言的标记,因此它允许 CodeGeeX 处理英语以外的语言的标记,如中文、法语、俄语、日语等。最终的词汇量为 52,224 。

4.2.3 输入词和位置嵌入

在给定 tokens 后,每个 token 会与一个词嵌入相关联,同时也会获取位置信息的嵌入。这两种嵌入相加后形成模型的输入嵌入,最后整个序列被转换为输入嵌入。

4.3 训练

在 Ascend 910 上进行并行训练。CodeGeeX 在带有 Mindspore(v1.7.0)的 Ascend 910 AI 处理器(32GB)集群上进行了训练。与 NVIDIA GPU 和 PyTorch/TensorFlow 相比,Ascend 和 Mindspore 相对较新。整个预训练过程需要两个月的时间,在 192 个节点和 1,536 个 AI 处理器上,850B 代币,相当于 5+ 个 epoch(213,000 步)。

4.4 快速推理

为了提供预训练的 CodeGeeX,实现了一个纯 PyTorch 版本的 CodeGeeX,它支持在 NVIDIA GPU 上进行推理。为了实现快速且节省内存的推理,将量化和加速技术应用于预训练的 CodeGeeX。

量化前后对比如下:

5 评测

主实验结果如下:

后面的 CodeGeeX2 相比 CodeGeeX 又好很多,下图取自 CodeGeeX2 github。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/268928.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java开发】Java实现调用微信机器人,发送企业微信通知

请直接看原文: 【Java开发】Java实现调用微信机器人,发送企业微信通知_java 企业微信推送机器人消息-CSDN博客 ------------------------------------------------------------------------------------------------------------------------------- 企业微信机器…

代码随想录day11(1)字符串:反转字符串中的单词 (leetcode151)

题目要求:给定一个字符串,将其中单词顺序反转,且每个单词之间有且仅有一个空格。 思路:因为本题没有限制空间复杂度,所以首先想到的是用split直接分割单词,然后将单词倒叙相加。 但如果想让空间复杂度为O…

算法day03_ 59.螺旋矩阵II

推荐阅读 算法day01_ 27. 移除元素、977.有序数组的平方 算法day02_209.长度最小的子数组 目录 推荐阅读59.螺旋矩阵 II题目思路解法 59.螺旋矩阵 II 题目 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形…

基于 Amazon EKS 的 Stable Diffusion ComfyUI 部署方案

01 背景介绍 Stable Diffusion 作为当下最流行的开源 AI 图像生成模型在游戏行业有着广泛的应用实践,无论是 ToC 面向玩家的游戏社区场景,还是 ToB 面向游戏工作室的美术制作场景,都可以发挥很大的价值,如何更好地使用 Stable Dif…

每日一题 — 盛水最多的容器

11. 盛最多水的容器 - 力扣(LeetCode) 思路: 因为体积是长度乘高,所以运用双指针,一个在最左,一个在最右,每次都记录体积 V ,然后比较左边的长度和右边的长度,左边的长度…

http和https的区别是什么?

–前言 传输信息安全性不同、连接方式不同、端口不同、证书申请方式不同 一、传输信息安全性不同 1、http协议:是超文本传输协议,信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。 2、h…

红队基础设施建设

文章目录 一、ATT&CK二、T1583 获取基础架构2.1 匿名网络2.2 专用设备2.3 渗透测试虚拟机 三、T1588.002 C23.1 开源/商用 C23.1.1 C2 调研SliverSliver 对比 CS 3.1.2 CS Beacon流量分析流量规避免杀上线 3.1.3 C2 魔改3.1.4 C2 隐匿3.1.5 C2 准入应用场景安装配置说明工具…

#WEB前端(CCS常用属性,补充span、div)

1.实验: 复合元素、行内元素、块内元素、行内块元素 2.IDE:VSCODE 3.记录: span为行内元素:不可设置宽高,实际占用控件决定分布空间。 div为块内元素:占满整行,可以设置宽高 img为行内块元…

Vue-03

Vue指令 v-bind 作用:动态设置html的标签属性(src url title…) 语法:v-bind:属性名"表达式" 举例代码如下: 实现效果如下: 案例:图片切换 实现代码如下: 实现的效果…

[RAM] DDR5 自带双通道

主页: 元存储博客 文章目录 前言1. 为什么DDR5要在一个dimm里面设计两个channel?2. 前言 DDR5 是第 5 代双倍数据速率同步动态随机存取内存,又称 DDR5 SDRAM。DDR5 是在 2017 年由行业标准机构 JEDEC推动的,DDR5 产品 问世于 202…

LSA头部结构简述

LSA(Link State Advertisement)是一种用于路由协议头部结构,用于在网络中传递路由信息。 LSA头部结构包含以下几个字段: 1、LSA类型(LSA Type):指示LSA的类型,不同类型的LSA用于传递…

python二级常见题目

一.常见语法 jieba—第三方中文分词函数库 jieba—第三方中文分词函数库_jieba库函数-CSDN博客 Python基础——format格式化 Python基础——format格式化_python format-CSDN博客 format()方法的使用超全_format方法-CSDN博客 Python中random函数用法整理 Python中random…

换个角度看境外支付系统:警惕金融风险之安全测试实践

【面试突击班】1. 性能测试主要关注哪些指标? ,这个名词相信生活在当下社会的大家应该都不在陌生了吧,他时时刻刻充斥在我们的日常生活中,哪里有交易发生,哪里就有它的身影。 其实直白的来说,支付系统是扮…

java面试题(spring框架篇)(黑马 )

树形图: 一、Spring框架种的单例bean是线程安全吗? Service Scope("singleton") public class UserServiceImpl implements UserService{ } singleton:bean在每个Spring IOC容器中只有一个实例 protype:一个bean的定义可以有多个…

ES系列之Logstash实战入门

概述 作为ELK技术栈一员,Logstash用于将数据采集到ES,通过简单配置就能把各种外部数据采集到索引中进行保存,可提高数据采集的效率。 原理 数据源提供的数据进入Logstash的管道后需要经过3个阶段: input:负责抽取数…

游戏框架搭建

使用框架的目标:低耦合,高内聚,表现和数据分离 耦合:对象,类的双向引用,循环引用 内聚:相同类型的代码放在一起 表现和数据分离:需要共享的数据放在Model里 对象之间的交互一般有三…

RH850P1X芯片学习笔记-Generic Timer Module -ATOM

文章目录 ARU-connected Timer Output Module (ATOM)OverviewGLOBAL CHANNEL CONTROL BLOCK ATOM Channel architectureATOM Channel modesSOMP-Signal Output Mode PWMSOMP - ARUSOMC-Signal Output Mode CompareSOMC - ARUSOMC – COMPARE COMMANDSOMC – OUTPUT ACTIONATOM …

计算机设计大赛 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向&#xff0c…

YOLOv5-Openvino和ONNXRuntime推理【CPU】

1 环境: CPU:i5-12500 Python:3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包,主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…

接口自动化测试实战经验分享,测试用例也能自动生成

作为测试,你可能会对以下场景感到似曾相识:开发改好的 BUG 反复横跳;版本兼容逻辑多,修复一个 BUG 触发了更多 BUG;上线时系统监控毫无异常,过段时间用户投诉某个页面无数据;改动祖传代码时如履…