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

news2024/11/17 23:28:41

国产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 发布!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】打包与发布(Packaging and distributing projects)

以Unix/macOS系统为例。 前提准备:确保pip为最新版本,可使用以下命令来更新pip: python3 -m pip install --upgrade pip一、创建一个简单的项目 我们在目录packaging_tutorial下进行操作。 项目名称为:example_package_wayne。 …

【yolov5系列】yolov5目标检测的原理梳理+核心代码解析

打算写yolov5源码阅读和总结&#xff0c;已经打算了一年&#xff0c;如今已经更新到yolov8&#xff0c;只能说自己行动太慢了&#xff0c;哭泣(๑>؂<๑&#xff09;。趁着看要yolov8一起赶紧把yolov5总结总结。 一、Yolov5的网络结构 模型主要分为3部分 backbone&#x…

Maven 打包插件 maven-jar-plugin

文章目录 指定版本生成可执行 Jar准备依赖&#xff0c;并指定依赖位置自动下载依赖的 Jar 文件 打包时排除文件与其他常用打包插件比较 本文是对 maven-jar-plugin 常用配置的介绍&#xff0c;更详细的学习请参照 Apache Maven JAR Plugin 官方文档 这是 maven 生命周期 packa…

Python+Pytest+Allure+Git+Jenkins数据驱动接口自动化测试框架

一、接口基础   接口测试是对系统和组件之间的接口进行测试&#xff0c;主要是效验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。其中接口协议分为HTTP&#xff0c;RPC&#xff0c;Webservice&#xff0c;Dubbo&#xff0c;RESTful等类型。 …

实用工具 | 语音文本对齐MFA的安装及使用

Montreal Forced Aligner&#xff08;MFA&#xff09;[1]是一个用于将音频和文本进行对齐的工具。它可以用于语音识别、语音合成和发音研究等领域。MFA支持多种语言和语音&#xff0c;用户可以根据需要自定义训练模型。 本博客介绍如何使用MFA对音频和文本进行对齐&#xff0c…

计算机网络实验:交换机划分Vlan配置

目录 前言实验目的实验内容实验过程总结 前言 计算机网络是当代信息技术的重要组成部分&#xff0c;也是现代社会的基础设施之一。为了提高计算机网络的性能和安全性&#xff0c;网络管理员需要对网络进行合理的规划和设计&#xff0c;包括对网络拓扑、地址分配、路由协议、交…

TP-LINK XDR6078 WiFi6路由器 简单开箱评测

TL-XDR6078易展版AX6000双频WiFi6路由器 简单开箱测评&#xff0c;新房快装修好了&#xff0c;先装上WiFi&#xff0c;挑了一会选中这个了&#xff0c;双2.5G电口&#xff0c;6000Mbps无线速率&#xff0c;还支持端口汇聚等等功能&#xff0c;感觉还不错。 TP-LINK XDR3040 Wi…

R语言 tidyverse系列学习笔记(系列2)表格的处理

