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 模型地址:
魔搭:https://modelscope.cn/models/codefuse-ai/CodeFuse-StarCoder2-15B/summary
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项目主页:https://github.com/codefuse-ai/MFTCoder
- HuggingFace主页:https://huggingface.co/codefuse-ai
- 魔搭社区主页:https://modelscope.cn/organization/codefuse-ai