1、CodeFuse-MFTcoder:大模型多任务微调框架余航2024-04-12 CodeFuse介绍需求分析需求分析编程开发编程开发测试测试&构建构建发布发布&运维运维数据洞察数据洞察CodeFuseCodeFuse大模型大模型 AIAI助手平台助手平台ProjectProject CopilotCopilotCodeCode CopilotCopilotTestTest&BuildBuild CopilotCopilotOpsOps CopilotCopilotDataData CopilotCopilotAI 升级研发工具研发流程 AI 加持、研发场景连接、个人生产力释放产品需求生成应用
2、从需求分析到自动化生成应用Product:https:/ lifecycle AI Native Software Developing!CodeFuse能做什么?自动补全代码:行/方法/类级别的补全人机交互开发:解决研发中各种问题人机交互数据分析:执行代码,分析数据IDEIDE插件插件开发助手开发助手数据分析器数据分析器CodeFuse关键技术4大关键技术大关键技术程序分析校验技术:Sparrow分布式和算法分离训练框架:ATorch 多任务微调对齐框架:多任务微调对齐框架:MFTCoder 多重部署优化技术:Maya自研模型支持多任务数据多框架微调多类型LossHuggingFace蚂蚁大
3、规模分布式训练加速框架:ATorchTransformers库服务优化缓存、调度算法优化量化,蒸馏软件优化:ONNX,TRT-LLM部署优化平台Maya微调数据打包DataLoaderTokenization开源多模型支持 CodeFuse全生命周期应用代码爬取清洗去重质量筛选:程序分析特征平台Sparrow需求分析编程开发测试&构建发布&运维数据洞察DeepSpeed数据层计算层算法层应用层多模型对齐 MFTCoder:多任务指令微调对齐服务层流式输出为什么要做MFT 对于大模型来说,每个任务单独微调并且部署,消耗的资源太大。反过来说,一个大模型也是可以同时兼顾多个任务的 S-Lora 暴力
4、解法 代码领域的任务相互关联性很强,一起微调可以相互促进,提高模型在各个任务上的表现,甚至可以泛化到没有见过的任务上 目的:加强不同任务的相互促进,减少不同任务之间的冲突 举个例子:代码补全&代码总结CodeFuse-MFTcoder:整体框架 在一个新的场景上如何使用MFTcoder 拆分:拆分场景需要的能力,每个场景对应一个任务 数据:对于每个任务 收集 或者 构造 对应的数据 Tokenization:动态padding/data pack 微调:PEFT 多任务loss设计:数据均衡,难易均衡,收敛均衡 多底座支持:利用合适的底座模型进一步放大MFT的效果CodeFuse-MFTcod
5、er:数据构造 Camel(Li et al,2023)的方式CodeFuse-MFTcoder:数据构造 Self-instructCodeFuse-MFTcoder:TokenizationCodeFuse-MFTcoder:微调 Full fine-tuning:比较耗时 PEFT(Parameter Efficient Fine Tuning)LoRA&QLoRACodeFuse-MFTcoder:多任务损失函数 数据均衡:不要 过多的关注 数据量较大 的任务,而 忽略掉 数据量较小 的任务 难易均衡:不同难度的任务都要学好 收敛均衡:所有的任务应该在差不多的时候,不要有些任务还没收敛
6、,另外一些任务就开始发散了CodeFuse-MFTcoder:多任务损失函数 数据均衡:不要 过多的关注 数据量较大 的任务,而 忽略掉 数据量较小 的任务 =min1=1=1=1log =1 收敛均衡:所有的任务应该在差不多的时候,不要有些任务还没收敛,另外一些任务就开始发散了 =maxmin1,12 2=,=+总梯度单任务斜率CodeFuse-MFTcoder:多任务损失函数 收敛均衡:所有的任务应该在差不多的时候,不要有些任务还没收敛,另外一些任务就开始发散了仅数据均衡收敛均衡CodeFuse-MFTcode