您的当前位置:首页正文

【大模型微调】SWIFT:一种可扩展的轻量级基础设施用于微调

2024-10-31 来源:个人技术集锦

SWIFT:一种可扩展的轻量级基础设施用于微调

https://arxiv.org/abs/2408.05517

Yuze Zhao, Jintao Huang, Jinghan Hu, Daoze Zhang, Zeyinzi Jiang, Zhikai Wu, Baole Ai, Ang Wang, Wenmeng Zhou 和 Yingda Chen

ModelScope团队,阿里巴巴集团

摘要

最近在大型语言模型(LLMs)和多模态大型语言模型(MLLMs)方面的发展,利用基于注意力的Transformer架构,实现了卓越的性能和泛化能力。它们已经涵盖了传统学习任务的许多领域。例如,基于文本的任务,如文本分类和序列标注,以及以前使用不同模型解决的多模态任务,如视觉问答(VQA)和光学字符识别(OCR),现在可以基于一个基础模型处理。因此,LLMs和MLLMs,尤其是基于Transformer架构的模型的训练和轻量级微调,变得尤为重要。鉴于这些迫切需求,我们开发了SWIFT,这是一种可定制的一站式大型模型基础设施。在支持300多个LLMs和50多个MLLMs的基础上,SWIFT成为开放源代码框架,为微调大型模型提供了最全面的支持。尤其是,它是第一个为MLLMs提供系统支持的训练框架。除了微调的核心功能外,SWIFT还整合了推理、评估和模型量化等后训练过程,以便在各种应用场景中快速采用大型模型。通过对各种训练技术的系统集成,SWIFT提供了有用的工具,如大型模型不同训练技术之间的基准比较。对于专门针对代理框架的微调模型,我们展示了通过在SWIFT上使用自定义数据集进行训练,可以在ToolBench排行榜上获得显著改善,在Act.EM指标上相较于各种基线模型提高了 5.2 % − 21.8 % {5.2}\% - {21.8}\% 5.2%21.8% ,幻觉减少了 1.6 % − 14.1 % {1.6}\% - {14.1}\% 1.6%14.1% ,平均性能提升 8 % − 17 % 8\% - {17}\% 8%17%

1 引言

在过去几年中,Transformer [50] 被广泛认可为大型模型的主导架构之一。在早期阶段,仅使用编码器的结构完成文本分类和序列标注等任务,以BERT[13]等模型作为典型例子。相反,编码器-解码器和仅解码器结构主要用于文本生成任务。相比之下,视觉模型通常采用ResNet架构处理视觉问答(VQA)、目标检测和图像分割等任务。这些早期的深度学习任务方法特征为不同任务使用不同的模型结构。

计算能力的丰富和结构化的训练数据使得基于Transformer的模型的潜力得以发挥,随着工业界开始超越为单一任务调优的模型。这一转变使得Transformer成为开放领域应用的优选架构。最显著的例子包括OpenAI的GPT模型[3, 47],以及M6 [35]和OFA [51]模型。这种进展突显了使用单一模型解决多个闭域任务的可行性。因此,利用大规模基础模型进行生成任务的范式已成为解决包括文本分类和序列标注在内的多项任务的新标准。注意力机制在使用单一基础模型来处理不同多模态任务时也得到了广泛的关注。Qwen-VL [2]、GLM4-V [20]、InternVL [7]和DiT模型 [44] 的发布都满足了这一趋势。这些基础模型在开放域图像-文本和视频-文本问答以及图像生成中表现出强大的能力。它们还展示了识别详细图像信息和执行边界框标注的潜力,取得了与之前闭域解决方案相当的结果。

