微信扫码
添加专属顾问
我要投稿
阿里巴巴MNN引擎在端侧大模型部署上的技术创新,为AI应用带来新突破。 核心内容: 1. 端侧大模型的兴起趋势与应用场景 2. MNN框架及其在大模型部署中的关键能力 3. 模型转换与推理优化技术,提升端侧部署效率
导读 在人工智能飞速发展的时代,端侧大模型因其在隐私保护、个性化服务和成本控制等方面的优势,受到了越来越多的关注。随着端侧设备(如手机、PC、平板等)的算力、内存和磁盘空间不断提升,将大模型部署到移动端已从理想逐渐变为现实。AI 手机、AI PC,甚至 AI 汽车等创新产品正逐步进入大众视野,成为技术发展的新趋势。
作为专注于端侧 AI 推理的引擎,MNN 近期在大模型的端侧部署领域进行了深入的探索与实践,致力于打造端侧大模型高效部署的解决方案。今天,我将与大家分享 MNN 在端侧大模型高效部署方面的技术创新和实践经验,希望通过交流能为各位提供一些新的思路和启发。
1. 端侧大模型兴起趋势
2. MNN 框架介绍
3. MNN 大模型能力介绍
4. 模型转换(图优化/量化)技术
5. 推理优化技术(内存/性能优化)
6. 大模型测评数据与 Demo
分享嘉宾|邢世稳 阿里巴巴淘天集团 技术专家
编辑整理|许通
内容校对|李瑶
出品社区|DataFun
01
端侧大模型兴起趋势
端侧设备厂商,例如苹果,也在全线产品上,支持部署如 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)。
低比特量化是端侧部署大模型必备
7B 模型 float32 需要 25GB+内存,int4 量化版仅需 3.5GB 内存。
1.8B 模型,int4 量化版只需不到 1GB 内存。
权重量化太大降低内存占用,加快运行速度。
MNN 量化支持:
4 比特/8 比特 无输入数据校验 Weight 量化。
对称/非对称量化。
Channel block 量化。
GPTQ/AWQ 权重导入,无缝对接 MNN 计算。
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
下面介绍针对硬件特性进行的加速。
ARM CPU 优化
为了做到多核负载均衡(CPU 多核频率也不同),可以采取以下方法:
针对算力瓶颈的算子,按照核心频率比例进行任务划分。
针对带宽瓶颈的算子,每个核心平均发配任务。
Armv8.2 sdot 指令优化
sdot 实现 2 个 4×4 的 int8 数据乘累加,输出一个 4×1 的 int32 数据,从而提高吞吐。
Armv8.6 smmla 指令优化
smmla 实现 2×8 和 8×2 的 int8 数据做 gemm,输出一个 2×2 的 int32 数据。
进行中:集成 ARM KleidiAI(ARM 针对深度学习高性能算子的加速库),支持SME 指令。
Qualcomm GPU 优化
支持 Recordable queue,将多个 kernel 放在一个 Recordable queue 中,以减少 kernel launch 耗时。
支持 On-chip memory,相较于 global memory 有更快的访存速度。
Apple GPU 优化
Apple A14 and M1 GPU 支持 Simdgroup,Simdgroup 中所有 thread 间寄存器数据共享,无需同步或者 threadgroup memory 共享。
Simdgroup_reduce 指令优化。
Simdgroup_matrix 指令优化。
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 对外通道
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-08-13
2024-06-13
2024-08-21
2024-09-23
2024-07-31
2024-05-28
2024-08-04
2024-04-26
2024-07-09
2024-09-17