创建一个得分表 score install.packages("dplyr") library(dplyr)install.packages("tibble") library(tibble)install.packages("stringr") library(stringr)score tibble(IDc("1222-1","2001-0","3321-1",&qu…

从JMeter Cookie管理器开始,轻松掌握接口测试技能!

目录 【前言】 【1. 添加Cookie管理器】 【2. 登录接口获取Cookie】 【3. Cookie关联】 【4. 动态修改Cookie值】 【结论】 【附录】 【前言】 在接口测试中&#xff0c;我们经常需要对Cookie进行处理和关联&#xff0c;来模拟用户在浏览器中的操作。特别是在登录和权限…

chatgpt赋能python:Python名字的由来

Python名字的由来 Python是一门高级编程语言&#xff0c;它的名字来源于一个非常有趣的故事。接下来的文章将介绍如何命名Python&#xff0c;并且揭示这个名字的真正含义。 Guido van Rossum设计Python Python是由Guido van Rossum设计的。在1989年&#xff0c;Guido在荷兰国…

用Flask-Login库和阿里云短信推送服务实现网站注册登录功能

诸神缄默不语-个人CSDN博文目录 本文介绍如何用Flask-Login库和阿里云短信推送服务实现网站注册登录功能。 大致逻辑是在注册和找回密码时调用阿里云短信服务&#xff0c;登录时使用手机号密码登录&#xff08;别的安全功能还没有加&#xff09;。 很多代码都是直接由ChatGP…

Zinx框架学习 - 连接管理

Zinx - V0.9 连接管理 每个服务器的能够处理的最大IO数量是有限的&#xff0c;根据当前服务器能开辟的IO数量决定&#xff0c;最终决定权是内存大小现在我们要为Zinx框架增加链接个数的限定&#xff0c;如果超过⼀定量的客户端个数&#xff0c;Zinx为了保证后端的及时响应&…

浏览器断点调试技巧

一、前言 日常开发中&#xff0c;当业务测试数据展示有问题时&#xff0c;我们需要快速去排查问题出现原因&#xff1b;但看了自己写的逻辑&#xff0c;很自信的觉得没问题但最终展示和逻辑对不上。这个需要我们便可以利用浏览器断点调试功能&#xff0c;来逐步调试对比逻辑来…

IDEA 终端命令行设置

一、说明 在使用 IDEA 进行程序开发时&#xff0c;需要使用到终端 Terminal 的功能&#xff0c;便于能够快速使用 shell 命令&#xff0c;进行各种相关的操作。 这些操作可以包括代码的版本控制、程序的打包部署等等 比如&#xff0c;前后端的集成开发环境&#xff08;IDEA、We…

探究Cache缓存功能---【pytest】

前言 pytest运行完用例之后会生成一个 .pytest_cache的缓存文件夹&#xff0c;用于记录用例的ids和上一次失败的用例。 1、跑自动化时经常会出现这样一个情况&#xff0c;一轮自动化跑完后零星出现了几个失败测试用例&#xff0c;无法断定失败的原因&#xff0c;所以可能需要重…

2023新版Spring6全新讲解-核心内容之事务管理

Spring核心之事务 一、JdbcTemplate JdbcTemplate是Spring框架对JDBC操作进行的封装&#xff0c;可以简化方便对数据库的操作。 1.数据库表结构 准备一张普通的表 CREATE TABLE t_student (id int NOT NULL AUTO_INCREMENT,name varchar(32) DEFAULT NULL,age int DEFAULT N…

网络安全面试题大全(整理版)+附答案

随着国家政策的扶持&#xff0c;网络安全行业也越来越为大众所熟知&#xff0c;想要进入到网络安全行业的人也越来越多。 为了拿到心仪的 Offer 之外&#xff0c;除了学好网络安全知识以外&#xff0c;还要应对好企业的面试。 作为一个安全老鸟&#xff0c;工作这么多年&…

Vue.js 中的过渡动画是什么?如何使用过渡动画?

Vue.js 中的过渡动画是什么&#xff1f;如何使用过渡动画&#xff1f; 在 Vue.js 中&#xff0c;过渡动画是一种在元素插入、更新或删除时自动应用的动画效果&#xff0c;可以为应用程序增加一些动态和生动的效果。本文将介绍 Vue.js 中过渡动画的概念、优势以及如何使用过渡动…

谈“污”色变!如何应对测序中常见污染

微生物群落研究正在彻底改变人类对微生物学的理解&#xff0c;但是微生物污染的DNA存在于各种操作中包含从取样到测序结束。其中常用的DNA提取试剂盒和其他实验室试剂中也存在污染&#xff0c;其严重影响从微生物量较低的样品中获得的结果。 DNA污染的可能来源包括分子生物学级…

【嵌入式环境下linux内核及驱动学习笔记-(14)linux总线、设备、驱动模型之platform】

目录 1、新驱动架构的导入1.1 传统驱动方式的痛点1.2 总线设备驱动架构 2、platform 设备驱动2.1 platform总线式驱动的架构思想2.2 platform _device相关的数据类型2.2.1 struct platform_device2.2.2 struct platform_device_id2.2.3 struct resource2.2.4 struct device 2.3…