从0到1:如何建立一个大规模多语言代码生成预训练模型

2023-11-18

国产AI辅助编程工具CodeGeeX是一个使用AI大模型为基座的辅助编程工具,帮助开发人员更快的编写代码。可以自动完成整个函数的编写,只需要根据注释或Tab按键即可。它已经在Java、JavaScript和Python等二十多种语言上进行了训练,并基于大量公开的开源代码、官方文档和公共论坛上的代码来优化自己的算法。CodeGeeX作为一款中国原创的AI辅助编程工具,现在免费提供给所有开发者使用,同时完全开源,程序员使用普遍认为编写代码的效率提升2倍以上。

核心功能包括:代码生成与智能补全、自动为代码添加中英文注释、在不同编程语言的代码之间实现准确翻译,包括刚刚更新的“Ask CodeGeeX”功能,是将智能问答模式,融合到实际开发场景中,让开发者更专注和沉浸于编程,不用离开当前 IDE 的编程环境,就可以边写代码边和 AI 对话,实现针对编程问题的智能问答。无需waitlist,立刻就能尝鲜这些核心功能!

大家看看在CodeGeeX上的体验是怎样的: file

file

这里推荐各位免费下载使用AI辅助编程工具CodeGeeX

CodeGeeX的背后,是一个开源的大规模多语言代码生成模型。这个模型最大的特点就是全国产化实现。CodeGeeX 连接了自然语言到代码的一个交互过程,用户是通过写注释的形式让它生成特定的代码,也可以把一种语言的代码翻译成另外一种语言的代码,或者为已有的代码加上一些注释。2022年9 月 CodeGeeX 开源插件免费开放使用,目前已经有10万+程序员安装使用,下载量超过270万+次,每天为程序员生成超过数百万行代码。

那么,CodeGeeX背后的大规模多语言代码生成预训练模型是如何从 0 到 1 建立起来的?主要有以下几个步骤: file

第一,大规模代码数据收集。 训练的数据主要分为两个部位:一是,开源数据集。比如 The Pile 里的代码子集,以及 CodeParrot (Python)等;二是,额外爬取数据。从 GitHub 上爬优质的开源仓库并照一系列规则清洗数据。最终整个语料库有 23 种编程语言,涵盖 Python,Java, C++,JavaScript, C,Go,HTML, Rust, C#等主流语言,数据量超过 1580 亿 token。接下来,数据处理形式也非常简单,首先,将代码数据分词并标识符化,即将代码片段进行分词,得到 token 序列,再将 token 对应到词表中的 ID,得到 ID 序列;其次,就是为不同语言的文件加上语言标签,在经过充分的学习以后,二十几种语言的语法模型是可以完全掌握。

第二,CodeGeeX 模型架构。 CodeGeeX 模型基于 GPT 架构的自回归模型,由 40 层 transformer 组成,总计参数量达 130 亿。它使用自然语言或代码 token 作为输入,输出下一个 token 的概率,支持各种编程语言相关的下游任务,如代码生成、代码补全、代码翻译、代码注释等。同时,在架构实现的过程中做了许多设计,包括每一个算子需要用哪些精度,才能保证模型训练的稳定性等等。

第三,CodeGeeX模型训练。 CodeGeeX基于华为 Mindspore 框架实现,总共用到了 1536 张昇腾 910AI 处理器,相当于 1500 多张 GPU ,进行了长达两个月的训练。在混合精度训练方面,大部分的参数是用 FP16 作为精度,但在以往的实践中发现,如果全部的参数都是 FP16,在一些计算的节点上有些算子很容易有一个精度溢出,模型就会训崩掉,所以在 Layernorm、Softmax 地方会使用 FP32 保证稳定性。同时,训练采用了一个并行训练的策略,就是 192 路数据并行和 8 路模型并行。在漫长训练之后,CodeGeeX 训练了 8500 亿的 token,基本上把GitHub 上爬到的代码全部都见过了一遍。

第四,CodeGeeX 模型评估。 如何正确评估代码生成的性能?过去比较常用多语言代码基准 CodeXGLUE, XLCoST 均使用 CodeBLEU/BLEU 作为评价指标,它其实是在算一个语义相似性,但在代码任务上并不能正确反映生成代码的质量,已不满足当前评估代码生成模型的需求。在模型评估上,CodeGeeX 把 HumanEval 数据集,也就是一个已有的 Python 数据集,扩展到了更多的语言上,包括 C++、Java、JavaScript、Go等,形成了HumanEval-X。这个数据集的特点就是,给模型输入包括必要的引用文件、描述做的是什么任务,然后可能会有一两个输入输出的例子让模型去把函数补全,就可以用已经写好测试代码和测试用例去做一个自动化测试,就知道模型写出来的代码到底正不正确。可以说,CodeGeeX 是目前平均性能最好的开源多语言代码生成模型。

