1. MFTCoder 简介
CodeFuse在2023年9月开源了一种多任务微调框架——MFTCoder,它可以实现在多个任务上同时并行地进行微调。通过结合多种损失函数,我们有效地解决了多任务学习中常见的任务间数据量不平衡、难易不一和收敛速度不一致等挑战。大量实验结果显示,相较于单独对单个任务进行微调或者多任务混合为一后进行微调,我们的多任务微调方法表现更优。此外,MFTCoder具备高效训练特征,包括提供高效的数据Tokenization模式,支持PEFT微调和全量微调,能有效提升微调训练速度并降低对资源的需求。MFTCoder是轻量的,简单清晰的,易于二次开发的,持续跟进Cutting-Edge技术的开源微调框架。
目前MFTCoder迭代到v0.4.2, 新增了对QLoRA + Deepspeed ZeRO3/FSDP的支持,可以使用更少的GPU,对更大模型(比如70B, 110B等)进行多任务微调
MFTCoder已适配支持了更多的主流开源LLMs,如Qwen2, Qwen2-moe, Gemma, Starcoder2, Mixtral、Mistral、Deepseek、 Llama、CodeLlama、Qwen、CodeGeeX2、StarCoder、Baichuan2、ChatGLM2/3、GPT-Neox等。
MFTCoder的详细介绍在我们之前的公众号文章中:干货!MFTCoder论文多任务微调技术详解
MFTCoder技术细节的论文已经被 KDD 2024 (ADS) 接收:https://arxiv.org/pdf/2311.02303.pdf
新升级代码也已经开源到GitHub:https://github.com/codefuse-ai/MFTCoder/tree/main/mftcoder_accelerate
2. v0.4.2新特性Hightlights
- 首先,新版本已经适配到transformers v4.40.2,因此也支持了众多新的开源模型, 比如Qwen2,Qwen2-moe,Starcoder2, Gemma等新的主流开源模型;
- 同时,MFTCoder当前适配新模型的成本很低,只需要对transformers进行适当的版本升级,并将对应模型添加到训练支持的池子即可,欢迎广大同学通过PR提交后续新模型的支持;
- 然后,MFTCoder-accelerate框架新增支持了QLoRA + Deepspeed ZeRO3/FSDP,可以使用更少的GPU,对更大模型(比如70B, 110B等)进行多任务微调MFT;
- 最后,我们也同时用新的MFTCoder微调并开源了一个新的代码模型CodeFuse-StarCoder2-15B
3. MFTCoder提升Starcoder2-15b混合专家模型的代码能力实践
CodeFuse-StarCoder2-15B 模型地址:
魔搭:魔搭社区
HuggingFace: https://huggingface.co/codefuse-ai/CodeFuse-StarCoder2-15B
3.1. MFTCoder 多任务微调Starcoder2-15b
借助MFTCoder(v0.4.2)的多任务微调能力,我们可以使用多个代码任务数据集对Starcoder2-15b进行多任务微调(MFT)。在任务选择上,我们精选了4个核心代码任务数据,一共40w条指令问答数据。用基础任务微调对齐过的模型,在各类未训练过的代码任务上也有不错的泛化能力。
MFTCoder相应的关键配置如下:
{
"lora_rank": 128,
"lora_alpha": 32,
"lora_dropout": 0.05,
"targeting_modules": "all-linear",
"learning_rate": "0.0001",
"weight_decay": "0.01",
"lr_scheduler_type": "linear"
}
训练过程loss情况如下图所示:
通过多任务微调,CodeFuse-StarCoder2-15B的各方面代码能力均有比较大的提升。
3.2. CodeFuse-StarCoder2-15B模型效果
对Starcoder2-15b进行多代码任务微调后,CodeFuse-StarCoder2-15B在HumanEval-X数据集中五种语言的Pass@1评测结果对比如下(用Greedy解码统一测试)
Model | Python | JavaScript | Java | C++ | Go |
CodeFuse-StarCoder2-15B | 73.2% | 67.8% | 69.5% | 61.0% | 56.7% |
Starcoder2-15b(base) | 46.3% | ||||
Starcoder2-15b-instruct | 72.6% |
可以看出, CodeFuse-StarCoder2-15B比Starcoder2-15b 在HumanEval-python的pass@1提高27%, 达到73.2%,比Starcoder2-15b-instruct高;并且在其它语言代码能力(HumanEval-X)均有明显提高。
联系我们
MFTCoder最新版本v0.4.2已经开源,感兴趣的同学可以用版本tag或者持续跟踪main分支,本文中提到的模型和数据集也在陆续开源中,如果您喜欢我们的工作,欢迎试用、指正错误和贡献代码,可以的话请给我们的项目增加Star以支持我们。
- GitHub项目主页:GitHub - codefuse-ai/MFTCoder: High Accuracy and efficiency multi-task fine-tuning framework for Code LLMs. This work has been accepted by KDD 2024.
- HuggingFace主页:https://huggingface.co/codefuse-ai
- 魔搭社区主页:魔搭社区