首页 > 其他分享 >代码语言模型是如何训练的:Qwen2.5-Coder 技术报告学习

代码语言模型是如何训练的:Qwen2.5-Coder 技术报告学习

时间:2024-11-11 11:22:13浏览次数:1  
标签:Coder code Qwen2.5 代码 数据 模型

Qwen2.5-Coder 是通义千问最新的代码语言模型,基于 Qwen2.5 的架构继续 pretrain 了 5.5T 的 token。通过细致的数据清洗、可扩展的合成数据生成和平衡的数据混合,Qwen2.5-Coder在展示令人印象深刻的代码生成能力的同时,还保留了通用的多功能性。本文根据官方的技术报告(Qwen2.5-Coder Technical Report)总结一下训练方法。

1 模型架构

整体同 Qwen2.5,不同参数(1.5B 和 7B)在 hidden size、query heads、key-value heads、intermediate size 和 embedding tying(embedding layer 和 Pre-softmax layer 共享参数,减少模型参数量) 有所区别,具体如下图:
Architecture of Qwen2.5-Coder

为了帮助模型更好理解代码,Qwen2.5-Coder 多了几个特殊 token
 special tokens

2 Pre-training

2.1 预训练数据

包含五种关键数据类型:

  1. 源代码数据(Source Code Data)
    GitHub 上的公开 repo,包括 PRs、commits、Jupyter Notebooks 和 Kaggle datasets
  2. 文本-代码基础数据(Text-Code Grounding Data)
    从 Common Crawl 中整理的 text-code mixed dataset,包括 文档、教程、博客
  3. 合成数据(Synthetic Data)
    使用 Qwen2.5-Coder 的前身 CodeQwen1.5 来生成大规模合成数据集。为了降低在此过程中出现幻觉的风险,引入了一个 executor 进行验证,确保只保留可执行代码
  4. 数学数据(Math Data)
    将 Qwen2.5-Math 的预训练语料库集成到 Qwen2.5-Coder 数据集中
  5. 文本数据(Text Data)
    与数学数据类似,从 Qwen2.5 模型的预训练语料库中引入了高质量的通用自然语言数据,以保留 Qwen2.5-Coder 的通用功能

数据配比: 70% Code, 20% Text, 10% Math

2.2 训练策略

three-stage training pipeline

File-Level Pretraining

  • 独立代码文件
  • maximum training sequence length: 8,192 tokens
  • 5.2T of high-quality data
  • training objectives
    • next token prediction
    • fill-in-the-middle (FIM)

File-Level FIM format

<|fim_prefix|>{code_pre}<|fim_suffix|>{code_suf}<|fim_middle|>{code_mid}<|endoftext|>

Repo-Level Pretraining

增强模型的 long-context 能力

  • context length: 32,768 tokens
  • RoPE’s base frequency: 1,000,000
  • sequences up to 131,072 (132K) tokens(YARN mechanism)

Repo-Level FIM format

<|repo_name|>{repo_name}
<|file_sep|>{file_path1}
{file_content1}
<|file_sep|>{file_path2}
{file_content2}
<|file_sep|>{file_path3}
<|fim_prefix|>{code_pre}<|fim_suffix|>{code_suf}<|fim_middle|>{code_fim}<|endoftext|>

3 Post-training

3.1 Instruction Data

  • 多语种代码分类
    使用 LLM 从 1024 个 token 内的代码片段生成指令,然后使用代码 LLM 生成响应,最后使用 LLM scorer 过滤低质量结果
  • Instruction 合成
    开源 instruction dataset
  • 多语种代码 Instruction 数据
    • Language-Specific Intelligent Agents
    • Collaborative Discussion Protocol
    • Adaptive Memory System
    • Cross-Lingual Discussion
    • Synergy Evaluation Metric
    • Adaptive Instruction Generation
  • 代码静态检查
    • 将代码片段解析成 AST,将有解析错误的代码过滤掉

3.2 训练策略

  • 由粗到精的 Fine-tuning
    先合成了数千万个低质量但多样化的指令样本来微调基础模型。然后采用数百万个高质量指令样本,通过拒绝采样和监督微调来提高指令模型的性能
  • 混合 Tuning
    使用大部分标准 SFT 数据和一小部分 FIM 指令样本优化指令模型。
    使用 FIM 格式构造指令对,以保持基础模型的长上下文能力。使用 tree-sitter-languages 来解析代码片段并提取基本逻辑块作为中间代码进行填充。

4 Base Model 和 Instruct Model 效果