在大型模型的发展过程中,开源社区发挥了关键作用。Hugging Face 1 {\text{Face}}^{1} Face1 和 ModelScope 2 {}^{2} 2 等平台是促进大型模型共享和发展的显著例子。Hugging Face于2017年推出,最初的任务是解决与BERT的PyTorch版本相关的问题。由此产生的Transformers库后来成为实施大型模型的事实标准。同时,Hugging Face训练器还支持多节点和多GPU并行训练方法,例如DeepSpeed和FSDP,使其成为最广泛使用的训练器之一。对于对齐技术, T R L 3 {\mathrm{{TRL}}}^{3} TRL3 被引入以扩展Transformers的基础训练器类,并实现特定方法以支持直接偏好优化(DPO)[48]、优化奖励策略优化(ORPO)[24]和知识转移优化(KTO)[17]等技术。

由于大型模型参数众多且内存消耗高,其开箱即用的训练已成为AI普及的重大瓶颈。早期的解决方案,如前缀调优[33]、提示调优[31]和P-Tuning [ 39 , 40 ] \left\lbrack {{39},{40}}\right\rbrack [39,40] 开启了资源高效训练的篇章,但它们可能面临“知识遗忘”——这一现象描述的是微调后的LLMs可能失去其来自基础模型的一般能力。LoRA [25] 的引入显示了在训练过程中显著减少内存消耗的潜力,相比于全参数训练不损失模型的一般性。这使得开发者在使用更易于访问的硬件上开始在领域数据上进行高效训练。

随后,类似的技术不断被引入,如增强算法rsLoRA [28]、DoRA [37]、PISSA [41]、OLoRA [4]、LoRA+ [23]和LLaMA-Pro [52]等,提供了一系列用于高效微调的新技术。鉴于这些不同技术之间的巨大差异,开始出现统一训练接口的努力。例如,Hugging Face引入了专注于收集和标准化高效微调算法接口的PEFT 4 {}^{4} 4

除了基于额外结构(如LoRA)的轻量级训练技术外,量化也成为降低训练过程中的内存消耗的另一个解决方案。通常,LLMs使用16位的半精度格式,如float16和bfloat16,进行推理和训练。通过将张量类型减少到8位或4位,相同模型可以以更少的内存加载。甚至可以以1位或1.5位的精度运行模型;这种方法统称为量化。例如,BitsAndBytes [11] 使用带有异常值阈值的分段量化,AutoGPTQ [18] 对参数矩阵执行泰勒级数分解并使用海森矩阵评估参数重要性,而AWQ [34] 则评估参数重要性并应用量化的缩放因子。由于量化技术的复杂性及其对不同模型适应性差,Hugging Face社区推出了Optimum库 5 {}^{5} 5 ,作为各种量化方法的统一实现。然而,对于大多数开发者来说,LLM训练和微调的任务仍然是艰巨的,因为上述解决方案仅支持有限数量的模型和技术。尤其是现有解决方案通常缺乏对新模型和技术的支持。此外,为了确保训练模型能够有效部署,推理和评估等后训练过程也是使用训练模型的步骤。为了解决这个问题,我们推出了SWIFT 6 {}^{6} 6 ,一个旨在促进大型模型轻量级训练的开源框架,它还包含后训练过程的综合功能。SWIFT帮助开发者以最少的学习开销执行训练和推理操作。通过统一方式整合各种技术组件,无论是外部获取的还是自我开发的,SWIFT的任务是实现大型模型的高效训练和开发流程。

具体来说,我们的贡献可以总结如下:

  • 我们引入了SWIFT,一个与Transformers库的通用模型标准兼容的训练框架。SWIFT集成了PEFT和Optimum等库,实现了LLM和MLLM模型的预训练、微调和人类对齐。此外,还支持量化训练(QLoRA [12])。目前,SWIFT支持300多种LLM模型和50多种MLLM模型,涵盖所有主要的开源模型。它还支持150多个纯文本和多模态数据集。

  • 除了标准的注意力结构外,SWIFT还支持Mamba [22]模型等结构的训练和推理。此外,支持与Megatron [49]结构模型的训练,使得可以在多个节点和GPU上进行大规模并行预训练。

  • SWIFT项目中实现或植入了几种SOTA调优器,以增强轻量级训练。这些调优器旨在独立于我们的SWIFT训练循环使用,以允许更灵活的应用。- SWIFT库集成了众多后训练操作,包括量化(BNB/GPTQ/AWQ等)、LoRA合并、评估(支持100多个纯文本和多模态评估集),以及推理和部署能力。在部署方面,我们支持基于vLLM [30] 的原生PyTorch部署和推理加速,以及LMDeploy [8],这些集成共同支持对大多数文本和多模态大模型的推理。

