CodeFuse-MFTCoder 项目地址:
https://github.com/codefuse-ai/MFTCoder
CodeFuse-Qwen-14B 模型地址:
https://huggingface.co/codefuse-ai/CodeFuse-QWen-14B
一、Qwen-14B底座代码能力总览
Qwen(通义千问)是阿里云开源的大型语言模型集合,目前有两个参数规模的模型:Qwen-7B和Qwen-14B。
Qwen在LLama框架的基础上增加了以下特性:
- 词表:在原有的110k个词基础上,加入了中文字符和单词,并将数字按照0-9分别添加到词表中,最终词表大小为152K。
- 输入嵌入:没有绑定输入嵌入和输出投影的权重。
- 位置嵌入:使用RoPE进行位置嵌入,并选择了FP32精度,而不是BF16或FP16,以获得更好的表现。
- 偏置:除了注意力层的QKV层外,其他层中的偏置被去除。
- RMSNorm:使用RMSNorm替代常用的LayerNorm,因为RMSNorm更高效。
- 激活函数:选择了SwiGLU作为激活函数。
- FFN层:将常用的4倍隐藏维度换成了8/3倍隐藏维度。
- 扩展长度:通过NTK-aware插值和LogN-Scaling将令牌长度扩展到8092,同时保证了对高频信息和长程依赖的建模。
Qwen官方透出的评测,在各项能力上都超过了同等大小的开源大语言模型,包括LLaMA,LLaMA2,ChatGLM2,Baichuan2,InternLM等。详细的对比可以参考下图,该图中绿色绿色实线表示是其他开源模型在该项能力上取得最高分数。

图1:Qwen能力分布雷达图以及和其他模型的对比(截取至Qwen的技术报告)
同时,在代码能力上,我们结合官方的评测在python、java、javascript、c++、go等几种语言上,和其他模型进行了对比。
表1:Qwen-14B 和 其他模型代码补全能力对比。
| 模型 |
Python |
Java |
Java Script |
C++ |
Go |
均值 |
| Qwen-14B |
32.93% |
35.37% |
32.93% |
30.49% |
21.34% |
30.61% |
| Baichuan2-13B |
17.1% |
20.73% |
5.49% |
16.45% |
6.71% |
13.30% |
| CodeGeeX2-6B |
35.90% |
30.80% |
32.20% |
29.30% |
22.50% |
30.14% |
| StarCoder-15B |
33.57% |
30.22% |
30.79% |
31.55% |
17.62% |
28.75% |
| CodeLLama-13B |
43.29% |
41.46% |
38.41% |
34.76% |
29.27% |
37.44% |
从上面,我们可以看出Qwen-14B的代码能力远高于同尺寸的自然语言大模型Baichuan2-13B,甚至可以和专门的代码大模型(比如CodeGeeX2、StarCoder)媲美。但CodeLLama的在代码方面的表现还是优于Qwen,可能是由于CodeLLama在LLama2的基础上进行了代码的加训。另外,我们注意到,Qwen也有一个专用于代码任务的版本叫做Code Qwen。和CodeLLama一样,Code Qwen也用了大量代码数据对Qwen进行了加训。Code Qwen暂时没有开源,我们期待看到Code-Qwen在代码上更优越的表现。
二、CodeFuse-MFTCoder 多任务微调Qwen-14B
借助CodeFuse-MFTCoder的多任务微调能力,我们可以使用多个代码任务数据集对Qwen-14B进行多任务微调(MFT)。在任务选择上,我们精选了6个核心代码任务数据,即代码补全(Code Completion),代码生成(Text2Code), 代码翻译(Code Translation),单测生成(Unittest Generation),SQL生成(Text2Sql), 报错修复(Exception Retry),一共110w条指令问答数据。
训练采用MFTCoder的多任务QLoRA(4bit量化)微调模式, 相应的配置如下:
{
"lora_rank": 96,
"lora_alpha": 32,
"lora_dropout": 0.05,
"targeting_modules": ["c_proj", "c_attn", "w1", "w2"]
}
对以上数据进行了约4个Epoch的训练到收敛。训练过程loss情况如下图所示。


通过多任务微调,CodeFuse-Qwen-14B的各方面代码能力均有比较大的提升。
三、CodeFuse-Qwen-14B模型效果
接下来看一些Qwen-14B-MFT微调后的模型的生成效果。在代码补全/代码翻译/代码修复/SQL生成/单元测试生成等代码任务上有较好表现,更丰富的生成样例,请看下面详细展示。
代码生成(Code Completion / Text2Code)
MFT后的Qwen-14B有更好的代码生成能力。在五种编程语言的代码补全测试集HumanEval-x上进行了相关评测(见表2),测试结果显示与Baichun2-13B-Base、Qwen-14B-Base、CodeGeex2-6B、StarCoder-15B等模型相比,微调后的Qwen-14B-MFT在Java/Python/Cpp/JavaScript均是Top1,相对于底座平均提升10%+。和剩余的模型里面表现最好的CodeLLama,其中JavaScript语言提升效果最明显(38.41%->46.34%),pass@1指标均值提升2.92%(37.44%-40.36%):
表2:CodeFuse-Qwen-14B和其他模型代码补全能力对比
| 模型 |
Python |
Java |
JavaScript |
C++ |
Go |
均值 |
| CodeFuse-Qwen-14B |
48.78% |
41.46% |
46.34% |

本文围绕CodeFuse-Qwen-14B模型展开,先介绍Qwen-14B底座代码能力,其在多项特性上有改进,代码能力超部分同尺寸模型。接着说明借助CodeFuse-MFTCoder对Qwen-14B进行多任务微调。最后展示微调后模型在代码补全、生成、翻译等任务及自然语言任务上表现良好。
最低0.47元/天 解锁文章
1900