第五,CodeGeeX代码生成插件。 未来让 CodeGeeX 模型真正实用化,开发了 VS Code/Jetbrains 上的自动代码生成插件,提供多种交互模式,支持代码生成、补全、翻译、注释等功能,免费使用,更好辅助程序员开发。我们对上百名用户进行问卷调研,涵盖前后端工程师、算法工程师、学生、研究者等,83.4% 的用户认为CodeGeeX 插件有助于提高编程效率,但具体提高了多少还有待进一步研究。同时,不同语言上的表现是不一样的,比如 PHP 语言就会弱一些,这也是今后提升的目标,争取在更多的语言上达到更好的效果。

第六,CodeGeeX 开源开发计划。 CodeGeeX 虽然是在昇腾上训练,但也移植到了英伟达,实现跨平台模型代码训练、微调、推理、测评代码等等,用户可以在官网申请下载,在本地就可以部署起一套跟CodeGeeX 基本上一样的一套流程。

像 MicroSoft Copilot、GitHub Copilot X 、CodeGeeX在 AIGC 应用场景会越来越多,并且极大地提高生产力。可以预见,人类正在加速通向 AGI 时代,在接下来几个月内肯定有更多的产品形态出来,不用担心,拥抱变化就可以了。

本文由博客一文多发平台 OpenWrite 发布!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从0到1:如何建立一个大规模多语言代码生成预训练模型 的相关文章

  • Inno Setup 如何让生成的setup.exe文件有管理员权限

    首先 在 Setup 段 PrivilegesRequired admin 然后 找到INNO安装目录下的SetupLdr e32文件 将程序中的Manifest更改一下 用reshacker这类工具改 这样运行程序的时候 Windows
  • AI实战营第二期 笔记5——MMPretrain代码课

    文章目录 摘要 MMPreTrain实战 安装 推理 OR 使用API 数据集 训练与测试 微调 摘要 MMPretrain 是一个全新升级的预训练开源算法框架 旨在提供各种强大的预训练主干网络 并支持了不同的预训练策略 MMPretrai
  • angular2 router中的路由跳转navigate

    navigate是Router类的一个方法 主要用来跳转路由 函数定义 navigate commands any extras NavigationExtras Promise
  • 人工智能(crawler)—— 爬虫综合

    目录 内容简介 第一章 爬虫简介 1 1 什么是网络爬虫 1 1 1 爬虫的简单定义 1 1 2 爬虫的分类 1 2 为什么需要爬虫 1 2 1 爬虫的用途 1 2 2怎么做爬虫 第二章 爬虫的基本常识 2 1 爬虫的合法性问题 2 2 爬
  • QT按钮显示和隐藏

    创建GroupBox 将按钮放置进去 ui groupBox gt setGeometry 100 100 150 50 int x ui groupBox gt geometry x int y ui groupBox gt geomet
  • Flutter 层叠布局组件

    文章目录 Flutter 层叠布局组件 简述 Stack 基本使用 fit属性 alignment属性 Stack Positioned IndexedStack Flutter 层叠布局组件 简述 Stack组件可以将子元素叠加显示 类似
  • 解放原画师!Wav2Lip 用 AI 听音同步人物口型

    By 超神经 内容提要 眼见为实 在 AI 技术面前已经失效了 换脸 对口型的技术层出不穷 效果越来越逼真 今天要介绍的 Wav2Lip 模型 只需一段原始视频与目标音频 就可将其合二为一 关键词 唇形同步 语音信号 近几年 好莱坞动画屡屡
  • 数据结构----链式栈

    目录 前言 链式栈 操作方式 1 存储结构 2 初始化 3 创建节点 4 判断是否满栈 5 判断是否空栈 6 入栈 7 出栈 8 获取栈顶元素 9 遍历栈 10 清空栈 完整代码 前言 前面我们学习过了数组栈的相关方法 链接 线性表 栈 栈
  • 最小外接矩形思路以及实现

    最小外接矩形 外接矩形计算 对一个凸多边形进行外接矩形计算 需要知道当前面的最大xy 和最小xy值 即可获得外接矩形 最小外接矩形计算 对凸多边形的每一条边都绘制一个外接矩形求最小面积 下图展示了计算流程 计算流程 旋转基础算法实现 旋转点
  • Network Compression 网络压缩

    网络压缩 Network Compression 就是把一个大的网络压缩成一个小的网络 现如今 手机设备 手表等都比较流行 但我们平常训练的网络都比较大 在一些 小 的设备或许很难存储和运行 所以这就需要把网络进行压缩 常用的方法 Netw
  • Shell脚本编写教程

    Shell脚本编写教程
  • 为什么栈的数组长度必须是一个常量?而堆的数组长度可以是变量。为什么栈的大小有限制?

    为什么栈的数组长度必须是一个常量 而堆的数组长度可以是变量 栈区数组长度使用变量会报错 其原因就在于栈是编译器管理的 在程序运行前就已经分配好了空间的大小 而使用变量 编译器无法知道该分配多大的内存空间 于是报错 但堆上的内存是动态创建的
  • Scala简介

    目录 一 Scala简介 1 1 概念 1 2 特点 1 3 Scala的优点 二 Scala基本数据类型和运算符 一 数据类型 1 1 类型支持 1 2 定义变量 1 3 类型推断 1 4 Scala解释器 二 字面量 2 1 整数字面量
  • linux系统安装五笔输入法,Linux下安装五笔输入法

    想体验一下Ubuntu10 10 由于我在Windows下用惯了五笔输入法 装上Ubuntu后一直为装不上理想的五笔输入法而烦恼 幸得高人帮忙 才解决了这一难题 心里那个是痛快啊 开始在网上搜索 查得的结果不尽如人意 一会缺少这个 一会又得
  • R-CNN史上最全讲解

    文章目录 一 初识R CNN 网络结构 二 训练步骤 1 RP的确定 2 模型pre training 3 Fine Tunning 4 提取并保存RP的特征向量 5 SVM的训练 6 bbox regression的训练 三 测试步骤 s
  • MySQL8--Windows下使用msi(图形界面)安装的方法

    原文网址 MySQL8 Windows下使用msi 图形界面 安装的方法 的博客 CSDN博客 简介 本文介绍Windows使用图形界面安装MySQL8的方法 下载地址 1 网址入口 进入MySQL的官方网站 https dev mysql
  • 后端开发缓存篇之缓存及缓存模式的介绍

    一 什么是缓存 缓存 简单说就是为了节约对原始资源重复获取的开销 而将结果数据副本存放起来以供获取的方式 二 什么时候使用缓存 1 以 幂等和安全的方式对资源的获取操作 2 缓存数据必须是重复获取的 缓存能生效的本质是空间换时间 缓存的命中
  • Centos 7 升级Openssh7.4到9.2

    本次使用在线升级 因此要求系统yum wget等功能能正常使用 环境 cat etc redhat release CentOS Linux release 7 6 1810 Core ssh V OpenSSH 7 4p1 OpenSSL
  • wired xdisplay只能复制无法拓展

    我出现的问题是ipad可以复制屏幕 但是在系统显示设置中却没有显示有第二块屏幕 如果显示有第二块屏幕 直接win p调成拓展就可以解决了 如果出现的问题和我一样 可以按下面步骤解决 1 ipad和桌面端连接 2 PC端xDisplay 高级

