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,可能是代码样本数量少的原因

代码理解

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

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

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

相关文章

银河麒麟高级服务器操作系统V10安装mysql数据库

一、安装前 1.检查是否已经安装mysql rpm -qa | grep mysql2.将查询出的包卸载掉 rpm -e --nodeps 文件名3.将/usr/lib64/libLLVM-7.so删除 rm -rf /usr/lib64/libLLVM-7.so4.检查删除结果 rpm -qa | grep mysql5.搜索残余文件 whereis mysql6.删除残余文件 rm -rf /usr/b…

【多线程】(六)Java并发编程深度解析:常见锁策略、CAS、synchronized原理、线程安全集合类和死锁详解

文章目录 一、常见锁策略1.1 乐观锁和悲观锁1.2 读写锁1.3 重量级锁和轻量级锁1.4 自旋锁1.5 公平锁和非公平锁1.6 可重入锁和不可重入锁 二、CAS2.1 什么是CAS2.2 CAS的实现原理2.3 CAS应用2.4 ABA问题 三、synchronized原理3.1 synchronized锁的特点3.2 加锁工作过程3.3 锁消…

reggie优化06-项目部署

1、部署架构 2、部署环境 3、部署前端 4、部署后端 修改图片位置&#xff0c;并push至仓库

解决find: ‘/run/user/1000/gvfs’: 权限不够

问题描述 在用find查找对应的文件时&#xff0c;突然报错这个问题 解决办法 其实这个目录是空的&#xff0c;所以删除就好了执行下列操作&#xff1a; umount /run/user/1000/gvfs rm -rf /run/user/1000/gvfs 之后的查找中就没有了报错提示。

uniapp动态获取列表中每个下标的高度赋值给另一个数组(完整代码附效果图)

uniapp实现动态获取列表中每个下标的高度&#xff0c;赋值给另一个数组。 先看效果图&#xff1a; 完整代码&#xff1a; <template><div class""><div class"">我是A列表&#xff0c;我的高度不是固定的</div><div class&qu…

【MySQL】MySQL在Centos7环境下安装

目录 一、卸载不要的环境 1.1、查看是否有安装mysql 1.2、关闭运行的程序 1.3、卸载安装 二、配置yum 源 2.1、下载yum 源 2.2 安装yum源 2.3 查看是否已经生效 三、安装mysql服务 四、启动服务 五、登录方法 方法一&#xff08;不行就下一个&#xff09; 方法二&#xff08;不…

数据库应用:MySQL数据库SQL高级语句与操作

目录 一、理论 1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.MySQL中6种常见的约束 二、实验 1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.主键表和外键表 三、总结 一、理论 1.克隆表与清空表 克隆表&#xff1a;将数据表的数据记录…

英码积极参与行业交流活动,“快、易、省”赋能更多企业具备AI能力

2023年&#xff0c;ChatGPT的火爆引发了算力需求的大爆发&#xff0c;有人说&#xff0c;边缘计算因兼具时延低与安全等优势&#xff0c;或将成为解决AI算力紧张的良方&#xff1b;在人工智能产业发展的推动下&#xff0c;边缘计算成为了众人瞩目的焦点。随着应用场景的多元化和…

redis穿透问题

1.概述 一个热点数据在高并发情况下过期时间到了&#xff0c;会导致大量流量查询redis为null&#xff0c;进而请求数据库进行更新数据&#xff0c;从流量上来说请求打到了数据库上&#xff0c;这种情况可能会造成mysql服务崩溃。 2. 解决方式之一&#xff08;加锁解决之本地锁&…

【天工Godwork精品教程】天工3.1.7安装教程(附Godwork完整版下载地址)

本文讲解天工3.1.7安装过程(附Godwork完整版网盘下载地址)。 文章目录 一、天工3.1.7安装教程1. 安装GodWork-AT 3.1.72. 安装GodWork-AT 3.1.7补丁3. 安装GodWork-EOS-Setup-2017B-12314. 安装GodWork-EOS补丁5. 运行godwokr软件6. 生成ZC码7. 输入ZC码8. eos插件调用二、天…

Nginx代理Grafana,鉴权访问以及Grafan免登录访问

✨概述 在使用grafana做页面嵌入的场景中&#xff0c;通常需要grafana与前端在同域下&#xff0c;方便鉴权、解决跨域。 Nginx代理Grafana后&#xff0c;就不能使用Grafana中默认配置的端口和路径进行访问&#xff0c;必须通过Nginx访问Grafana。 如果需要做Iframe嵌入自研系…

Python、Selenium实现问卷星自动填写(内含适配个人问卷的方法)

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Py…