一个令人惊艳的 GitHub 开源项目,诞生了!

公众号关注 “GitHubDaily”

设为 “星标”,每天带你逛 GitHub!


随着人工智能技术的进步与发展,大模型的调试与训练需求也在与日俱增。对于开发者来说,拥有一款称手的 AI 开发工具,能够以低成本、高效率的方式来处理各种复杂任务,才是当下最为重要的一件事。

近期在 GitHub 上诞生了不少实用的 AI 项目,主打的就是一个便捷高效。比如这款名为 XTuner 的工具箱,便能够在大模型的调试、训练阶段,大幅降低成本。

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 模型,用户能够灵活地调整和优化模型以满足特定应用的需求,定制出专属的超高性能垂类大语言模型,为大语言模型社区生态发展开创了新的可能。

XTuner GitHub:https://github.com/InternLM/xtuner

(欢迎关InternLM 公众号)

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

相关推荐

  • 腾讯混元大模型开放文生图;微软AI投资重心或转向应用和业务;国产大模型10月榜单公布丨AIGC大事日报
  • 三大关键词看2023安博会!安防巨头大模型混战,机器人机器狗看花眼
  • 300 亿颗芯片、拉动万亿元产值,揭秘安谋科技撬动 AIoT产业的底气
  • 死磕一个小类目,视频号半年赚15w
  • LLM在text2sql上的应用
  • 编程语言流行趋势
  • 如何避免JavaScript中的内存泄漏?
  • OpenAI、谷歌微软等设立1000万美元AI安全基金
  • 骁龙8 Gen 3处理器发布:CPU性能提升30%、GPU提升25%
  • 从开源模型到商业落地应用,亚马逊云科技构建实用路线图!
  • C++的复杂,C是原罪:从值类别说开去
  • no-GIL Python,启动!
  • 您的数据存储和灾备系统选对了吗?
  • 是时候放弃云计算了
  • ChatGPT企业版,基本凉了!
  • 谷歌大爆料:神秘AI工具曝光,Gemini将取代PaLM 2
  • 高精度低成本游戏3D人脸重建方案,腾讯AI Lab ICCV 2023论文解读
  • 清华光电计算新突破:芯片性能提升万倍,研究登顶Nature
  • Nature | 30多年前的断言被打破了?大模型具备了人类水平的系统泛化能力
  • 腾讯混元大模型再进化,文生图能力重磅上线,这里是一手实测