MFTCoder 重磅升级 v0.3.0 发布,支持 Mixtral 等更多模型,支持收敛均衡,支持 FSDP

1. MFTCoder 简介

CodeFuse在2023年9月开源了一种多任务微调框架——MFTCoder,它可以实现在多个任务上同时并行地进行微调。通过结合多种损失函数,我们有效地解决了多任务学习中常见的任务间数据量不平衡、难易不一和收敛速度不一致等挑战。大量实验结果显示,相较于单独对单个任务进行微调或者多任务混合为一后进行微调,我们的多任务微调方法表现更优。此外,MFTCoder具备高效训练特征,包括提供高效的数据Tokenization模式和支持PEFT微调,能有效提升微调训练速度并降低对资源的需求。MFTCoder是轻量的,简单清晰的,易于二次开发的,持续跟进Cutting-Edge技术的开源微调框架。

今天,我们对MFTCoder进行重磅升级,比如对Mixtral这个开源MoE的SOTA的多任务微调的支持;再比如我们提供了之前论文中提到的收敛均衡技术:Self-Paced Loss。

MFTCoder已适配支持了更多的主流开源LLMs,如Mixtral、Mistral、Deepseek、 Llama、CodeLlama、Qwen、CodeGeeX2、StarCoder、Baichuan2、ChatGLM2/3、GPT-Neox等。以Deepseek-coder-33b-base为底座,使用MFTCoder微调得到的CodeFuse-Deepseek-33B在HumaneEval测试中pass@1得分高达78.65%(greedy decoding)。

MFTCoder的详细介绍在我们之前的公众号文章中:干货!MFTCoder论文多任务微调技术详解

MFTCoder技术细节的论文已经放出到Arxiv:

https://arxiv.org/pdf/2311.02303.pdf;

新升级代码也已经开源到github:https://github.com/codefuse-ai/MFTCoder/tree/main/mftcoder_accelerate

2. v0.3.0新特性Hightlights

  • 首先,新版本已经适配到最新的transformers v4.36.0, 它能带给我们更好的原生modeling,进而可以在很多开源模型比如llama等训练中有更多的Attention实现选择,比如 FlashAttention2,torch的SDPA和最基本的naive Attention(eager模式)。这样可以照顾到使用不同硬件的同学。对于最常用的FlashAttention2, 适配最新的v2.3.6,让MFTCoder可以有效利用最新的FlashAttention,比如sliding_window Attention, 进而支持类似Mixtral的全部特性。
  • 然后,MFTCoder-accelerate框架在原有支持Accelerate+DeepSpeed的基础上,增加了对FSDP的支持,进而升级为Accelerate + DeepSpeed/FSDP模式,以便给开发者提供更多选择。DeepSpeed对LoRA/QLoRA更适合,而FSDP在全量参数训练方面具备更快的性能。
  • 第三,我们也将MFTCoder支持的模型增加了Mistral, Mixtral-8x7b,Deepseek-coder, Chatglm3等新的主流开源模型。我们用新版MFTCoder训练的CodeFuse-Mixtral-8x7B, 是通用自然语言大模型经过多代码任务微调后代码能力领先的。而我们用MFTCoder训练的CodeFuse-DeepSeek-33B 更是可以在BigCode Leaderboard上以41.62%的胜率排在目前第一名。
  • 最后,我们引入了Self-Paced Loss, 作为MFT多任务微调收敛均衡的新loss,它能为我们带来初步的收敛均衡,用过去窗口时间内验证损失来调整不同任务的权重,进而控制不同任务的收敛速度,以达到多个任务同时收敛的目的, 避免一些任务已经过拟合而另一些任务还未收敛。它的效果可以通过以下使用self-paced loss和原始MFT loss的收敛情况观察到。

3. MFTCoder提升Mixtral-8x7B混合专家模型的代码能力实践

CodeFuse-Mixtral-8x7B 模型地址:

https://modelscope.cn/models/codefuse-ai/CodeFuse-Mixtral-8x7B
https://huggingface.co/codefuse-ai/CodeFuse-Mixtral-8x7B

3.1. Mixtral-8x7B底座代码能力总览