随机推荐

  • 微软和Facebook推出Docs.com

    来源 德胜网 4月22日 据国外媒体报道 Facebook和微软在联手一项在线文件共享服务 看起来多一点像Google Docs 周三在Facebook的F8会议Docs com上线 该网站允许Facebook用户使用Facebook连接登
  • 2.虚拟机CentOS7.6安装SOA

    1 安装JDK8 1 1检查是否自带OpenJDK rpm qa grep jdk 卸载openjdk sudo yum y remove java openjdk 验证是否卸载了openjdk 1 2上传安装包 解压安装包 tar zxv
  • Seata源码分析——@GlobalTransactional

    Seata源码分析 GlobalTransactional 前言 脑图 Seata三大角色 GlobalTransactional 源码入口 GlobalTransactionScanner 初始化TM RM wrapIfNecessary
  • 软考:中级软件设计师:多媒体基础,音频,图像,颜色,多媒体技术的种类,图像音频视频的容量计算,常见的多媒体标准

    软考 中级软件设计师 多媒体基础 提示 系列被面试官问的问题 我自己当时不会 所以下来自己复盘一下 认真学习和总结 以应对未来更多的可能性 关于互联网大厂的笔试面试 都是需要细心准备的 1 自己的科研经历 科研内容 学习的相关领域知识 要熟
  • 第24讲 Python 复数数据类型详解(complex)

    您的 关注 和 点赞 是认可 是支持 是动力 如意见相佐 可留言 本人必将竭尽全力试图做到准确和全面 终其一生进行修改补充更新 本文首发在IT羊资源网 IT羊资源网 网址 https www ityangzy com IT羊资源网是IT世界
  • 我30岁了,转行学编程可以吗? 排除法告诉你答案 ...

    我30岁了 转行学编程可以吗 排除法告诉你答案 白月黑羽网站的读者在群里问过好几次 这个问题 但是这个问题太笼统了 其实不好回答 白月黑羽的这篇博客将根据的你的自身状况 不断的添加 自身条件的假设 采用排除法 认真的回答这个问题 既然有 转
  • ImageJ按照Little-Endian格式存储raw文件

    opencv图像处理是针对little endian数据 多帧堆叠情况下 否则结果错误 下面介绍如何用imageJ存储raw 参考 https imagej nih gov ij docs menus file html 1 在ImageJ
  • 毕设 STM32的FRID高速收费系统(源码+硬件+论文)

    文章目录 0 前言 1 主要功能 2 系统架构 3 硬件设计原理图 4 软件设计流程 称重模块HX711模块子流程 步进电机子流程 5 关键代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和
  • Python库这么多,如何记住呢?

    大家不要着急去收藏Python库 了解python的一些常用库就可以了 具体学到什么方向可以找个项目直接做 过程中接触到什么库再去学 下面给大家介绍几种查找Python库的方法 一 查看官方文档 要知道有哪些 大家可以查看官方文档 比如常用
  • 关键字static的理解

    1 概念 像在VB C C C Java PHP Objective C JavaScript中我们可以看到static作为关键字和函数出现 在其他的高级计算机语言如FORTRAN ALGOL COBOL BASIC LISP SNOBOL
  • Kotlin - 文件类 File

    文件操作 遍历 walk 自上而下 深度优先 遍历整个文件夹 walkBottomUp 自下而上的顺序遍历文件目录和内容 walkTopDown 自上而下的顺序遍历文件目录和内容 名称 extension 文件名的后缀格式 不包含 例如 m
  • [激光原理与应用-45]:《焊接质量检测》-2- 常见焊接缺陷与检验方法

    目录 一 概述 二 焊接缺陷的分类 2 1 按产生原因 2 2 按性质分有 2 3 按在焊缝中的位置分有 三 焊接缺陷检验的常用方法 一 概述 对于一个金属结构来说 焊接检验就是对所有焊缝或焊接接头而言的 也就是对焊接缺陷的检验 但焊接接头
  • idea 编译成功启动失败

    环境 Windows10 IntelliJ IDEA 2021 2 3 Ultimate Edition Apache Maven 3 8 3 SpringBoot版本 2 1 13 RELEASE 问题描述 SpringBoot项目启动时
  • html输入浮点型,input框限定输入值为浮点型代码分享

    本文主要为大家带来一篇对于input 框限定输入值为浮点型的js代码 小编觉得挺不错的 现在就分享给大家 也给大家做个参考 一起跟随小编过来看看吧 希望能帮助到大家 在一些项目中 比如金额用到浮点型 对于input 限定可以参考以下 fun
  • 信创-大数据平台CPU架构支持

    一 CDH和HDP CDP CDP数据中心类似于CDH和HDP 直接安装在硬件服务器上 目前支持市面上主流的X86服务器 包括国内海光服务器 CDH不支持ARM 以上两种大数据平台都仅支持x86架构 早在几年期RedHat联手clouder
  • IntelliJ Idea 常用快捷键 列表(实战终极总结!!!!)

    自动代码 常用的有fori sout psvm Tab即可生成循环 System out main方法等boilerplate样板代码 例如要输入for User user users 只需输入user for Tab 再比如 要输入Dat
  • SQL BOY 4 款脚本工具利器

    对于正在运行的mysql 性能如何 参数设置的是否合理 账号设置的是否存在安全隐患 你是否了然于胸 俗话说工欲善其事 必先利其器 定期对你的MYSQL数据库进行一个体检 是保证数据库安全运行的重要手段 今天和大家分享几个mysql 优化的工
  • Java多线程工具类之循环栅栏计数器

    Java多线程下循环计数器 本文主要内容 CyclicBarrier 下文中凯哥就用cycBar来代替 定义介绍 举例说明 代码演示 从源码来看原理及总结 CyclicBarrier与CountDownLatch 下文就用CountDown
  • 多分类SVM支持向量机的matlab仿真

    目录 一 理论基础 二 核心程序 三 仿真结论 一 理论基础 支持向量机 Support Vector Machine SVM 是一种在统计学习基础上发展起来的机器学习方法 其最大特点是根据Vapnik结构风险最小化原则 它的基本模型是定义
  • 从0到1:如何建立一个大规模多语言代码生成预训练模型

    国产AI辅助编程工具CodeGeeX是一个使用AI大模型为基座的辅助编程工具 帮助开发人员更快的编写代码 可以自动完成整个函数的编写 只需要根据注释或Tab按键即可 它已经在Java JavaScript和Python等二十多种语言上进行了