|
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1.5px;color: rgb(0, 0, 0);font-size: 14px;text-align: justify;visibility: visible;line-height: 2em;">导读在人工智能飞速发展的时代,端侧大模型因其在隐私保护、个性化服务和成本控制等方面的优势,受到了越来越多的关注。随着端侧设备(如手机、PC、平板等)的算力、内存和磁盘空间不断提升,将大模型部署到移动端已从理想逐渐变为现实。AI 手机、AI PC,甚至 AI 汽车等创新产品正逐步进入大众视野,成为技术发展的新趋势。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1.5px;color: rgb(0, 0, 0);font-size: 14px;text-align: justify;visibility: visible;line-height: 2em;">作为专注于端侧 AI 推理的引擎,MNN 近期在大模型的端侧部署领域进行了深入的探索与实践,致力于打造端侧大模型高效部署的解决方案。今天,我将与大家分享 MNN 在端侧大模型高效部署方面的技术创新和实践经验,希望通过交流能为各位提供一些新的思路和启发。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1.5px;line-height: 2em;visibility: visible;">1.端侧大模型兴起趋势 2.MNN 框架介绍 ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1.5px;line-height: 2em;">3.MNN 大模型能力介绍ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1.5px;line-height: 2em;">4.模型转换(图优化/量化)技术ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1.5px;line-height: 2em;">5.推理优化技术(内存/性能优化)ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1.5px;line-height: 2em;">6.大模型测评数据与 DemoingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;text-align: left;line-height: 1.75em;">分享嘉宾|邢世稳 阿里巴巴淘天集团 技术专家ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;text-align: left;line-height: 1.75em;">编辑整理|许通ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;text-align: left;line-height: 1.75em;">内容校对|李瑶出品社区|DataFun
01
端侧大模型兴起趋势
2024 年 8 月 7 日,面壁智能发布端侧多模态模型,“小钢炮”MiniCPM-V2.6,专注于多图联合理解、实时视频理解等领域。随后,8 月 30 日,Qwen2-VL 发布端侧 2B 模型,重点增强了图像、视频、多语言理解能力。紧接着,9 月 19 日,Qwen2.5 发布了端侧 0.5/1/5/3B 模型,特别在数学和编程方面展现出卓越的性能。9 月 26 日,LLaMA 3.2 发布端侧 1B/3B 模型,在多语言对话方面做了迭代优化。
端侧设备厂商,例如苹果,也在全线产品上,支持部署如 Stable Diffusion 这样的文本生成图像大模型。
Iphone 16 正式部署端侧大模型,重点实现智能回复、辅助撰写、图片擦除等任务,这标志着苹果进入了 AI Phone 时代。国内很多厂商如 oppo、vivo 也在自己的产品上部署端侧大模型。
大模型推理的应用场景涵盖广泛,包括:
聊天应用:输入文字有相应的回答。
代码补全:根据之前的代码执行代码补全的操作。
生图应用:描述相关的信息从而生成相关的图片。
常见的端侧设备主要分为如下几个类别:
娱乐办公设备:手机,个人电脑。
出行设备:汽车。
智能家居设备:音响,扫地机器人。
穿戴设备:眼镜、耳机、手表。
基于大模型的算力和内存限制,目前端侧大模型主要部署在手机、个人电脑和智能汽车等算力较高、存储容量较大的设备上。
端侧部署大模型的优势主要体现在以下方面:
实时感:数据存储和计算在本地进行,可以避免云测网络延时、资源等待,这样提示词和响应的实时感更强。
隐私性:提示词和响应均在本地,可避免数据上传云端带来的隐私问题。
个性化:通过模型微调/Lora等技术,可以在端侧设备上实现更好的个性化互动体验。
02
MNN框架介绍
MNN是一个开源的轻量级深度学习推理引擎,核心解决AI模型如何在各类设备(尤其是移动设备)上高效部署运行的问题,涵盖AI模型图优化、转化、高效运行。
上图中可以看到,训练好的模型,经过MNN的转换器,进行一些优化操作,转换为MNN模型,之后在端侧设备上部署运行。目前,MNN引擎已在阿里系的淘宝、咸鱼、钉钉等数十个APP,以及集团外的20+APP上部署应用。
03
MNN大模型能力介绍
下面介绍MNN在大模型方面做的一些工作。目前MNN主要针对LLM(大语言模型)和Diffusion模型,统称为Transformer模型结构。
主要包括四个方面:
(1)导出工具:将各类大模型转化为MNN模型格式。
(2)量化工具:减少MNN模型大小,降低运行内存,提高运行速度。
(3)插件和引擎:运行大模型需要的tokenizer/embedding/Lora等插件信息。
(4)MNN主库:底层运算,内存分配方面。
底层会部署到CPU、GPU或NPU。
针对不同种类的模型会有不同的流程,得到不同的输出结果。
(1)一个大模型进行导出的操作,导出到MNN模型,然后再进行量化的操作,得到量化后的MNN模型,也就是简化后的模型。
(2)针对LLM系列,输入是一个文本,首先对文本进行解析,会进行一个tokenize的encode操作,把文本转成一个整型的数组,然后进行embedding操作(对整形数组向量化),以向量表示后可以更好地进行模型的推理。通过多种模型的推理迭代之后,将输出的结果decode(转成文本的形式),输出8×12=96样式的答案给用户。
(3)对于Diffusion模型,也是输入text,比如想要画一只小猫,它首先会对文本进行tokenize的操作,转成整形数组的形式,再通过embedding操作转成向量的形式,经过多轮迭代的Diffuse(20次或50次迭代),最后进行解码操作,得出一个小猫的图像。
接下来将详细介绍MNN大模型部署的一些技术细节。
04
模型转换
首先介绍一下模型转换部分。
MNN支持Qwen、LLaMA、DeepSeek等众多模型。从huggingface或modelscope等模型资源库上下载大语言模型后,经过中间一系列的操作会转化成量化的MNN模型以及一些额外的资源包。中间的一些具体的操作包括,tokenize标准化(支持Sentencepiece、Tiktoken、Bert等tokenizer)、embedding导出、Lora导出、量化的工作,以及针对Transformer-Plugin Fuse等的图优化操作。转好的大模型存放在MNN Model Zoo中,主页地址如上图右下角所示。
Transformer模型由一系列连续block组成,Attention运算是每个block的计算核心部分,对Attention运算的优化影响着大模型的整体优化效果。
上图中左侧是一个ONNX模型图,展示了Diffusion模型中Attention的操作,其中将Attention拆分成了16个算子,包括12个形状变化算子,4个计算型算子,存在大量访存冗余。
右侧是LLM模型中的Attention,其中有past key/value缓存,会涉及大量Cache重复读写的问题。
Attention Fuse的好处是可以消除访存冗余,增大Attention计算管理的便利性,可以更好地管理KV-Cache。
下面是针对Transformer常用插件的fuse。
首先是Transformer ResnetBlock,包含BroadCast Binary+GroupNorm+SiLU结构,在ONNX模型圈中包含13个算子,融合为FuseGroupNorm。
另外,在Transformer激活函数中,Feed-Forward模块中采用GEGLU结构,融合为SpiltGeLU。
通过这些Transformer-Plugin Fuse可以消除访存冗余,简化计算。
另外一个重要部分是权重量化(Weight Quantization)。
05
推理优化技术
接下来重点介绍推理优化技术,包括四个方面:动态量化、KV-Cache量化、DRAM-Flash混用方法,以及针对硬件特性的加速方法。
1.动态量化 动态量化,即在运行时对实时输入数据进行量化。
对于CPU,对输入的浮点类型数据,计算其量化信息,量化为int8的输入与量化好的int4/int8的权重去进行计算。ARM有int8域特定的加速指令集,不仅可以减少内存,还可以得到加速的效果。采用PerBatch量化,来保证精度。
对于GPU,在int8域计算相对于浮点域没有优势,所以端侧GPU不进行动态量化,会在浮点域进行矩阵乘的运算。对于内存瓶颈的矩阵乘运算,会在kernel内部对权重在线反量化成浮点,与浮点输入进行计算。对于计算密集型算子,会插入一个额外的算子,提前反量化成浮点。
2. KV-Cache量化
当文本较长时,KV-Cache大小增加明显,量化可以减少存储和访存量。
Key Cache采用per-token量化成int8,在int8域和经过动态量化后的Query做矩阵乘累加操作。
Value与QK结果在kv_seq_len方向累加,如果采用per-token int8量化,需要在K_Loop内每个元素进行读scale反量化,就会产生较大性能损失,因此Value Cache不采用int8量化。
Value Cache采用fp8(e5m2)量化,直接对fp32转为fp8进行量化。
3. DRAM-Flash混用方法
由于端侧运行内存是有限的,多个应用抢占内存,会造成内存不足。针对这一问题,第一个解决方法是采用磁盘映射技术,通过mmap接口,操作系统可将运行内存映射到磁盘,从而避免其他应用运行内存过大抢占DRAM造成崩溃。
第二个方法是DRAM-Flash混用。针对长文本KV-Cache存储较大,当超过运行内存限制时采用磁盘进行存储。磁盘存储可能会读取较慢,可以采用提前预取的形式避免磁盘产生的Overhead。
4. Hardware-Driven Accelerate
下面介绍针对硬件特性进行的加速。 06
大模型测评数据与Demo
1.怎样运行MNN LLM/Diffusion
主要步骤:
Huggingface/modelscope下载LLM/Diffusion项目模型资源(torch模型及其它资源);
下载MNN源码,编译;
使用MNN模型转换工具,将torch模型转为MNN模型;
使用MNN LLM/Diffusion Demo运行。
详细教程参见:
LLM:https://mnn-docs.readthedocs.io/en/latest/transformers/llm.html
Diffusion:https://mnn-docs.readthedocs.io/en/latest/transformers/diffusion.html
2.性能数据
下图展示了在小米14(8 Gen3)上一些LLM模型的性能。
可以看到,MNN-LLM在prefill性能上,无论是CPU还是GPU,都处于绝对领先的水平。在decode领域,MNN-LLM相对于其他的大模型也有着不同程度的优势。
上图展示了在Stable Diffusion上的测评数据。可以看到,在Android Mi 14和Apple Mac M3上,MNN-diffusion相对于竞品都有着明显的优势。
3. Demo
在手机上,使用MNN-LLM提出的需求都可以得出满意的回答,运行速度也完全可以满足需求。在多模态方面,文生图、图生文、语音生文,都有着流畅的性能表现。
4. MNN对外通道 |