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

国产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 时代,在接下来几个月内肯定有更多的产品形态出来,不用担心,拥抱变化就可以了。

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

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

相关文章

【图形学】探秘图形学奥秘:DDA与Bresenham算法的解密与实战

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《图形学 | 图像解码》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 ​ 目录 🌌1. 初识模式识别…

sklearn岭回归

文章目录 基本原理sklearn实现 基本原理 最小二乘法的判定条件是 min ⁡ w ∥ X w − y ∥ 2 2 \min_w\Vert Xw-y\Vert_2^2 wmin​∥Xw−y∥22​ 其中, min ⁡ w F ( w ) \min_w F(w) minw​F(w)表示 F ( w ) F(w) F(w)最小时的 w w w; w w w是拟合参数…

恢复 iPhone 和 iPad 数据的 10 个好工具 - [苹果数据恢复]

它发生了.. 有时您需要从您的手机或平板设备恢复重要数据。 许多人已经开始将重要文件存储在手机上,因为他们几乎可以在任何情况下随时随地轻松访问数据。 不言而喻; 您可以轻松访问您的电子邮件、共享图片、编辑和共享文档、支付账单等等,只需在您的手…

python图像处理总结

等我有时间了,好好总结一下这几个图像处理包,为后面的研究做个铺垫 skimage包 可以用系统自带的图片,不用自己找图片 from skimage.io import imread, imshow from skimage import data image data.astronaut() imshow(image)后面可以拿这…

Spring Boot - JaCoCo Code Coverage

文章目录 概述如何集成pom添加插件Code Demo排除不相关的类CI/CD中使用完整POM 概述 JaCoCo(Java Code Coverage)是一个开源的Java代码覆盖率工具,它主要用于评估Java程序的测试完整性。通过跟踪测试过程中执行的代码,JaCoCo能够…

网络安全技术新手入门:利用永恒之蓝获取靶机控制权限

目录 前言 一、搜索永恒之蓝可用模块 二、使用攻击模块 三、配置攻击模块 四、攻击 五、总结 前言 相关法律声明:《中华人民共和国网络安全法》第二十七条 任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动&…

关联规则分析(Apriori算法2

目录 1.核心术语:2.强关联规则:小结: 1.核心术语: 支持度(Support):指项集出现的频繁程度(相当于项集出现的概率) 最小支持度有绝对值和占比两种表示方式 置信度&#…

【河海大学论文LaTeX+VSCode全指南】

河海大学论文LaTeXVSCode全指南 前言一、 LaTeX \LaTeX{} LATE​X的安装二、VScode的安装三、VScode的配置四、验证五、优化 前言 LaTeX \LaTeX{} LATE​X在论文写作方面具有传统Word无法比拟的优点,VScode作为一个轻量化的全功能文本编辑器,由于其极强的…

linux GDB and GDB Sever

概念: GDB(GNU Debugger)是一个用于调试程序的强大工具。它是GNU项目的一部分,支持多种编程语言,包括C、C等。GDB 提供了一组命令和功能,允许跟踪检查程序的内部状态,跟踪代码的执行过程&#…

C++ 实现游戏(例如MC)键位显示

效果: 是不是有那味儿了? 显示AWSD,空格,Shift和左右键的按键情况以及左右键的CPS。 彩虹色轮廓,黑白填充。具有任务栏图标,可以随时关闭字体是Minecraft AE Pixel,如果你没有装(大…

车载核心服务CarService

一:CarService简介 Google考虑更多是车载的独立性,需要与androidOS分开,有自己的独立性,才好针对车载拓展,还有就是复用性,他自己在一个单独的进程,区别于ams等。AAOS作为车载操作系统, 需要与…

神经网络学习小记录77——深入浅出Self-Attention自注意力机制与Transformer模块

神经网络学习小记录77——深入浅出Self-Attention自注意力机制与Transformer模块 学习前言代码下载Self-Attention自注意力机制详解一、Self-attention结构解析二、Self-attention的矩阵运算三、Multi-Head多头注意力机制 TransformerBlock的构建一、视觉部分的TransformerBloc…

设计模式 代理模式(静态代理 动态代理) 与 Spring Aop源码分析 具体是如何创建Aop代理的

代理模式 代理模式是一种结构型设计模式,它通过创建一个代理对象来控制对真实对象的访问。这种模式可以用于提供额外的功能操作,或者扩展目标对象的功能。 在代理模式中,代理对象与真实对象实现相同的接口,以便在任何地方都可以使…

【Java SE语法篇】8.面向对象三大特征——封装、继承和多态

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 文章目录 1. 封装1.1 封装的概念1.2 为什么封装1.3 封装的实现…

【c/python】用GTK实现一个带菜单的窗口

一、用python 在GTK中创建一个带菜单的窗口,可以通过使用Gtk.MenuBar、Gtk.Menu和Gtk.MenuItem组件来构建菜单。以下是一个基本的例子,展示了如何使用Python的PyGObject库创建一个简单的带菜单栏的GTK窗口。 import gi gi.require_version(Gtk, 3.0) f…

androidkiller的两种异常情况

第一种反编译时异常: Exception in thread “main” org.jf.dexlib2.dexbacked.DexBackedDexFile$NotADexFile: Not a valid dex magic value: cf 77 4c c7 9b 21 01 修改方法: 编辑 AndroidKiller 的 bin/apktool 目录下有一个 apktool.bat 文件 修改成…

SpringCloud:微服务

文章目录 微服务服务架构演变单例架构(集中式架构)分布式架构 微服务SpringCloud 微服务 服务架构演变 单例架构(集中式架构) 单例架构: 将业务的所有功能集中在一个项目中开发,打成一个包部署 优点&…

RK3568笔记八: Display子系统

modetest 是由 libdrm 提供的测试程序,可以查询显示设备的特性,进行基本的显示测试,以及设置显示的模式。 我们可以借助该工具来学习 Linux DRM 应用编程,另外为了深入分析 Rockchip DRM driver,有必要先了解一下这个…

设置了uni.chooseLocation,小程序中打不开

设置了uni.chooseLocation,在小程序打不开,点击没反应,地图显现不出来; 解决方案: 1.Hbuilder——微信开发者工具路径没有配置 打开工具——>设置 2.微信小程序服务端口没有开 解决方法:打开微信开发…

宝塔面板使用phpMyAdmin 502 Bad Gateway

第一步软件商店安装PHP 第二步设置phpMyAdmin,选择PHP版本 – 解决