总而言之,我们全面构建了围绕LLM训练的完整技术链,有效降低了理解和使用大模型的成本。特别是在多模态模型的训练方面,据我们所知,我们是第一个建立全面多任务训练和完整端到端解决方案的开源框架,针对众多多模态大模型。

2 相关工作

LLaMA-Factory[59] 是一个多功能、一体化的大模型训练框架。该框架与Hugging Face模型生态系统完全兼容。此外,它支持基于Gradio的WEB-UI,进一步降低了使用成本。LLaMA-Factory支持超过100种文本LLM的预训练、微调和人类对齐。它还促进了LLaVA、PaliGemma和YI-VL等一些多模态模型的训练。在评估能力方面,它支持CEVAL、MMLU和CMMLU数据集的评估过程,并启用基于vLLM的推理和部署工作流程。

Firefly 7 {}^{7} 7 利用变换器训练生态系统(Trainer/PEFT等)。值得注意的是,它探索训练数据集并创建了一些流行的NLP训练数据集,例如firefly-train- 1.1 M {1.1}\mathrm{M} 1.1M 、moss-003-sft-data,以及ultrachat。他们还利用这些数据集对各种模型进行轻量级训练,包括firefly-mixtral-8x7b,在多个排行榜上超越了Yi-34B-Chat。

FastChat[58] 是一个全面的训练和推理框架。该框架具备模型训练、推理、部署和评估的能力。FastChat利用变换器和PEFT进行训练,并支持LLaMA、Vicuna和T5等模型。它支持使用LoRA、QLoRA和XFormers 8 {}^{8} 8 等技术进行轻量级微调。在部署方面,FastChat支持像vLLM、 SGLang 9 {\text{SGLang}}^{9} SGLang9 和LightLLM 10 {}^{10} 10 这样的推理加速框架。FastChat专注于模型推理和部署,训练支持相对有限。

表1:训练辅助能力支持的比较 蜥蜴 11 {\text{蜥蜴}}^{11} 蜥蜴11 使用像 TRL、PEFT 和 Transformers 这样的训练组件库。这个框架扩展了训练能力,包括 mambassm 12 {}^{12} 12 库的封装,从而增强了在 transformers 生态系统中训练这些模型的能力。蜥蜴支持多个系列的 LoRA 和 QLoRA 训练,包括 LLaMA、Mistral、Qwen 和 Phi,并且还支持推理和合并 LoRA 操作。

LMFlow[14] 以管道式风格封装了模型训练过程。它支持 LLaMA、Gemma 和 Qwen 等 LLM 模型的 SFT 和 RLHF 训练,并允许自定义优化器和调优器,如 LoRA。此外,它还开发了轻量级微调技术,如 LISA[43]。LMFlow 提供了评估 LLM 的能力,并支持纯文本和多模态模型的推理和推理加速。

我们已在表1中总结了所有这些框架的能力以供参考。

3 实施与框架