Base Model

  • code generation
    HumanEval and MBPP
    Performance of various models on HumanEval, MBPP and BigCodeBench

  • code completion

  • code reasoning
     Performance of different models on CRUXEval

  • mathematical reasoning

  • general natural language understanding

  • long-context modeling

Instruct Model

  • code generation
    The performance of different instruct models on code generation

  • code reasoning
    The CRUXEval performance of different instruct models

  • code editing

  • text-to-sql

  • mathematical reasoning

  • general natural language understanding

标签:Coder,code,Qwen2.5,代码,数据,模型
From: https://www.cnblogs.com/cdyang/p/18537615/Qwen25-Coder-Technical-Report

相关文章

  • Python爬虫快速获取JD商品详情:代码示例与技巧解析
    在当今这个信息爆炸的时代,数据成为了一种宝贵的资源。对于电商行业来说,获取商品详情信息是进行市场分析、价格比较、库存管理等重要环节的基础。本文将通过一个Python爬虫示例,展示如何快速获取(JD)商品的详情信息。为什么选择Python进行爬虫开发?Python作为一种高级编程语言,以......
  • R语言:rcs代码
    ##CVAI与T2DM风险之间的rcs模型。##模型调整了年龄、性别、受教育程度、居住地和婚姻状况、吸烟状况、饮酒状况、睡眠时间、收缩压和舒张压。install.packages(c('segmented','rms'))library(segmented)library(splines)library(Hmisc)library(rms)library(ggplot2)......
  • 代码随想录之滑动窗口、Java日期api、集合(11.4-11.11)
    代码1、长度最小的子数组⭐使用滑动窗口的思想,外层循环控制结束位置j,内层循环控制起始位置i,看似是双层循环,但时间复杂度是o(2n)。 2、水果成篮自己想法:使用backet1和backet2表示篮子1和篮子2;使用backet1Account和backet2Account分别表示两个篮子里水果的数量,内层循环将i指针......
  • ECharts饼图-饼图9,附视频讲解与代码下载
    引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个饼图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供详细的视频讲解和代码下载链接,帮助大家快速上手。一、图表效果预览 二、视......
  • 「Java开发指南」如何自定义Spring代码生成?(二)
    搭建用户经常发现自己对生成的代码进行相同的修改,这些修改与个人风格/偏好、项目特定需求或公司标准有关,本教程演示自定义代码生成模板,您将学习如何:创建自定义项目修改现有模板来包含自定义注释使用JET和Skyway标记库中的标记配置项目来使用自定义在上文中,我们为大家介绍了......
  • 开源低代码平台-Microi吾码-表单引擎介绍
    这篇文档可能会让读者对“表单引擎”有更新奇的看法:“原来表单引擎还能这样玩?”可能大部分同学认为“表单引擎”是低代码的基础功能,这个没啥好吹的但Microi吾码做到了“万物皆表单引擎”,以及一身黑科技“万物皆表单引擎”这带来的“后果”是整个低代码平台只有登录、......
  • unity项目托管代码和非托管代码之间的数据传递原理刨析
    Unity3D架构Unity3D是一个广泛使用的游戏引擎,支持多种平台的游戏开发。它的架构主要由两部分组成:非托管代码(UnmanagedCode):这部分主要是用C++编写的,负责引擎的底层功能,如图形渲染、物理计算、音频处理等。非托管代码直接与操作系统和硬件交互,通常具有更高的性能,但开......
  • (代码随想录)132. 分割回文串 II(动态规划)
    132.分割回文串II这一题直接将我打回cv工程师的原型除了dp还要定义一个辅助数组,用于表示i区间到j区间是否为回文串. 动规五部曲1.确定dp含义dp[i]表示0到i之间的字符串需要切割的最小次数2.确定递推公式第一种就是0到i之间直接就是一个回文串,那么直接dp[i]=0......
  • (代码随想录)leetcode300. 最长递增子序列
    自己还是写不出来[笑哭]思路错了,自己死要去只遍历一遍代码随想录答案:classSolution{public:intlengthOfLIS(vector<int>&nums){if(nums.size()<=1)returnnums.size();vector<int>dp(nums.size(),1);//所有元素都是1长度//dp[i]......
  • 物理约束➕深度学习代码示例
    好的,下面是一个结合物理机制与深度学习的示例代码。这个示例假设我们要预测土壤湿度(类似你的研究领域),并结合物理机制(例如,水的守恒)来改进模型的预测。示例:基于物理约束的土壤湿度预测模型在这个例子中,我们用深度学习模型预测土壤湿度,并在损失函数中加入水分守恒约束项,确保模型输......