Mixtral-8x7B 是由Mistral AI开源的自然语言大模型。它是以Mistral-7B为基础,将8个7B模型通过稀疏混合专家(SMoE)模式混合到一起训练的MoE模型。作为一个MoE模型, Mixtral-8x7B的每一层的Attention是8个expert共用的,而每个expert是一个单独的MLP模块, 通过一个gate进行路由,每次推理激活两个expert。因此Mixtral尽管有8x7B, 实际推理时相当于只用了12B的计算。缺点是Mixtral-8x7B对于显存的需求依然很大,相当于一个46B的模型。

Sparse MoE: Switching transformer原理图

来源: https://huggingface.co/blog/moe

Mixtral-8x7B本身是一个通用自然语言大模型,并没有对代码进行针对性的加训,但它自身的代码能力在一众非代码大模型中是领先的,基本和CodeLLama-13B这个代码大模型性能相当,我们可以将它和一些主流通用自然语言大模型在HumanEval-X数据集中五种语言的Pass@1 评测结果对比如下(用Greedy解码统一测试):

Model

Python

C++

Java

JavaScript

Go

平均

Mixtral-8x7B

41.46%

40.84%

53.05%

45.12%

23.78%

40.85%

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%

Mixtral-8x7B的成功,为我们提供了关于MoE模型的很好地例子,证明了MoE模型是一个很好的趋势和方向。因此我们尝试对它进行多代码任务微调,看看它在微调后的代码能力提升如何。同时,Mixtral-8x7B也为代码大模型使用MoE提供了很多值得借鉴的地方,尤其是多任务代码大模型与MoE的思路有很多重合之处。

3.2. MFTCoder 多任务微调Mixtral-8x7B

借助MFTCoder(v0.3.0)的多任务微调能力,我们可以使用多个代码任务数据集对Mixtral-8x7B进行多任务微调(MFT)。在任务选择上,我们精选了3个核心代码任务数据,即代码补全(Code Completion),代码生成(Text2Code), 单测生成(Unittest Generation)一共60w条指令问答数据。该数据组合包含代码生成的三个基础任务,用基础任务微调对齐过的模型,在各类未训练过的代码任务上也有不错的泛化能力。

由于Mixtral-8x7B参数量比较大,尽管它是稀疏模型,实际计算仅仅类比12B模型,但是由于它依然需要46B模型所需要的显存,因此训练采用MFTCoder的多任务QLoRA微调模式,且代码任务属于相对复杂任务,我们对更多的模块进行微调,微调的模块我们采用和之前稍有区别的策略,只微调Attention,相应的配置如下:

{
    "lora_rank": 96,
	"lora_alpha": 32,
	"lora_dropout": 0.05,
	"targeting_modules": ["q_proj", "k_proj", "v_proj", "o_proj"]

对以上数据进行了约5个Epoch的训练到收敛。训练过程loss情况如下图所示:

通过多任务微调,CodeFuse-Mixtral-8x7B的各方面代码能力均有比较大的提升。

3.3. CodeFuse-Mixtral-8x7B模型效果

对Mixtral-8x7B进行多代码任务微调后,CodeFuse-Mixtral-8x7B在HumanEval-X数据集中五种语言的Pass@1评测结果对比如下(用Greedy解码统一测试),我们同时用开源的通用自然语言大模型的Qwen-14B以及CodeFuse-Qwen-14B的代码能力做比较。

Model

Python

C++

Java

JavaScript

Go

平均

CodeFuse-Mixtral-8x7B

56.1%

50.6%

57.3%

56.7%

43.3%

52.8%

Mixtral-8x7B

41.5%

40.8%

53.1%

45.1%

23.8%

40.9%

CodeFuse-Qwen-14B

48.8%

41.5%

46.3%

38.4%

26.8%

40.4%

Qwen-14B

32.9%

35.4%

32.9%

30.5%

21.3%

30.6%

可以看出, CodeFuse-Mixtral-8x7B 在 Mixtral-8x7B的基础上,各语言代码能力(HumanEval-X)均有明显提高, 比Mixtral-8x7B平均pass@1提高12%, 达到40.9% -> 52.8%。这是目前开源的非代码大模型经过多任务代码微调后较为领先的。

4. 联系我们

MFTCoder最新版本v0.3.0已经开源,感兴趣的同学可以用版本tag或者持续跟踪main分支,本文中提到的模型和数据集也在陆续开源中,如果您喜欢我们的工作,欢迎试用、指正错误和贡献代码,可以的话请给我们的项目增加Star以支持我们。

  • GitHub项目主页:https://github.com/codefuse-ai/MFTCoder
  • HuggingFace主页:https://huggingface.co/codefuse-ai
  • 魔搭社区主页:ModelScope 魔搭社区
  • CodeFuse官网:https://codefuse.alipay.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/334247.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

『Open3D』1.10 Tensor数据处理

open3d中实现了自身的数据类型,用于open3d中内部算法的数值计算,但基础使用上与numpy类似。 目录 1、tensor创建 2、tensor数据属性 3、 Tensor数据在CPU与GPU上的转换

An incompatible version [1.2.33] of the Apache Tomcat Native library is installed

ERROR:An incompatible version [1.2.33] of the Apache Tomcat Native library is installed, while Tomcat requires version [1.2.34] 意为:安装了不兼容的Apache Tomcat原生库版本[1.2.33],而Tomcat需要的版本[1.2.34] ERROR 14496 ---…

工业相机与镜头参数及选型

文章目录 1、相机成像系统模型1.1 视场1.2 成像简化模型 2、工业相机参数2.1 分辨率2.2 靶面尺寸2.3 像元尺寸2.4 帧率/行频2.5 像素深度2.6 动态范围2.7 信噪比2.8 曝光时间2.9 相机接口 3、工业镜头参数3.1 焦距3.2 光圈3.3 景深3.4 镜头分辨率3.5 工作距离(Worki…

表的增删改查 进阶(二)

🎥 个人主页:Dikz12🔥个人专栏:MySql📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏 目录 3.新增 4.查询 聚合查询 聚合函数 GROUP BY子句 HA…

【GitHub项目推荐--一键换脸】【转载】

FaceSwap 是一种利用深度学习算法来换掉图片和视频中的人脸的工具。基于 Tensorflow、Keras 和 Python,Faceswap 可以在 Windows、macOS 和 Linux 上运行。 安装了这个应用,你就能在你电脑上通过可视化交互的方式构建自己的换脸模型了。 地址&#xff…

时序分解 | Matlab实现CEEMDAN+PE自适应噪声完备集合经验模态分解+排列熵计算

时序分解 | Matlab实现CEEMDANPE自适应噪声完备集合经验模态分解排列熵计算 目录 时序分解 | Matlab实现CEEMDANPE自适应噪声完备集合经验模态分解排列熵计算效果一览基本介绍程序设计参考资料 效果一览 基本介绍 CEEMDANPE自适应噪声完备集合经验模态分解排列熵计算 运行环境m…

第六回 花和尚倒拔垂杨柳 豹子头误入白虎堂-安装服务器管理面板AMH和cyberpanel

且说鲁智深踏入菜园之时,二三十个泼皮无赖正聚集于此,他们手持果盒酒礼,脸上嬉皮笑脸,口称前来庆贺。然而,当这群人走到粪窖边缘,打头阵的张三和李四竟妄想搬动鲁智深,结果却被他轻描淡写地一脚…

element中表格组件的row-class-name和class-name属性的使用以及无效处理

1.这两个属性的使用&#xff0c;row-class-name用在el-table标签上&#xff0c;class-name用在el-table-column标签上。两个属性即可绑定类名也可绑定函数 <!-- 这里是绑定函数&#xff0c;也可以绑定类名 --> <el-table :data"tableData" selection-chang…

【C++】string的基本使用

从这篇博客开始&#xff0c;我们的C部分就进入到了STL&#xff0c;STL的出现可以说是C发展历史上非常关键的一步&#xff0c;自此C和C语言有了较为明显的差别。那么什么是STL呢&#xff1f; 后来不断的演化&#xff0c;发展成了知名的两个版本&#xff0c;一个叫做P.J.版本&am…

Liunx:线程控制

目录 创建线程&#xff1a;pthread_create(); 线程等待&#xff1a;pthread_join(); 线程退出&#xff1a;pthread_exit(); 线程取消&#xff1a;pthread_cancel() 说线程的时候说过&#xff0c;liunx没有选择单独定义线程的数据结构和适配算法&#xff0c;而是用轻量级进程…

关于java的继承

关于java的继承 我们在上一篇文章中&#xff0c;了解到了封装&#xff0c;我们本篇文章来介绍一下面向对象的第二大特点&#xff0c;继承&#xff0c;还是遵循结合现实生活中的实际情况&#xff0c;理解着去学习&#xff0c;能更好的加深印象&#x1f600;。 一、继承 继承的…

【从零开始学习Java重要知识 | 第三篇】暴打ReentrantLock底层源码

目录 前言&#xff1a; 前置知识&#xff1a; 什么是公平锁与非公平锁&#xff1f; 尝试自己构造一把锁&#xff1a; ReentrantLock源码&#xff1a; 加锁&#xff1a; 解锁&#xff1a; 总结&#xff1a; 前言&#xff1a; 在并发编程中&#xff0c;线程安全是一个重…

力扣 | 49. 字母异位词分组

这里使用HashMap Java package _49;import java.util.*;public class Problem_49_GroupAnagrams {public List<List<String>> groupAngrams(String [] strs){Map<String,List<String>> map new HashMap<>(); // int [] arr new int[]{}…

建筑能源管理系统

建筑能源管理系统是一种集成了先进的监测、控制、分析和优化技术的智能化系统&#xff0c;旨在提高建筑能源效率&#xff0c;降低能源消耗&#xff0c;减少环境污染&#xff0c;并为用户提供舒适、安全的建筑环境。通过监测建筑内的各种能源消耗情况&#xff0c;如电力、热水、…

Halcon基于形变的模板匹配

Halcon基于形变的模板匹配 形变分为两种&#xff0c;一种是基于目标局部的形变&#xff0c;另一种是由于透视关系而产生的形变。基于形变的模板匹配也是一种基于形状的匹配方法&#xff0c;但不同的是&#xff0c;其返回结果中不仅包括轻微形变的形状.形变的位置和参数&#x…

Python基础第二篇(Python基础语法)

文章目录 一、字面量二、注释三、变量四、数据类型五、数据类型转换六、标识符七、运算符八、字符串扩展内容&#xff08;1&#xff09;字符串定义&#xff08;2&#xff09;字符串拼接、&#xff08;3&#xff09;字符串格式化&#xff08;4&#xff09;字符串格式化的精度控制…

java spring cloud 企业工程管理系统源码+二次开发+定制化服务

随着企业规模的不断扩大和业务的快速发展&#xff0c;传统的工程项目管理方式已经无法满足现代企业的需求。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;企业需要借助先进的数字化技术进行转型。本文将介绍一款采用Spring CloudSpring BootMybat…

【AI绘画+本地部署】基于krita的AI绘画(含windows一键整合包)

comfyuikrita所有相关资源整合包(无需下载后面链接)百度网盘&#xff1a;https://pan.baidu.com/s/1iwNRpdTaD26YbzSDm6WLDA?pwdbur8 –来自百度网盘超级会员V4的分享 krita绘画软件官网地址 https://krita.org/en/download/krita-desktop/ krita-ai-diffusion 插件&#xff…

python 自动化模块 - pyautogui初探

python 自动化模块 - pyautogui 引言一、安装测试二、简单使用三、常用函数总结 引言 在画图软件中使用pyautogui拖动鼠标&#xff0c;画一个螺旋式的正方形 - (源码在下面) PyAutoGUI允许Python脚本控制鼠标和键盘&#xff0c;以自动化与其他应用程序的交互。API的设计非常简…

【答案】2023年国赛信息安全管理与评估正式赛答案-模块1任务一

1.根据网络拓扑图所示&#xff0c;按照IP 地址规划表&#xff0c;对防火墙的名称、各接口IP 地址进行配置。共8 分&#xff0c;每错1 处&#xff08;行&#xff09;扣1 分&#xff0c;扣完为止。地址、安全域、接口&#xff08;状态为UP&#xff09;、名称都正确。 2.根据网络…