CodeGeex论文阅读

《CodeGeeX: A Pre-Trained Model for Code Generation with Multilingual Evaluations on HumanEval-X》

论文地址:https://arxiv.org/pdf/2303.17568.pdf

代码地址:https://github.com/THUDM/CodeGe

一、简介

CodeGeeX,是一个具有130亿个参数的多语言模型,用于代码生成,在23种编程语言的8500亿个token上进行了预训练。

CodeGeeX的特点

(1)CodeGeeX模型本身以及训练代码都是开源的,有助于理解和改进预训练代码模型。也支持在Ascend和NVIDIAGPUs等不同平台上推理。

(2)除了代码生成和代码补全,也支持代码解释和代码翻译。

(3)与知名的代码生成模型相比(CodeGen-16B、GPT-NeoX-20B、InCode-6.7B和GPT-J-6B),CodeGeeX的表现优于其他模型。

二、模型

CodeGeeX是一个具有13B个参数的代码生成模型,由39层从左到右的transformer decoders和一个top query layer组成。它将文本/代码tokens作为输入,并自回归地输出下一个标记的概率

1、使用Transformer为主干。

与GPT-3Codex类似,CodeGeeX也是生成式预训练(GPT)架构,使用纯解码器的GPT架构,采用自回归(编程)语言建模。

CodeGeeX的核心架构是一个39层的transformer解码器。在每个transformer层中,应用了多头自注意力机制,然后是MLP层,以及层归一化和残差连接。使用类GELU的FastGELU,它在Ascend910AI处理器下效率更高:

2、生成式预训练。

通过采用GPT范式,在大量未标记的代码数据上训练模型。其原理是迭代地将代码token作为输入,预测下一个token,预测下一个token并与真实的token进行比较。对于长度为n的任意输入序列 {x1,...xn} ,CodeGeeX的输出都是下一个token的概率分布

 Θ 表示所有参数,v是词表大小。通过将预测token与真实分布进行比较,可以优化交叉熵损失函数:

3、Top Query层和解码层。

原始的GPT使用pooler函数来获得最终的输出。我们在所有transformer层之上使用一个额外的查询层,通过attention获得最终的embedding。top query层的输入被替换为位置n+1的query embedding。最后的输出再乘以词嵌入矩阵的转置,得到输出概率。对于解码策略,贪心、温度采样、top-k采样、top-p采样和beam search。最后,去标记化将把选中的tokenID变成一个实际的单词。

三、预训练设置

1、代码语料库

训练语料库包含两部分。第一部分来自开源代码数据集,Pile和CodeParrot6选择了23种流行的编程语言的文件,包括c++Python,Java,JavaScript,C,Go等。根据每个文件的后缀和它所属的存储库的主要语言来识别其编程语言。第二部分是直接从GitHub公共存储库中抓取的PythonJavac++的补充数据。

将训练数据分成长度相等的片段。为了帮助模型区分多种语言,我们在每个片段之前以[注释符号]language:[LANG]的形式添加了一个特定于语言的标签,例如#language:Python标记。

2、Tokenization

第一步是将代码片段转换为数值向量。考虑到代码数据中存在大量自然语言注释,变量、函数和类的命名通常是有意义的单词,将代码数据视为文本数据并使用GPT-2 tokenizer,它是一种BPE(Byte Pair Encoding)分词器,使用固定大小的词表和可变长度的字符来处理开放词表问题。初始词汇表大小为50,000将多个空格编码为额外的标记,以提高编码效率。具体来说,L个空格用<|extratoken_X|>表示,其中X=8+L。由于词汇表包含来自各种自然语言的标记,因此它允许CodeGeeX处理除英语以外的其他语言的标记,如中文。最终的词表大学是v=52,224。经过分词后,任何代码片段或文本描述都可以转换为整数向量。

3、词嵌入和位置嵌入

给定token,下一步是将每个token与单词嵌入相关联。通过在词嵌入矩 阵中查找token ID,其中h=5120为隐藏大小,为每个token 获得一个可学习的嵌入。为了获取位置信息,我们还采用了可学习的位置嵌入,将当前位置ID从映射到一个可学习的嵌入,其中nmax=2048为最大序列长度。然后,添加两个嵌入以获得模型的输入嵌入。最后,整个序列可以转化为输入嵌入,其中n是输入序列长度。