我们认为,统一多种模型架构以增强模型的全面能力,是大型模型发展中的一个重要趋势。例如,文本和多模态 LLM 之间的主要区别在于额外的视觉塔组件。来自这个视觉塔的隐藏状态,在经过投影器处理后,融入 LLM 的嵌入中。此外,绝大多数多模态模型可以支持文本输入,并以文本-only 模型的方式进行推理。预训练一个仅文本的模型通常需要处理的数据量达到数十太字节的令牌,这几乎接近耗尽所有有效文本语料库的极限。然而,从多模态的角度来看,文本、图像和视频数据的隐含状态可以在高维空间中互换。因此,通过多模态预训练训练的模型可以被认为具有几乎无限的数据,因此,它们在数据上将具有显著的优势,超越那些仅基于文本训练的模型。为此,我们相信,多模态模型将在未来的模型开发中占主导地位。在我们的框架设计中,我们努力消除纯文本 LLM 和多模态 LLM 之间的差距,方法是建立统一的数据处理、模型模板和模型训练标准。

训练或微调并不是 LLM 应用的终点。一旦模型被训练,就常常需要便捷高效的评估过程来确定模型质量。这些评估过程甚至可以在训练阶段集成以进行交叉验证(例如,在训练期间加入 gsm8k 评估),或者在推理期间对特定数据集进行综合评估。此外,还可以对模型进行后训练量化,以使用量化模型进行服务,确保在保持理论性能的同时,内存使用最小化。

这种必要性同样适用于模型部署。高效推理和部署各种后训练检查点,包括原始模型、LoRA 模型、LLaMA-Pro 模型和量化模型,同样重要。因此,在框架内整合上下游能力,以及训练本身至关重要。这种整合不仅将简化模型应用的整体过程,还将使得能够一起探索不同的能力。评估与部署、评估与训练,以及量化与部署之间的联合关系可在此找到。我们相信,为了真正降低模型利用的门槛,构建一个以训练能力及其下游整合为中心的统一框架以支持文本和多模态 LLM 是至关重要的。

图 1:SWIFT 框架

3.1 训练架构设计

SWIFT 支持几类轻量级调优技术:

  • 减少可训练参数:这涉及部分训练原始模型的参数。减少可训练参数的数量可以有效降低梯度值的数量。例如,LISA 随机激活不同的层,可以显著降低内存使用,而不会显著降低训练精度。

  • 模型量化:量化是降低内存压力的关键方法。其主要思想是将模型的低精度浮点值转换为8位或更低的定点值。SWIFT 当前支持六种类型的量化:BNB、HQQ、EETQ、AWQ、GPTQ 和 AQLM。一般来说,量化方法与额外的训练结构相结合,如QLoRA。

  • 减少梯度值的内存使用:如 GaLore 等技术对梯度值执行 SVD 分解,有效减少存储这些值所需的内存。

  • 冻结原始模型:此方法支持与附加结构一起训练。典型的实现包括 LoRA 和 AdaLoRA。

  • 分片或混合精度:例如 DeepSpeed Zero1/2/3、FSDP 和混合精度训练。

如图 1 所示,调优器可以利用并扩展 PEFT 库的功能。例如,调优器结合了 LoRA、AdaLoRA [55]、IA3 [36]、BOFT [38] 和 Vera [29] 等技术。这些调优器经过调整,以确保与 MLLMs 在训练时的兼容性与无缝操作。此外,与 PEFT 相比,SWIFT 提供更广泛的调优器支持,包括 SCEdit [27] 和 ResTuning [26],以及 LLaMA-Pro、LongLoRA 和 LISA。这些调优器可以组合使用,类似于 PEFT 的 MixedPeftModel 功能,并支持将停用的调优器卸载到 CPU 或元设备。这种调优器的整合使其不仅适用于 SWIFT 支持的模型,也适用于外部模型。SWIFT 通过其 prepare_model 和 from_pretrained 方法无缝支持 PEFT 调优器和自定义调优器。

在模型功能模块中,SWIFT 提供一个基本的模型加载器,允许灵活定制模型配置。考虑到在训练过程中可能出现各种兼容性问题,例如 dtype 转换错误或张量就地更改错误,SWIFT 使用补丁模块在模型加载后解决这些问题,确保在不同场景下(包括单 GPU、多 GPU、全参数或 LoRA 训练)的顺利运行。

