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

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

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

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

相关文章

Codigger之配置LunarVim

Lunarvim是一款先进的集成开发环境(IDE),构建于Neovim之上,致力于为用户提供一个高效且个性化的编程平台。该环境融合了Neovim的核心优势,并增添了多项扩展功能,以支持诸如代码高亮、自动补齐、以及语言服务器协议(LSP)等特性,旨在为Codigger用户在Neovim中复现熟悉的…

从源码分析,MySQL优化器如何估算SQL语句的访问行数

本文将从源码角度分析SQL优化器代价估算的基础——行数估算,并总结MySQL当前设计存在的局限性。最后用一个现网问题的定位过程作为例子,给出该类问题的解决方案。本文分享自华为云社区《【华为云MySQL技术专栏】MySQL优化器如何估算SQL语句的访问行数》,作者:GaussDB数据库…

乐维网管平台(六):如何正确管理设备端口

一、什么是端口下联 在网络环境中,端口下联是指网络设备(通常是交换机)的端口与其他设备相连接的一种网络架构关系。交换机作为网络中的核心连接设备,其端口下联可以连接多种类型的终端设备,如计算机、服务器、IP 电话等,也可以连接下级网络设备,如接入层交换机连接到汇…

自动驾驶中的ego states包含的内容

截图来自论文:[2305.10430] Rethinking the Open-Loop Evaluation of End-to-End Autonomous Driving in nuScenes

ABB机器人维修之IRB 4600助力半导体晶圆

"ABB机器人:半导体晶圆运输盒拆包自动化的革新方案 在现代电子设备中,半导体无疑扮演着至关重要的角色,而其制造过程之精密复杂,更是令人叹为观止。然而,在半导体必要材料——晶圆于各机器或工厂间频繁转移的过程中,如何有效减少其所受的污染与损耗,却始终是一大亟…

如何处理微信小程序大量未捕获的异常

1)如何处理微信小程序大量未捕获的异常2)如何关闭代码创建的纹理的读写,或者创建不带读写的图片3)回收带有贴图和Collider的Mesh,如何正确用对象池维护4)Cloth组件使用在一个篮筐上,运行后篮网扭曲,是什么原因这是第408篇UWA技术知识分享的推送,精选了UWA社区的热门话…

2024年最新21款精品项目管理软件推荐:提高工作效率必备

在项目管理中,选择合适的软件工具能显著提高工作效率,优化团队协作,增强项目透明度和跟踪能力。以下是2024年最新、最受欢迎的20款精品项目管理软件推荐,它们涵盖了不同团队规模、行业需求以及功能特点,帮助用户更好地管理任务、时间、资源和预算。 1. 禅道 (ZenTao)功能:…

代码随想录之滑动窗口、Java日期api、集合(11.4-11.11)

代码 1、长度最小的子数组⭐ 使用滑动窗口的思想,外层循环控制结束位置j,内层循环控制起始位置i,看似是双层循环,但时间复杂度是o(2n)。 2、水果成篮 自己想法:使用backet1和backet2表示篮子1和篮子2;使用backet1Account和backet2Account分别表示两个篮子里水果的数量,内…

90%的项目经理都在使用的15款项目管理工具清单

以下是 90% 项目经理常用的项目管理工具清单。它们帮助项目经理规划、组织、执行和监控项目,确保项目按时、按预算完成,并满足项目目标。 1. 禅道(Zentao)用途:项目管理、需求管理、任务分配、缺陷跟踪。 特点:完全开源,适合中小型企业。 提供从需求、开发、测试到交付的…

2024年项目管理趋势预测:大厂都在关注什么?

在2024年,项目管理的趋势继续受到技术、远程工作和敏捷方法等多种因素的影响。大厂和各行业领先企业都在关注以下几个关键趋势: 1. AI与自动化的深度集成 人工智能(AI)和自动化技术的引入,正在极大改变项目管理的方式。大厂越来越多地依赖AI来预测项目风险、自动化重复性任…

2024年产品经理必备:10款最佳项目管理软件推荐

在2024年,产品经理的工作越来越依赖于高效的项目管理工具。项目管理软件不仅能帮助团队协作、跟踪进度,还能帮助规划任务、管理预算、识别风险和收集反馈等。随着技术的发展,市场上出现了各种类型的项目管理软件,各具特色,能够满足不同产品经理的需求。以下是2024年产品经…

禅道、Jira与Ones对比:2024年项目管理平台谁更适合你的团队?

在2024年,选择一个合适的项目管理平台对于团队的高效协作至关重要。禅道、Jira 和 Ones 都是目前市场上较为流行的项目管理工具,它们各有优势和特点,适合不同需求的团队。以下是对这三款工具的对比分析,帮助你选择最适合你团队的项目管理平台。 1. 禅道 禅道是一个国产的开…