四、训练

CodeGeeX在 使 用 Mindspore (v1.7.0)的 Ascend 910AI处 理 器 (32GB)集 群 上 进 行 训 练 。  整 个 预 训 练 过 程 在 192个 节 点 和 1536个 AI处 理 器 上 花 费 了 两 个 月 的 时 间 , 在 此 期 间 , 模 型 消 耗 了 850B个token, 相 当 于5个epochs(213000steps)。为了提高训练效率,采用8路模型并行和192路数据并行,并使用ZeRO-2优化器来进一步降低显存消耗。最终,每个节点上的micro-batch size为16,全局batch size为3072。

使用Adam优化器来优化loss。模型权重采用FP16的格式,为了更高的精度和稳定性layer-norm和softmax使用FP32。模型占用GPU显存为27GB。初始学习率为1e-4,并应用cosine学习率衰减:

 

vscode的插件体验

代码翻译功能

1、完全不理解原始代码的意思,会生成一些毫不相干的代码:比如生成的print函数,里面是一堆莫名其妙的逻辑

2、输出的代码语言也不是kotlin,仍然是Java,可能是代码样本数量少的原因

代码理解

对于简单的代码可以正确的理解

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FL Studio Producer Edition v21.0.3.3517 for Mac中文版解锁版下载

水果音乐编辑软件FL Studio Producer Edition v21.0.3.3517 for Mac中文版解锁版下载是兔八哥爱分享搜集到的Mac Os系统上一款功能齐全的音乐编曲工具&#xff0c;可以为需要创作高品质音乐曲目的专业和业余艺术家提供多轨录音&#xff0c;排序和混音。 借助FL Studio 21的帮助…

vue+canvas图片裁切

vuecanvas图片裁切 头像的裁切、图片的一些处理…… vue&#xff1a;路由router、vuex状态管理 组件效果 组件代码&#xff1a; 实现思路 盒子即一张画布&#xff0c;把选择的图片放到画布中进行裁切&#xff0c;按照canvas的一些语法裁切一部分内容。 有一个固定大小的画布&am…

数组的递归筛选