在数据集模块中,支持三种类型的数据源。第一种是从 ModelScope 加载数据集的 MsDataset。第二种是来自 Hugging Face 的 ‘datasets’ 模块,提供 Hugging Face 数据集的加载能力。最后,我们支持用户自定义的数据集,例如本地的 CSV 或 JSONL 文件。数据集模块的一个关键功能是预处理能力,主要有两个功能:转换不同的数据集为标准格式。具体格式细节可在附录部分 A 中找到。

模型模块的一个关键组成部分是模板。该组件确保 SWIFT 支持的各种模型能够根据模型训练的设计正确生成输入_ids、attention_masks、pixel_values 和 labels 等关键字段。此模块与上述标准数据集格式交互,并根据不同模型的要求将这些格式转换为不同的输入。具体来说,对于多模态定位任务,边界框(bbox)坐标在模板中转换。例如,bbox_type ‘real’ 表示实际像素值,‘norm_1000’ 表示千分之一的值,‘norm_1’ 表示归一化坐标值。模板将数据的实际坐标值转换为模型所需的坐标值。

在模型的训练组件中,一个重要部分是训练器,包括 SFT/PT 训练器和人类对齐训练器。前者直接继承自 Transformers 的训练器,用于预测和训练下一个令牌的交叉熵。后者继承自 TRL 的相应类,用于训练各种 RLHF 算法,如 DPO、ORPO 和 KTO。对于多模态模型的 RLHF 任务,我们进行了额外的修改和调整,以确保我们支持的所有多模态模型都可以使用任何合规的对齐数据集进行 RLHF 训练。

具体来说,在预训练方向上,SWIFT 支持 Megatron 架构模型。特别是在 CPT 场景中,SWIFT 首先将变换器架构的检查点转换为 Megatron 架构的检查点,然后继续使用 Megatron 的各种并行方法对模型进行预训练。训练后,检查点可以转换回变换器支持的格式。SWIFT 利用 PAI-Megatron-Patch 框架 13 {}^{13} 13 支持 Megatron。检查点的转换过程通过 SWIFT 中的导出模块支持。

在训练组件中,新优化器如 GaLore 和 Q-GaLore 被集成,使其在训练过程中易于使用。为了进一步减轻训练压力,SWIFT 支持序列并行技术 [10],在 DDP 条件下将序列分布到不同的进程,从而减少长序列训练的内存消耗。

为了方便在实际生产环境中使用 LLM 的训练、推理和评估,我们已在 PYPI 上发布 SWIFT,并通过命令行支持各种功能。在训练过程中,可以通过命令行命令轻松调用 SWIFT,具体命令可以在附录部分 A 中找到。

SWIFT 为不同任务提供三条命令:‘pt’ 用于预训练,‘sft’ 用于微调,‘rlhf’ 用于 RLHF。这些命令对纯文本模型和多模态模型都是一致的。对于数据集选择,SWIFT 支持使用 ‘-dataset’ 选项直接使用纯文本和多模态数据集,同时也支持引用本地训练文件。

最高级的接口是网络 UI。对于熟悉图形界面的用户,使用网络 UI 更符合他们的习惯。网络 UI 以 Gradio 作为基础框架。网络 UI 启动后,用户可以直接在界面上选择不同的训练阶段并调整各种训练超参数。一旦训练开始,界面将显示训练日志和损失/准确率图表。对于 RLHF 任务,图表将替换为与任务类型相关的边距和 logps 等指标。这一工作流程适用于纯文本模型和多模态模型。本质上,SWIFT 网络 UI 充当命令行汇编器。网络 UI 为单节点多 GPU 或多节点多 GPU 执行组装命令行字符串,并使用这些命令进行多进程后台执行。

