Qwen2.5-Coder 技术报告详细解读

a752e0b772cde82c41873676dbd9a4cf.png

知乎:Xode
链接:https://zhuanlan.zhihu.com/p/721189499

  • 0. 前文

  • 1. 模型架构

  • 2. Tokenizer

  • 3. 预训练

    • 3.1 数据

    • 3.2 训练

  • 4. Post-Training

    • 4.1 数据

    • 4.2 训练

  • 5. 去除数据集污染

  • 6. 评估

  • 7. 总结

[!tip]

  • 这不是技术报告的翻译,全文人工撰写

  • 这只是个人的解读,如果有问题欢迎探讨

  • 笔者能力有限,全文可能难以深入到特别细节的理论研究,也不会有什么公式推导

  • 全篇会尽量按照报告的行文顺序来写解读,但中间可能会有些许变化,也不一定会提到报告中每个地方

0. 前文

这一篇 Coder 的技术报告风格不同于 Math,整体样式都不太一样:Math 的样式模板和 Qwen Technical Report、Qwen2 Technical Report 保持一致、作者名也都是按照字典序排序的,可以说是更加“正统”;Coder 的样式模板和 DeepSeek 的样式非常类似,有区分一作,并且通讯也只有  Junyang Lin 大佬一个人(只有 2.5 的两篇开始出现了通讯)。

此外,和 Math 模型类似,Code 模型的名称也出现了变动。最开始的一代(只出现在技术报告中、没开源)和 1.5 代的时候,代码模型都叫做 Code-Qwen,但到了 2.5 代就改名成了 Qwen2.5-Coder,这样做更加强调了 Math 和 Code 这类专有模型都同属于 Qwen Series。不过不同于 Math-Qwen 改名为 Qwen-Math,Code-Qwen 变成了 "Coder",据他们的说法是更加契合于 1.5 时提及的"结对编程"场景。

这次的模型开源了 1.5B、7B 和 32B(coming soon)三个尺寸,没有 Qwen 正统和 Math 模型的最大号 72B。但我个人的感觉是,Code 这样的模型在进化的过程中要么逐渐变小、便于专有化部署和高频使用;要么逐渐把能力整合入主力模型,例如 GPT、Claude 和最近的 DeepSeek,所以我觉得专门的一个更大的代码模型也确实没必要。

1. 模型架构

既然都强化了 Qwen2.5 Series 的概念,Qwen2.5-Coder 自然在模型架构上不会有什么分别。报告中只提了 1.5B 和 7B 的架构,但按理来说 32B 的模型架构应该也不会和 Qwen2.5-32B 有区别。不过 Qwen2.5-32B 和 Qwen1.5-32B 不完全一样,中间 FFN 的升维维度从 256 * 107 变成了 256 * 108、也就是向 1024 对齐取整了,不太清楚这里面具体的考量。

这里值得一提的是,Qwen 从 2 代开始加深小模型的深度、削减宽度,并且增大 FFN 升维的维度,这大概也是现在的一个 LLM 主流认识:同样参数下,窄而深的模型会比宽而浅的更好;增大 FFN 维度可以增强表征能力。例如以往 FFN 维度都是 4 倍(对于 LLaMA 这样的 GLU 来说,同参数规模要乘以 2/3,也就是 8/3 倍),但 Qwen 现在都是差不多 16/3 倍,抛开为了 128 或者 256 对齐,0.5B 的模型大概是 16/3 倍、1.5B 大概是 6 倍、7B 大概是 17/3 倍,就连 32B 也是 16/3 倍,只有最大号的 72B 大约是 11/3 倍。具体的数字应该是内部有不同的消融测试才定下来的,但整体趋势是比最开始的 LLaMA2 FFN 升维更高。

2. Tokenizer

tokenizer 也和 2 代开始的保持一致,只是 Qwen2.5-Coder 开始为了 FIM(fill-in-the-middle,根据上下文补全代码)任务引入了一些特殊 token,如下:8ab5dfefc989384f4dccd57062f15c3d.png印象中没记错的话,这些 special tokens 和常用的 FIM 保持一致,没有特别的自定义。

也顺便提一下 FIM 大概是什么任务,其实和字面义显示的一样,就是用于代码补全,给定上下文代码填中间的空:

<< 上文代码 >>
{
   
   { 中间需要补全的部分 }}
<< 下文代码 >>

由于生成模型只能看到前文,没有双向的注意力,因此我们会把下文放到前面,类似于:

<< 上文代码 >>
<< 下文代码 >>
{
   
   { 告知模型,开始生成中间需要补全的部分 }}

具体还会有别的设计,我们后文展开讲。例如这里的 <|repo_name|><|file_sep|> 就是为了 repo 级别的代码补全而定义的。

3. 预训练

3.1 数据

数据组成

  • 来源:主要是 Github,总共

### Qwen2.5-Coder概述 Qwen2.5-Coder 是一系列专注于代码处理的人工智能模型的一部分,该系列旨在通过智能化手段辅助软件开发过程。这一版本特别强调了与早期版本相比更为精准的任务执行能力以及更高的资源利用效率。 #### 名称演变及其意义 从最早的内部研究版到公开发布的迭代过程中,这类专门用于编程支持的AI工具经历了命名上的调整。最初的技术文档中提到的产品被称为Code-Qwen,在后续的发展阶段更名为Qwen2.5-Coder,以此来突出其作为Qwen系列产品的一员身份,并且更好地反映了产品对于协作式编程的支持特性[^2]。 #### 主要功能特点 此款编码助手能够实现多种实用的功能: - **代码生成**:依据用户的文字说明快速创建有效的程序段落; - **代码补全**:在IDE里给出即时性的语法提示以加快输入速度; - **代码审计**:检测源文件中存在的缺陷并提供建议改进措施; - **文档生成**:自动化构建详细的API指南和技术备注; - **跨语言翻译**:把现有脚本转换成其他主流编程语句形式; - **错误排查与修正**:定位潜在风险点并向用户提供解决方案; - **测试案例建立**:基于已有逻辑框架自动生成验证集; - **实例模版产出**:针对不同业务场景定制化输出参考样例; 这些特性共同构成了一个强大的平台,极大地促进了程序员的工作流程优化和生产力提高[^3]。 #### 部署配置建议 为了使Qwen2.5-Coder能够在实际操作环境中发挥最佳效能,推荐按照如下参数设置进行安装部署: ```yaml models: qwen2.5-coder: type: llama parameters: context_length: 32768 num_gpu: 1 num_thread: 8 batch_size: 32 quantization: mode: 'int8' cache: type: 'redis' capacity: '10gb' runtime: compute_type: 'float16' tensor_parallel: true ``` 上述配置不仅考虑到了硬件条件下的最优运行状态,同时也兼顾了成本效益之间的平衡关系[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值