随着 ChatGPT 的现象级走红,引领了AI大模型时代的变革,从而导致 AI 算力日益紧缺。与此同时,中美贸易战以及美国对华进行AI芯片相关的制裁导致 AI 算力的国产化适配势在必行。之前也分享过一些国产 AI 芯片 和 AI 框架。
- 大模型国产化适配1-华为昇腾AI全栈软硬件平台总结
- 大模型国产化适配2-基于昇腾910使用ChatGLM-6B进行模型推理
- 大模型国产化适配3-基于昇腾910使用ChatGLM-6B进行模型训练
- 大模型国产化适配4-基于昇腾910使用LLaMA-13B进行多机多卡训练
- 大模型国产化适配5-百度飞浆PaddleNLP大语言模型工具链总结
- 大模型国产化适配6-基于昇腾910B快速验证ChatGLM3-6B/BaiChuan2-7B模型推理
- AI芯片技术原理剖析(一):国内外AI芯片概述
另外,我撰写的大模型相关的博客及配套代码 均整理放置在Github:llm-action,有需要的朋友自取。
硬件
目前昇腾的高端芯片主要有:
- Atlas 800T (910A):适合使用 MindFormers 进行大模型训练。
- Atlas 800T A2 (910B):适合使用 MindFormers、ModelLink 进行大模型训练。
- Atlas 800I A2 (910B):适合使用 MindIE 进行大模型推理。
- ...
模型训练
目前,华为针对昇腾910进行大模型训练提供了两大类解决方法: 一类是基于MindSpore框架(MindFormers)。 一类基于PyTorch框架(AscendSpeed、ModelLink、ModelZoo-PyTorch、HuggingFace Transformers等)。
方案一:MindFormers(MindSpore)
参考:
- MindFormers官方文档:gitee.com/mindspore/m...
- MindFormers模型支持列表:mindformers.readthedocs.io/zh-cn/lates...
MindFormers(MindSpore Transformers)套件华为自家提供的一个构建大模型训练、微调、评估、推理、部署的全流程开发套件,提供业内主流的Transformer类预训练模型和SOTA下游任务应用,涵盖丰富的并行特性。期望帮助用户轻松的实现大模型训练和创新研发。
MindSpore Transformers套件基于MindSpore内置的并行技术和组件化设计,具备如下特点:
- 一行代码实现从单卡到大规模集群训练的无缝切换;
- 提供灵活易用的个性化并行配置;
- 能够自动进行拓扑感知,高效地融合数据并行和模型并行策略;
- 一键启动任意任务的单卡/多卡训练、微调、评估、推理流程;
- 支持用户进行组件化配置任意模块,如优化器、学习策略、网络组装等;
- 提供Trainer、pipeline、AutoClass等高阶易用性接口;
- 提供预置SOTA权重自动下载及加载功能;
- 支持人工智能计算中心无缝迁移部署;
目前针对大模型的支持如下:
该方案是华为针对自家 MindSpore 框架开发的大模型开发套件,目前相对于PyTorch方案来说,支持的模型会更全面一些。同时,在昇腾前两年的NPU(如:Atlas 800T (910A))上面也支持的更好一些。
方案二:ModelLink(Pytorch+Megatron)
ModelLink旨在为华为昇腾芯片上的大语言模型提供端到端的解决方案, 包含模型,算法,以及下游任务。
当前 ModelLink 支撑大模型使用的功能如下:
- 制作预训练数据集/制作指令微调数据集
- 预训练/全参微调/低参微调
- 推理(人机对话)
- 评估基线数据集(Benchmark)
- 使用加速特性(加速算法+融合算子)
- 基于昇腾芯片采集Profiling数据
目前支持的模型如下:
| 模型 | 参数 | 微调 |
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| Aquila | 7B | -- |
| Baichuan | 7B | -- |
| | 13B | -- | |
| Baichuan2 | 7B | -- |
| | 13B | -- | |
| Bloom | 7B1 | -- |
| | 176B | -- |
| InternLM | 7B | -- |
| | 65B | -- |
| LLaMA | 7B | lora |
| | 13B | lora |
| | 33B | lora |
| | 65B | lora |
| LLaMA2 | 7B | lora |
| | 13B | lora |
| | 34B | lora |
| | 70B | lora | |
| Qwen | 7B | -- |
| | 14B | -- |
| | 72B | -- |
| Mixtral | 8x7B | -- |
| ChatGLM3 | 6B | -- |
目前,该方案昇腾NPU针对Pytorch框架进行大模型推荐的方案。该方案依赖Megatron-LM项目进行二次开发。针对昇腾NPU进行过专门的加速,同时,对支持的大模型进行过严格验证。
方案三:HuggingFace Transformers(Pytorch)
参考:
目前,Hugging Face 核心套件 transformers 、 accelerate 、 peft 、 trl 已原生支持 Ascend NPU。 并且,DeepSpeed 也已原生支持 NPU。Atlas 800T A2 及之后版本无需 deepspeed_npu 插件,直接安装,直接使用,因此,建议使用新版 DeepSpeed。使用方式与原生一致。
理论上来说,可以将Huggingface Transformers相关的模型无缝迁移到NPU。该方案提供与英伟达GPU一样的能力,但没有针对昇腾NPU进行专门的加速。就看会不会遇到算子瓶颈了。如果没有算子瓶颈理论上性能应该差不多。目前没有看到官方提供针对大模型进行过严格验证的文档,可能会有坑。
模型推理引擎及服务化
方案一:MindSpore Lite + MindSpore Serving
参考:
模型推理引擎:MindSpore Lite
为了更好的性能去部署已经微调训练好的大模型,可以利用 MindSpore 打造的推理引擎 MindSpore Lite,其提供了开箱即用的推理部署方案,帮助用户使能大模型业务。
Lite 推理大致分两步:权重转换导出 MindIR -> Lite 推理。
模型服务化:MindSpore Serving
MindSpore Serving是一个易于使用的推理框架,旨在帮助 MindSpore 开发者在生产环境中高效部署在线推理服务。当用户使用MindSpore完成模型训练 后,导出MindSpore模型,即可使用MindSpore Serving创建该模型的推理服务。
MindSpore Serving架构如下所示:
MindSpore Serving分为客户端、服务器两个部分。在客户端中,用户通过gRPC或RESTful接口向服务器下发推理服务命令。服务器包括主(Main
)节点和 一个或多个工作(Worker
)节点,主节点管理所有的工作节点及其部署的模型信息,接受客户端的用户请求,并将请求分发给工作节点。每个工作节点部署了 一个可服务对象,即Servable
,这里的Servable
可以是单个模型,也可以是多个模型的组合,一个Servable
可以围绕相同的模型通过多种方法来提供 不同的服务。
目前支持模型包括:
- LLaMA-2
- InternLM
- baichuan2
- wizardcoder
- ...
目前支持的特性:
- 模型并行部署
- 通过服务端发送事件的Token流
- 自定义模型输入
- 静态/连续(continuous)批处理
- 通过npu进行后采样
- PagedAttention
使用 MindSpore Lite 作为大模型推理引擎是昇腾针对 MindFormers 开发套件里的早期解决方案,但作为大模型推理引擎性能过于平庸。
方案二:MindIE
参考:
MindIE 是昇腾提供的新的大模型推理解决方案,支持使用MindSpore和Pytorch训练的模型进行推理加速及部署。
从算子、模型、应用三大维度,全面加速推理部署。
模型推理引擎:MindIE
MindIE 作为一个模型推理引擎,提供了针对大语言模型和SD模型特定的优化。
目前支持的模型列表如下:
模型服务化:MindIE-Service
MindIE-Service 作为一个模型服务化框架,主要包含如下几个部分:
- MindIE-MS:服务策略管理,提供运维监控能力
- MindIE-Server:推理服务端,提供模型服务化能力
- MindIE-Client:提供推理客户端标准API,简化用户服务调用
MindIE推理引擎之上,除了可以使用MindIE-Service,还支持第三方服务化框架,如TGI。
MindIE 是现在昇腾主推的模型推理框架,但目前 MindIE 正式版本还没有对外发布,据说新版本4月底会发布。当前使用昇腾需要定向提供。
结语
本文的所有信息都是截止2024年4月最新的一些信息,如有不准确的地方欢迎讨论。总的来说,昇腾最近一年多经过海量大模型需求的洗礼,正在快速变得成熟和完善。希望国产AI芯片、AI软硬件生态越来越好。