为了轻量级训练,SWIFT 支持 QLoRA 训练方法。可用的量化方法包括 BNB、HQQ [1]、EETQ [21]、AWQ、GPTQ 和 AQLM [16]。在模型支持方面,我们为超过 300 个 NLP 模型和 50 多个多模态模型提供了训练流程。具体而言,为了有效微调代理,我们合作创建了 MS-Agent 数据集 14 {}^{14} 14 。该数据集是一个相对稀缺的高质量中文微调数据集,专为代理设计。随后,我们更新了 MSAgent-Pro 数据集 15 {}^{15} 15 ,该数据集采用 ToolBench 格式。该数据集对于监督微调(SFT)以增强代理能力非常重要,并且它包括 Chain of Thought (CoT) 过程,显著提高了多轮代理调用的有效性。为了方便代理微调,SWIFT 支持数据集格式中的 ‘tools’ 字段,并允许使用不同的提示格式进行微调训练(例如,ToolBench [45] 格式、ReACT [54] 格式或模型模板定义的其他格式)。这一点可以在 SWIFT 标准数据集定义中看到。

SWIFT 支持 ‘loss-scale’ 技术 [32],该技术增加了重要标记的训练权重。这使得模型在学习过程中更容易记住重要内容。我们使用此技术增加了代理训练中关键部分的权重,例如 Action 和 Action_Input 字段,导致性能显著提高,相较于不使用 ‘loss-scale’。

在多模态领域,SWIFT 提供全面支持,各种开放领域任务可以在 SWIFT 中运行,例如视觉问答(VQA)、光学字符识别(OCR)、基于内容的字幕生成和指向基础的理解。

3.1.1 推理和部署架构设计。推理和部署本质上存在自然的相互依赖关系。推理的核心逻辑可以在部署中应用,反之亦然,部署可以视为推理的服务封装。SWIFT 的推理和部署可以根据后端分为三种类型:PyTorch Native(PT)、vLLM 和 LMDeploy。这三种推理框架共享相同的参数,为未来轻松扩展其他推理加速框架奠定了基础。SWIFT 对 vLLM 和 LMDeploy 的推理封装的一个重要原因是,在原始框架无法充分支持模型模板的情况下,SWIFT 可以使用自己的模板来掩盖框架之间的差异。

SWIFT 使用 FastAPI 将推理封装为服务,完全符合 OpenAI 通用接口定义 16 {}^{16} 16 。在代理能力的部署方面,SWIFT 支持 OpenAI 标准字段,如 tools 和 tool,并且在数据格式方面也支持代理数据格式的推理和部署,如 ToolBench 和 ReACT。我们已将代理提示的连接直接纳入模板,这意味着我们可以轻松支持不同模型的特定代理格式。

SWIFT 支持官方和训练模型的推理和部署,这些功能在 WEB-UI 中也得到同样的支持。这意味着用户可以将 SWIFT 同时用作部署框架和 ChatBot。值得注意的是,我们已在 vLLM 和 PT 后端中集成了对多 LoRA 推理和部署的支持。具体而言,用户可以通过在 OpenAI 接口中指定各自的 LoRA 名称,方便地在不同的 LoRA 配置之间切换,而无需合并 LoRA 模型。

3.1.2 评估架构设计。评估和推理部署是相互依赖的。模型的评估,尤其是那些训练后的模型,依赖于模型是否能够启动推理或部署。在许多评估框架中,例如 OpenCompass[9],直接将标准 OpenAI 接口作为依赖使用,这也是支持 SWIFT 中推理和部署的原因之一。在实践中,开发者可能使用不同的推理后端,例如 vLLM 或 LMDeploy。因此,在评估期间,开发者可以灵活选择不同的后端和部署形式(例如,官方模型、训练后 LoRA 模型、训练后 LLaMA-Pro 模型、合并模型、量化模型)进行评估,使过程更加与其实际使用案例或消融研究场景对齐。

