【云驻共创】基于昇思MindSpore Transformers的书生·浦语大模型全流程开发
一、前言
本期华为云的讲师是书生.浦语社区技术运营、技术布道师闻星老师和昇思MindSpore技术布道师耿力老师,分享主题是:昇思MindSpore技术公开课·大模型专题(第二期)。
昇思MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景统一部署三大目标。MindSpore Transformers 套件基于MindSpore内置的并行技术和组件化设计,目标是构建一个大模型训练、微调、评估、推理、部署的全流程开发套件。
书生·浦语大模型(InternLM)上海人工智能实验室和来自不同高校、企业的研发人员共同参与贡献的开源项目,致力于大模型研究与开发工具链的开源组织,为所有 AI 开发者提供高效、易用的开源平台,让最前沿的大模型与算法技术触手可及。
目前昇思大模型套件 MindSpore Transformers 已经集成书生·浦语大模型(InternLM)。
接下来,我们一起欣赏两位老师详细解读书生.浦语大模型开源全链路工具链,演示如何对书生.浦语进行微调、推理以及智能体开发实操。
二、基于昇思MindSpore Transformers的书生·浦语大模型全流程开发
2.1 书生·浦语大模型
本章节主要介绍书生·浦语大模型相关知识。主要包括以下内容:
- 了解书生·浦语大模型及开源工具链;
- 了解书生大模型实战营和社区。
2.1.1 书生·浦语大模型开源历程
2023年6月7日,千亿参数语言大模型发布。
2023年7月6日,internLM 千亿参数大模型全面升级支持 8K 语境、26种语言全面开源,免费商用:internLM-7B 模型、全链条开源工具体系。
2023年8月14日,书生·万卷 1.0 多模态预训练语科库开源发布。
2023年8月21日,升级版对话模型 internLM-Chat-7B v1.1 发布,开源智能体框架 Lagent 支持从语言模型到智能体升级转换。
2023年8月28日,internLM 千亿参数模型参数量升级至 123B。
2023年9月20日,增强版 internLM-20B 开源,开源工具链全栈升级。
2024年1月17日,internLM 2 开源。
2.1.2 书生·浦语大模型的模型种类
模型有四个种类:
- 基座模型(internLM)
- 对话模型(internLM-Chat)
- 数学模型(internLM-Math)
- 多态模型(internLM-XComposer)
2.1.3 书生·浦语大模型的参数量
有三个参数量可供选择:
- 1.8B——18亿参数:适合在移动端设备上部署
- 7B——70亿参数:各方面能力均衡,可单卡 3090 部署
- 20B——200亿参数:擅长工具调用智能体任务,可单卡 A100 部署
2.1.4 书生·浦语大模型开源工具链体系
标准化的开源工具链算法库,覆盖了从模型微调到评测的全链条流程。
XTuner,微调工具。适配多种开源生态,支持加载 Hugging Face、ModelScope 模型或数据集;支持自动化加速,开发者无需关注复杂的显存优化与计算加速细节;多种微调策略与算法,覆盖各类 SFT 场景;适配多种硬件,训练方案覆盖 NVIDIA 20 系列以上所有显卡,最低只需 8GB 显存即可微调 7B 模型。
LMDeploy,LLMs 轻松化部署与高效服务化,拥有极致的部署性能。
2.1.5 书生·浦语大模型实战营
书生·浦语大模型实战营于2023年12月份推出,目前已累计覆盖了10w学习人次和2000家单位,孵化出了500个项目。
书生·浦语大模型实战营提供了优质前沿的大模型教程,拥有热心助教全程陪伴,颁发权威证书。
2.1.6 书生·浦语大模型社区兴趣小组
书生·浦语大模型社区里兴趣小组类型主要有:
- RolePlay SIG - 角色扮演
- RAG SIG - 检索增强生成
- Agent SIG - 智能体
- Multimodal SIG - 多模态
- Deploy SIG - 量化部署
- Evaluation SIG - 大模型评测
目前书生·浦语大模型社区拥有500+成员,50+小组项目,已举办了超30场圆桌会。
在兴趣小组可进行知识分享,群内将分享各种该方向的学习资料,包括技术报告、学术论文、解读文章、开源工具等等,也会定期组织大家共读 paper,掌握前沿的知识与信息。
兴趣小组定期举办圆桌会议,探索和分享该方向的技术、论文、实践项目,无论你是在该领域的专家还是新手,这里都有你值得期待的内容。
兴趣小组支持通过个人或与社区小伙伴结组的方式,挑战这个兴趣方向的大模型应用全生命周期。项目成果既可以是实用的 RAG 企业知识库类大模型,也可以是你喜欢的动漫角色、小说人物等等。
2.1.7 书生·浦语大模型社区共建计划
书生·浦语大模型社区目前提出共建计划的知识库有:
- NLP 知识库
- VLM 知识库
- Deploy 知识库
- InternLM 知识库
- CVPR 知识库
目前已有60名同学报名,120个共建任务被领取。
2.2 MindSpore Transformers大模型微调实践
本章节主要介绍MindFormers大模型套件的微调相关知识。主要包括以下内容:
- 理解大模型微调的基本含义;
- 了解MindFormers是如何进行大模型微调的;
- 初步可以根据教程完成MindFormers中大模型微调的实验。
2.2.1 大模型的微调
大模型微调(Fine-tuning),指在已经预训练好的大型语言模型基础上,使用特定的数据集进行进一步的训练,以使模型适应特定任务或领域。
预训练模型(Pre-trained Model),可以完成很多通用任务,比如回答问题、总结数据、编写代码等,但没有一个模型可以解决所有的问题,尤其是行业内的专业问答、关于某个组织自身的信息等,是通用大模型所无法触及的。在这种情况下,就需要使用特定的数据集,对合适的基础模型进行微调,以完成特定的任务、回答特定的问题等。
一个通用大模型涵盖了许多语言信息,并能够进行流畅的对话。但是如果需要医药方面能够很好地回答患者问题的应用,就需要为这个通用大模型提供很多新的数据以供学习和理解。例如,布洛芬到底能否和中药同时吃?为了确定模型可以回答正确,我们就需要对基础模型进行微调。
2.2.2 大模型微调主要方法
大模型微调主要方法有两种:
- 全参微调(Full Fine-tuning):全微调是指对整个预训练模型进行微调,包括所有的模型参数。在这种方法中,预训练模型的所有层和参数都会被更新和优化,以适应目标任务的需求。这种微调方法通常适用于任务和预训练模型之间存在较大差异的情况,或者任务需要模型具有高度灵活性和自适应能力的情况。Full Fine-tuning需要较大的计算资源和时间,但可以获得更好的性能。
- 部分微调(Repurposing):部分微调是指在微调过程中只更新模型的顶层或少数几层,而保持预训练模型的底层参数不变。这种方法的目的是在保留预训练模型的通用知识的同时,通过微调顶层来适应特定任务。Repurposing通常适用于目标任务与预训练模型之间有一定相似性的情况,或者任务数据集较小的情况。由于只更新少数层Repurposing相对于Full Fine-tuning需要较少的计算资源和时间,但在某些情况下性能可能会有所降低。
2.2.3 大模型微调的主要步骤
大模型微调的主要步骤如下:
- 准备数据集:制作和数据清洗,保证数据集质量和准确性;
- 选择预训练模型/基础模型:根据数据特性选择合适的预训练模型,设定微调策略:根据需求和资源情况,选择微调策略;
- 设置超参数:微调的学习率,BS等等;
- 进行微调训练:启动微调,观察训练收敛情况;
- 模型评估和调优:使用验证集对模型进行评估;
- 测试模型性能:测试模型实际应用效果;
- 模型部署和应用:部署模型到生产环境。
2.2.4 InternLM 大模型介绍
InternLM ,即书生·浦语大模型,是由上海人工智能实验室和来自不同高校、企业的研发人员共同参与贡献的开源项目。包含面向实用场景的70亿和200亿参数基础模型与对话模型(InternLM-7B/20B)。
2.2.5 InternLM-7B 大模型微调步骤
InternLM-7B大模型微调主要步骤如下:
- 数据集:选择开源的微调数据集Alpaca;
- 数据预处理:使用MindFormers针对Alpaca的数据预处理脚本进行数据处理,并转换为MindSpore框架的MindRecord数据格式,用于微调训练;
- 预训练权重:选择LLaMA2开源的预训练权重 InternIm_7b-base.ckpt(已转换为MindFormers框架支持的ckpt格式);
- 微调超参数:选择微调策略,可选择全参微调或者LoRA低参微调,根据策略修改微调超参数;
- 分布式微调:修改分布式配置,使用分布式启动脚本,开启分布式微调训练,观察loss收敛情况;微调后效果评估:加载微调后权重,输入微调问题进行效果测试。
2.2.6 InternLM-7B 微调Alpaca数据集介绍及预处理
1、数据集
选择开源的微调数据集alpaca(有监督数据);
2、分词模型下载
从Hugging Face下载预训练权重时,同时下载对应的tokenizer.model。参考权重转换中的链接进行下载;
3、使用预处理脚本生成mindrecord训练数据
2.2.7 InternLM-7B 预训练权重迁移:PT开源权重转换为MS权重
一般使用 PyTorch 的格式,华为上使用 MindSpore,所以需要将PT开源权重转换为MS权重。
选择InternLM-7B-Base开源的预训练权重InternIm_7b-base.ckpt,转换为MindFormers套件支持的ckpt格式。
2.2.8 InternLM-7B 微调策略:全参微调和LoRA低参微调
- 全参微调:不冻结任何参数,直接加载预训练权重进行全部参数的微调,所有参数在训练过程中均要被更新,资源消耗较高;
- LoRA低参微调(部分参数微调):冻结原始网络参数,对Attention层中QKV增加旁支,包含两个低维度的矩阵A与矩阵B,微调过程中仅更新A、B LoRADense矩阵,因此训练参数被大幅度降低,资源消耗较低。
2.3 MindSpore Transformers大模型推理实践
本章节主要介绍MindFormers大模型推理的相关概念,使用方法与部署经验并通过实操练习,加强对大模型推理的理解。主要包括以下内容:
- 理解LLM模型推理的概念与大体实现流程;
- 了解当前常见的推理加速方法与部署优化方向;
- 掌握使用MindFormers特性以进行各种推理。
2.3.1 LLM文本生成基础概念与使用
1、文本生成任务做法
- 文本字符通过tokenizer转换为token数字;
- 根据已有的文本token输入,预测下一个token的概率;
- 从生成的概率分布中采样决定下一个token值;
- 将生成的token值拼接回原输入token,形成下一次预测的新输入;
- 循环进行模型前向,直至生成结束符。
2、文本生成采样后处理
采样时机:模型前向输出logits后,确认生成的目标token前,对logits进行变换处理
3、常见的采样方法
- 贪心采样:取logits值最大的位置的作为生成的目标token;
- 随机采样:logits值经过topk、topp等处理变换后,再按概率随机选择目标token;
- Beam search采样。
4、常见的后处理
- topk:选择概率最高的k个tokens;
- topp:选择概率最高,且概率总和不超过p的tokens;
- temperature:对所有logits值乘上一个系数;
- repetition penalty:对已出现过的token给出惩罚项系数。
5、MindFormers实现文本生成接口
- mindformers/generation/text generator.py中,GeneratorMixin接口实现了文本生成流程;
- 通过继承关系,各语言模型都具备了调用.generate()接口进行文本生成推理流程。
2.3.2 增量推理与流式推理特性介绍
1、增量推理基础理念(KV Cache)
- 自回归生成过程中,存在重复计算项;
- 可复用以往的计算结果以节省时间。
2、具体实现
- 在模型各layer中新增parameter,用于记录计算结果;
- 首次前向,全量推理,记录状态;
- 后续每次前向仅输入新生成的token,其余状态复用;
- 空间换时间,加速推理。
3、Flash Attention
MindFormers大模型推理升级训推一体架构,实现脚本、分布式策略和运行时的统一,通过融合大算子降低推理时延,使用全量Flash Attention+增量Paged Attention的推理方案,有效提升网络的吞吐性能。
LLM中计算速度已经超越了内存速度,Transformer中大部分操作的瓶颈都在于对后者的读写上。Flash Attention的目标是减少HBM访问的次数,采用tiling和recomputation实现精的准Attention计算。
- 将输入Q、K、V分块,从低速HBM加载到高速SRAM;
- 然后计算这些块的注意力输出;
- 将每个块的输出按归一化因子进行缩放后合并。
4、Paged Attention特性
背景:增量推理时,KV Cache需要按最大长度(静态:[bs,seq],动态:[bs*seq])分配内存,图编译后shape固定只能进行读写。在实际推理场景中,输入seq较短时会造成大量的显存浪费。此外,batch 数量增加会导致OOM,模型的吞吐性能存在瓶颈。
原理:Paged Attention允许在非连续的内存空间中存储连续的 key 和 value,将每个序列的 KV cache 划分为 block 块,每个 block 包含固定数量 token 的 key 和 value。通过更新逻辑 block 到物理 block 之间的映射实现对内存的动态管理,节省显存、提升吞吐性能。
5、流式推理概念
模型在文本生成过程中已经生成了多个前向结果,但需要完整生成结束才能将结果一次性返回。
流式推理,将生成的中间结果重定向到输出流中,以尽早地显示推理过程与结果,推理体验更好。
MindFormers提供了标准输出流,在原有用例的基础上,调用model.generate()时增加streamer入参即可。
2.3.3 Batch 推理与分布式推理介绍
1、多 batch 推理概念
在大模型推理中,单条数据做推理往往无法充分利用硬件性能,效率较低;
多 batch 推理则是将多条输入组成一个批次,同时送入模型进行推理,以充分利用硬件性能,增大推理吞吐量。
2、分布式推理概念
在大模型推理中,对于单卡显存放不下的模型,通常需要进行分布式切分,多卡同时进行单个模型的分布式推理
相较于单卡推理,分布式推理有一些明显的区别点,这里给出详细的教程文档:
https://mindformers.readthedocs.io/zh-cn/latest/docs/feature_cards/Text_Generator.html#id4
- 需明确分布式策略的配置;
- 需对模型权重进行切分加载,以规避单卡显存不足问题;
- 需对分布式环境进行初始化,并通过分布式脚本拉起推理流程。
标准样例脚本:https://gitee.com/mindspore/mindformers/tree/dev/scripts/examples
2.3.4 Mindspore推理
MindFormers 定位打造训练->微调->部署的端到端大模型工具套件,为了更好性能地部署已经微调训练好的大模型,我们利用MindSpore打造了全新的训推一体高性能推理引擎,保证训练与推理使用同一套脚本,为用户提供了开箱即用的推理部署方案,为用户提供端到端的大模型解决方案,帮助用户使能大模型业务。
MindSpore 大模型推理升级训推一体架构,实现脚本、分布式策略和运行时的统一,通过融合大算子降低推理时延,有效提升网络吞吐量。
三、总结
MindSpore Transformers是基于昇思MindSpore的深度学习大模型开发套件,其目标是构建一个大模型训练、微调、评估、推理、部署的全流程开发套件。套件覆盖了CV、NLP等AIGC的热门领域,提供模型生命周期中的全流程快速开发能力,支持开箱即用,可以帮助开发者快速完成大模型任务开发。
昇思MindSpore与书生·浦语大模型的强强联合,为开发者们提供全面而系统的大模型技术学习课程,建立了一个友好的交流平台,便于广大开发者在大模型实践开发中分享经验、交流思想,帮助开发者们高效掌握和广泛应用大模型技术。
本文参与华为云社区【内容共创】活动第27期。
- 点赞
- 收藏
- 关注作者
评论(0)