查看原文
其他

24GB显卡轻松微调InternLM-20B,手把手带你打造专属大模型!

XTuner InternLM 2024-04-23
 


XTuner 是由上海人工智能实验室开发的低成本大模型训练、微调工具箱,通过 XTuner,仅需 24GB 显存,就可以微调 InternLM-20B 系列模型。



目前,XTuner 已支持 InternLM-20B 模型的 LoRAQLoRA全参数微调,集成 DeepSpeed ZeRO 训练优化技巧,并支持诸如 AlpacaOpenAssistantMSAgent 等热门开源数据集,用户可以“开箱即用”!


XTuner GitHub 链接:

https://github.com/InternLM/xtuner

(文末点击阅读原文可直达,欢迎体验)


InternLM-20B GitHub 链接

https://github.com/InternLM/InternLM



XTuner 大语言模型微调优化策略


在 XTuner 中,一体化集成 QLoRA、DeepSpeed、Flash Attention 优化策略,可以实现在 24GB 显存下微调 InternLM-20B 模型,仅需一张 RTX 3090 即可打造自己的专属大模型。


DeepSpeed ZeRO


DeepSpeed ZeRO 优化示意图


DeepSpeed 的 ZeRO 优化,通过将训练过程中的权重参数、权重梯度和优化器状态切片保存,每个 GPU 仅保存部分内容,以此在多 GPU 训练时大幅度降低显存开销。


同时,实践发现,DeepSpeed 训练时使用 FP16/BF16 的类型转换,相较于 PyTorch 的自动混合精度训练(AMP),在单 GPU 上也能有效降低训练时间,节省显存。


XTuner 目前已经集成了 DeepSpeed 的各项 ZeRO 优化策略,仅需在原有训练命令后追加一条参数即可实现。以 InternLM-20B QLoRA 在 Alpaca 数据集微调为例,引入 ZeRO 策略后,可以加速训练 25%,降低显存开销约 5 GB(29GB --> 24GB)


pip install 'xtuner[deepspeed]'xtuner train internlm_20b_qlora_alpaca_e3 --deepspeed deepspeed_zero2


LoRA & QLoRA


XTuner 支持 InternLM-20B 的 LoRA & QLoRA 微调,有效降低微调时显存开销。


全参数、LoRA、QLoRA 微调示意图



大语言模型微调时显存占用主要包括三部分:权重参数、权重梯度、优化器状态。其中,权重参数一般为静态占用,并不随训练变化,而权重梯度、优化器状态则是训练时占用。LoRA 用于优化权重梯度、优化器状态的显存开销,而引入量化的 QLoRA 可以在此基础上进一步优化权重参数的显存开销。


LoRA 旁路示意图



结合 LoRA 技巧(如上图),冻结大语言模型中的 Linear 层并新增一条包含两个连续“低维度” 的可训练 Linear 旁路(即 Adapter),可以有效降低权重梯度优化器状态的显存占用。


进一步,结合 QLoRA 技巧,将权重参数的存储由 FP16/BF16 转换为 INT4,可以有效降低权重参数的显存占用。


Flash Attention


Flash Attention 示意图


Flash Attention 将大语言模型中的 Attention 计算并行化,可以有效降低 Attention Score NxN 的显存占用(N 通常表示 token 个数,与文本长度强相关)。


XTuner 目前已经默认开启 InternLM-20B 的 Flash Attention 训练,在训练时对原始朴素 Attention 模块进行自动替换。



XTuner 数据集处理逻辑

(以 MSAgent 数据集为例)


为统一多种多样的数据集格式,XTuner 设计了一套完善的数据集处理逻辑,将数据集处理流程拆分为“数据格式化”和“数据模板化”两步。在此,以 MSAgent 数据集为例,详细介绍 XTuner 的数据集处理逻辑。


MSAgent 数据集:

https://modelscope.cn/datasets/damo/MSAgent-Bench


MSAgent 数据集简介


MSAgent 数据集每条样本包含一个对话列表(conversations),其里面包含了 system、user、assistant 三种字段。其中:


  • system: 表示给模型前置的人设输入,其中有告诉模型如何调用插件以及生成请求

  • user: 表示用户的输入prompt,分为两种,通用生成的prompt和调用插件需求的 prompt

  • assistant: 为模型的回复。其中会包括插件调用代码和执行代码,调用代码是要 LLM 生成的,而执行代码是调用服务来生成结果的