为了方便使用自定义数据集,SWIFT 支持用于两种任务类型的自定义评估数据集:

  • 目标问题评估类似于 CEval:开发者可以将他们的数据集格式化为 CEval 风格的 CSV 文件,然后进行评估,得出明确的结果。

  • 关于 QA 的主观问题评估:该评估使用标准指标,如 ROUGE 和 BLEU。在将数据写入 CSV 文件后,开发者可以执行评估。 ∙ \bullet 在评估能力方面,我们依赖于 ModelScope Community 的 EvalScope 17 {}^{17} 17 框架。该框架通过整合 OpenCompass(用于文本模型)和 VLMEvalKit[15](用于多模态模型)构建评估能力。通过整合 EvalScope,SWIFT 当前支持超过 100 + {100} + 100+ 总数的纯文本评估集和多模态评估集,以及上述两种类型的自定义评估数据集及其评估流程。

3.1.3 量化和导出架构设计。导出模块主要用于合并调谐器、转换检查点格式和量化。目前,该模块支持以下类型的导出操作:

  • 合并调谐器:包括合并横向可调整的 LoRA、LongLoRA 和 LLaMA-Pro。

  • 转换检查点:涉及将检查点在 Transformer 格式和 Megatron 格式之间互相转换。

  • 量化:目前,我们支持三种量化方法:AWQ、GPTQ 和 BNB。

表 2: 量化方法的支持

4 实验

除了算法框架外,我们还探索了模型的调优和底层技术。我们的目标是让 SWIFT 不仅作为一个框架,还作为验证技术本身的一种方式。为此,我们将对 LLM 训练的探索分为几个方向。

4.1 轻量级调优基准

我们利用 SWIFT 复制并验证不同轻量级调优算法对模型的影响。以 qwen-7b-chat 作为基础模型,我们在单个 A100-80G GPU 上进行了训练,比较了内存使用和损失等指标。

超参数
batch_size1
gradient_accumulation_steps16
epoch1
max_length2048
learning_rate5e-5
gradient_checkpointingtrue
flash_attntrue
weight_decay0.01
warmup_ratio0.03
lora_rank8
galore_rank128
llamapro_new_blocks4
lisa_activated_layers2

表 3: 调谐器基准超参数设置

实验超参数显示在图表 3 中,实验结果总结在表 4 中。在基准测试中,“Full”表示使用全参数训练的对照组实验。可以观察到,LISA 实现了最低的内存消耗和最快的速度。在额外结构调节器中,LoRA+ 记录了最低的评估损失。在梯度减小方法中,Q-GaLore 表现出最低的内存消耗。PEFT 库中未包含这些调优方法。

4.2 代理训练

代理训练是模型 SFT 中的重要类别。代理训练的质量决定了模型是否能够在代理框架内应用,以解决实际的业务问题。通常,代理能力可分为三种类型:

  1. 文档检索

  2. 代码解释器

  3. API 调用

狭义上,代理训练通常指的是 API 调用。该能力与模型的思维链(CoT)能力呈正相关;CoT 能力越强,模型对 API 的理解和反思错误的能力越好。

在本研究中,我们利用混合数据集,包括 Tool-Bench 数据集和 AgentFlan [6] 数据集,并进行了系列实验。我们使用 LLaMA3-8b-instruct 模型和 Qwen2-7b-instruct 模型进行训练,并比较训练前后的结果。超参数设置如表 5 所示。

超参数
batch_size1
gradient_accumulation_steps32
epoch1
max_length4096
learning_rate2e-5
gradient_checkpointingtrue
flash_attntrue
lora_target_modules所有线性
lora_rank8

表 5:代理实验超参数设置

在某些实验中,我们采用损失缩放技术来增强某些重要标记的权重。

基于 LLaMA3-8b-instruct 模型的损失缩放技术的消融研究如表 6 和 7 所示。