数组递归筛选 根据一个值筛选出来通过 includes 递归 const options [{name: "ikun",options: [{name: "YAY11",},],},{name: "YAY",}, ];function findValue(orgOptions,val) {let newArr1 []orgOptions.forEach(item>{if(item.options…

【windows测试通过】关于Godot导入外部音频文件的问题

file.open(filepath, file.READ) var buffer file.get_buffer(file.get_len()) #put data into audiostreamsample var stream AudioStreamSample.new() stream.data buffer 代码给出&#xff0c;还没有测试过。(godot3.2测试未通过&#xff09; 在运行时轻松加载外部音频…

ROS:动态参数

目录 一、前言二、概念三、作用四、实际用例4.1需求4.2客户端4.2.1流程4.2.2新建功能包4.2.3添加.cfg文件4.2.4配置 CMakeLists.txt4.2.5编译 4.3服务端(C)4.3.1流程4.3.2vscode配置4.3.3服务器代码实现4.3.4编译配置文件4.3.5执行 4.4服务端(Python)4.4.1流程4.4.2vscode配置4…

Kakfa - 多副本架构

文章目录 基本架构Kafka 多副本架构概念优点缺点 图解多副本架构小结 基本架构 Kafka 多副本架构 概念 Kafka 是一个高性能、分布式的消息系统&#xff0c;被广泛应用于各种场景中。在 Kafka 中&#xff0c;多副本架构是保证数据可靠性的重要手段之一。 多副本架构指的是将同…

微信小程序中常见组件的使用

文章目录 微信小程序中常见组件的使用视图组件viewscroll-viewswipermovable-area 基础组件icontextrich-textprogress 表单组件buttoncheckbox、checkbox-grouplabelforminputpicker单列选择器多列选择器时间选择器&日期选择器&地区选择器 picker-viewradiosliderswit…

【protobuf】socket.io序列化和反序列化

1.背景 后台利用socket.io发送websocket消息&#xff0c;加密用到protobuf 2.反序列化时遇到问题 Traceback (most recent call last): File "D:/locust/Nigeria/test3.py", line 40, in <module> play.ParseFromString(decode_spin_str) google.proto…

Java将获取的参数,图片以及pdf文件放入到word文档指定位置

首先引入的依赖 <!-- poi库 --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId&…

【hadoop】HDFS

HDFS 操作HDFSWeb Console 网页工具操作NameNode操作SecondaryNameNode 命令行Java API HDFS的原理解析数据上传的过程数据下载的过程 HDFS的高级特性回收站配额Quota名称配额空间配额 快照Snapshot安全模式 SafeMode权限管理&#xff1a;类似LinuxHDFS的集群 HDFS的底层原理&a…

UART串口通信协议

一、串行通信 串行通信分为两种方式&#xff1a;同步串行通信和异步串行通信。 同步串行通信需要通信双方在同一时钟的控制下&#xff0c;同步传输数据。 异步串行通信是指通信双方使用各自的时钟控制数据的发送和接收过程。 二、UART 通用异步收发传输器&#xff08;Unive…

基于SpringBoot + EasyExcel + Vue + Blob实现导出Excel文件的前后端完整过程

首先前端发起HTTP请求之后&#xff0c;后端返回一个Excel输出流&#xff0c;然后前端用Blob类型接收数据&#xff0c;并且解析响应头数据以及提取源文件名&#xff0c;最后用a标签完成下载。 一、后端代码 &#xff08;1&#xff09;导入阿里巴巴的EasyExcel依赖&#xff08;…

云计算的学习(五)

五、虚拟化特性介绍 1.集群特性 1.1HA HA&#xff08;Hith Available&#xff0c;高可用特性)&#xff0c;克服单台主机的局限性&#xff0c;当一台服务器损坏&#xff0c;运行在损坏服务器上的虚拟机会自动迁移到其他运行状态正常的服务器上&#xff0c;整个迁移过程用户无感…

基于ssm的社区生活超市的设计与实现

博主介绍&#xff1a;专注于Java技术领域和毕业项目实战。专注于计算机毕设开发、定制、文档编写指导等&#xff0c;对软件开发具有浓厚的兴趣&#xff0c;工作之余喜欢钻研技术&#xff0c;关注IT技术的发展趋势&#xff0c;感谢大家的关注与支持。 技术交流和部署相关看文章…

设计模式-外观模式在Java中的使用示例

场景 外观模式 外观模式是一种使用频率非常高的结构型设计模式&#xff0c;它通过引入一个外观角色来简化客户端与子系统 之间的交互&#xff0c;为复杂的子系统调用提供一个统一的入口&#xff0c;降低子系统与客户端的耦合度&#xff0c;且客户端调用非常方便。 示例 自…

让小程序动起来-轮播图的两种方式--【浅入深出系列003】

浅入深出系列总目录在000集 如何0元学微信小程序–【浅入深出系列000】 文章目录 本系列校训学习资源的选择啥是轮播图轮播图的关键代码最常见的轮播图代码便于理解的轮播代码两种轮播代码的比较 实际操练第一步&#xff0c;就是找到文件。第二步&#xff0c;先改动一下最显眼…

HTTP1.1、HTTPS、HTTP2.0 、HTTP3.0

HTTP1.1 优点&#xff1a; 整体方面&#xff1a;简单、灵活和易于扩展、应用广泛和跨平台 性能方面&#xff1a;长连接、管道网络传输解决请求队头阻塞&#xff08;没有使用&#xff09; 缺点&#xff1a; 安全方面&#xff1a;无状态、明文窃听、伪装、篡改 性能方面&am…

基于jeecg-boot的nbcio-boot亿事达企业管理平台发布

目前这个演示系统与代码都同步&#xff0c;以后也尽量保持同步。 更多功能看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/nbcio-boot 前端代码&#xff1a;https://gitee.com/nbacheng/nbcio-vue.git 在线演示&#xff08;包括H5&#xff…

Databend 开源周报第 102 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 为指定列创建 B…

MongoDB

MongoDB概述 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 它支持的数据结构非…