一条调用网页搜索插件查询“上海明天天气”的数据样本示例如下图所示:



步骤一:数据格式化


XTuner 在“数据规范化”阶段,利用数据集映射处理函数(map_fn)将原始数据集处理为规范化格式。



XTuner 所定义的规范化与 OpenAI 所采用的微调数据集格式类似,每条数据样本为一个列表,列表的每一个元素包含 System、Input、Output 三个字段,以此可以方便实现多轮对话、系统字段注入等等复杂功能。


经过规范化处理后的 MSAgent 数据集样本如下图所示:



为符合 Lagent 框架的 ReAct 算法,XTuner 在处理 MSAgent 数据集时,将 "think" 部分作为 LLM 的输出,而 "exec" 部分作为下一轮对话的 system 输入。


值得注意的是,上述规范化格式支持现阶段几乎所有的微调数据集,XTuner 也已内嵌了诸如 Alpaca、OpenAssistant 等等热门数据集的规范化映射函数,用户可以根据需求直接使用或微调修改。


步骤二:数据模板化


不同 LLM 的对话模版往往是不一样的,若要执行 LLM 的微调,对话模版的统一与对齐至关重要。XTuner 在“数据模板化”阶段,通过结合不同 LLM 的对话模板,来拼接、处理上一阶段得到的数据样本。


以 InternLM-Chat 的对话模板为例,其在“系统”字段前追加 "<|System|>:",在“用户”字段前追加 "<|User|>:",而在“LLM 输出”字段前追加 "<|Bot|>:",经过处理后的 MSAgent 数据样本如下图所示:



其中,input 字段即训练输入,标红的 output 字段即目标输出


目前,XTuner 已经内嵌了多种 LLM 对话模板,包括 InternLM-Chat, Llama-Chat, Baichuan-Chat, Qwen-Chat, ChatGLM 等等,用户可以直接使用,无需任何修改!



InternLM-7B + MSAgent 对话效果展示


考虑到 InternLM-20B 自身已经具备 Agent 能力,我们在此展示 InternLM-7B 在 MSAgent 数据集微调后的 Agent 效果。我们利用 XTuner 微调获得了 Agent 版本的 InternLM-7B 模型,用户可以执行下方命令进行测试:


xtuner chat internlm/internlm-7b --adapter xtuner/internlm-7b-qlora-msagent --lagent



部分对话示例:


第三届“一带一路”国际合作高峰论坛的时间和地点是什么?


  • InternLM-7B-MSAgent: 根据搜索结果,第三届“一带一路”国际合作高峰论坛将于2023年10月17日在北京举行。

  • InternLM-Chat-7B: 对不起,我无法提供关于“一带一路”国际合作高峰论坛的具体时间和地点的信息,因为我没有访问到最新的、官方的信息。你可以通过官方渠道或者权威媒体来获取准确的信息。


帮我查一下 CVPR 2023 的投稿数和录用数。


  • InternLM-7B-MSAgent: 根据搜索结果,CVPR 2023 的投稿数为9155篇,其中2360篇被接受,接受率为25.8%。

  • InternLM-Chat-7B: 很抱歉,我无法直接获取 CVPR 2023的投稿数和录用数。您可以尝试在 CVPR 官方网站上查找相关信息,或者咨询 CVPR 的组织者或相关人员。



总结


总的来说,XTuner 为大语言模型微调提供了一种既经济又高效的解决方案。其卓越的优化策略、丰富的数据集支持以及易于使用的特性使得它成为大语言模型开发者和研究者的首选工具。


不仅如此,配合强大的 InternLM-20B 模型,用户能够灵活地调整和优化模型以满足特定应用的需求,定制出专属的超高性能垂类大语言模型,为大语言模型社区生态发展开创了新的可能。


(欢迎关注 InternLM 公众号)


(欢迎扫码加入 XTuner 微信交流群)


如何解决复杂的多模态理解问题?多模态Agents:用LLMs链接不同多模态专家模型

2023-10-24

Q&A专栏 | 书生·浦语社区常见问题及解答

2023-10-23

上海AI实验室推出OpenCompass开放评测体系,提供大模型能力参考

2023-10-19


点击下方“阅读原文”直达 XTuner

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存