模型计划 EM行动 EM幻觉率平均 F1R-L
原始74.2236.1715.6820.012.14
w/o 损失缩放84.2955.714.8549.4025.06
w/ 损失缩放85.158.151.5752.1026.02

表 6:LoRA(领域内)损失缩放的消融测试

模型计划 EM行动 EM幻觉率平均 F1R-L
原始69.4734.2114.7220.2514.07
w/o 损失缩放85.1055.555.2648.5231.22
w/ 损失缩放85.7959.432.5652.1931.43

表 7:LoRA(领域外)损失缩放的消融测试

实验结果表明,引入损失缩放显著提高了所有评估指标。

Qwen2-7b-instruct 的实验结果如表 8 和 9 所示。

模型计划 EM行动 EM幻觉率平均 F1R-L
原始74.1154.744.1646.538.51
GPT480.2855.525.9848.7428.69
LoRA(我们的方法)77.0556.970.949.5319.81
全量(我们的方法)83.3760.012.5854.4126.34

表 8:Qwen2-7b-instruct ToolBench(领域内)结果

模型计划.EM行动.EM幻觉率平均.F1R-L
原始73.1757.673.8448.5811.23
GPT477.8055.265.1247.4530.61
LoRA(我们的)78.0558.911.5351.2826.04
全量(我们的)82.5760.141.7955.2531.34

表9:Qwen2-7b-instruct ToolBench(超出领域)结果

可以观察到,与官方Qwen2模型相比,训练后的平均指标提高了 8.25 % {8.25}\% 8.25% ,模型幻觉减少到个位数。此外,大多数指标超过了GPT-4的表现。

LLaMA3-8b-instruct的实验结果显示在表10和11中。

模型计划.EM行动.EM幻觉率平均.F1R-L
原始74.2236.1715.6820.012.14
LoRA(我们的)84.5844.7315.1138.9022.22

表10:Llama3-8b-instruct ToolBench(领域内)结果

基于LoRA训练,LLaMA3的平均指标提高了 17 % {17}\% 17% 。这表明开源模型和数据集对实际垂直场景的代理训练具有重要意义。我们对训练过程中使用的超参数和其他经验进行了总结,以便其他开发者能够复现和应用。提到的数据集 18 {}^{18} 18 和模型 1920 {}^{1920} 1920 均可在ModelScope中找到。

模型计划.EM行动.EM幻觉率平均.F1R-L
原始69.4734.2114.7220.2514.07
LoRA(我们的)84.349.5613.1943.0924.85

表11:Llama3-8b-instruct ToolBench(超出领域)结果

5 结论

在本文中,我们描述了SWIFT,这是一个来自ModelScope的轻量级一站式大模型训练框架。我们希望这个框架能够消除不同模型、数据集和SOTA技术之间的不匹配,为开发者提供一种标准化的解决方案,可以以闭环的方式解决整个问题。SWIFT支持超过300个LLM和50个MLLM,并提供基于命令行的易用WEB-UI。开发者可以在WEB-UI上执行各种命令行操作,大大降低使用成本。然而,由于开发时间有限和其他因素,SWIFT仍有更多功能计划,例如:

  1. 更好地支持Megatron大规模并行训练。目前,SWIFT对Megatron模型的支持并未完全覆盖主流的LLM和MLLM。我们希望SWIFT能够为基础模型开发者提供更大的预训练便利。

  2. 更深入的多模态研究。虽然SWIFT已经支持大多数主流多模态模型的训练,但我们仍然缺乏对多模态数据集和模型的更深入工作,例如提供高质量的数据集以防止知识遗忘,或使用ModelScope自开发的数据集训练新的多模态模型。此外,我们希望对多模态代理、多模态CoT和多模态对齐训练进行更深入的研究。

  3. 支持RAG系统。我们希望SWIFT的训练技术能够更具SOTA和稳健性,更易于连接到各种AI系统,例如为RAG系统模型提供增强训练,帮助RAG系统提高召回率和回答准确性。

Top