阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践


导读 在人工智能飞速发展的时代,端侧大模型因其在隐私保护、个性化服务和成本控制等方面的优势,受到了越来越多的关注。随着端侧设备(如手机、PC、平板等)的算力、内存和磁盘空间不断提升,将大模型部署到移动端已从理想逐渐变为现实。AI 手机、AI PC,甚至 AI 汽车等创新产品正逐步进入大众视野,成为技术发展的新趋势。

作为专注于端侧 AI 推理的引擎,MNN 近期在大模型的端侧部署领域进行了深入的探索与实践,致力于打造端侧大模型高效部署的解决方案。今天,我将与大家分享 MNN 在端侧大模型高效部署方面的技术创新和实践经验,希望通过交流能为各位提供一些新的思路和启发。

分享围绕以下六点展开:

1. 端侧大模型兴起趋势

2. MNN 框架介绍

3. MNN 大模型能力介绍

4. 模型转换(图优化/量化)技术

5. 推理优化技术(内存/性能优化)

6. 大模型测评数据与 Demo

分享嘉宾|邢世稳 阿里巴巴淘天集团 技术专家

编辑整理|许通

内容校对|李瑶

出品社区|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 模型,在多语言对话方面做了迭代优化。

图片[1]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站

端侧设备厂商,例如苹果,也在全线产品上,支持部署如 Stable Diffusion 这样的文本生成图像大模型。

Iphone 16 正式部署端侧大模型,重点实现智能回复、辅助撰写、图片擦除等任务,这标志着苹果进入了 AI Phone 时代。国内很多厂商如 oppo、vivo 也在自己的产品上部署端侧大模型。

大模型推理的应用场景涵盖广泛,包括:

  • 聊天应用:输入文字有相应的回答。

  • 代码补全:根据之前的代码执行代码补全的操作。

  • 生图应用:描述相关的信息从而生成相关的图片。

常见的端侧设备主要分为如下几个类别

  • 娱乐办公设备:手机,个人电脑。

  • 出行设备:汽车。

  • 智能家居设备:音响,扫地机器人。

  • 穿戴设备:眼镜、耳机、手表。

基于大模型的算力和内存限制,目前端侧大模型主要部署在手机、个人电脑和智能汽车等算力较高、存储容量较大的设备上。

端侧部署大模型的优势主要体现在以下方面:

  • 实时感:数据存储和计算在本地进行,可以避免云测网络延时、资源等待,这样提示词和响应的实时感更强。

  • 隐私性:提示词和响应均在本地,可避免数据上传云端带来的隐私问题。

  • 个性化:通过模型微调/Lora 等技术,可以在端侧设备上实现更好的个性化互动体验。

02


MNN 框架介绍


MNN 是一个开源的轻量级深度学习推理引擎,核心解决 AI 模型如何在各类设备(尤其是移动设备)上高效部署运行的问题,涵盖 AI 模型图优化、转化、高效运行。

图片[2]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站

上图中可以看到,训练好的模型,经过 MNN 的转换器,进行一些优化操作,转换为 MNN 模型,之后在端侧设备上部署运行。目前,MNN 引擎已在阿里系的淘宝、咸鱼、钉钉等数十个 APP,以及集团外的 20+APP 上部署应用。

03


MNN 大模型能力介绍


下面介绍 MNN 在大模型方面做的一些工作。目前 MNN 主要针对 LLM(大语言模型)和 Diffusion 模型,统称为 Transformer 模型结构。

图片[3]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站

主要包括四个方面:

(1)导出工具:将各类大模型转化为 MNN 模型格式。

(2)量化工具:减少 MNN 模型大小,降低运行内存,提高运行速度。

(3)插件和引擎:运行大模型需要的 tokenizer/embedding/Lora 等插件信息。

(4)MNN 主库:底层运算,内存分配方面。

底层会部署到 CPUGPU 或 NPU

针对不同种类的模型会有不同的流程,得到不同的输出结果。

图片[4]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站

1)一个大模型进行导出的操作,导出到 MNN 模型,然后再进行量化的操作,得到量化后的 MNN 模型,也就是简化后的模型。

2)针对 LLM 系列,输入是一个文本,首先对文本进行解析,会进行一个 tokenize 的 encode 操作,把文本转成一个整型的数组,然后进行 embedding 操作(对整形数组向量化),以向量表示后可以更好地进行模型的推理。通过多种模型的推理迭代之后,将输出的结果 decode(转成文本的形式),输出 8×12=96 样式的答案给用户。

3)对于 Diffusion 模型,也是输入 text,比如想要画一只小猫,它首先会对文本进行 tokenize 的操作,转成整形数组的形式,再通过 embedding 操作转成向量的形式,经过多轮迭代的 Diffuse20 次或 50 次迭代),最后进行解码操作,得出一个小猫的图像。

接下来将详细介绍 MNN 大模型部署的一些技术细节。

04


模型转换


首先介绍一下模型转换部分。

图片[5]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站

MNN 支持 QwenLLaMADeepSeek 等众多模型。从 huggingface 或 modelscope 等模型资源库上下载大语言模型后,经过中间一系列的操作会转化成量化的MNN 模型以及一些额外的资源包。中间的一些具体的操作包括,tokenize 标准化(支持 SentencepieceTiktokenBert 等 tokenizer)、embedding 导出、Lora 导出、量化的工作,以及针对 Transformer-Plugin Fuse 等的图优化操作。转好的大模型存放在 MNN Model Zoo 中,主页地址如上图右下角所示。

Transformer 模型由一系列连续 block 组成,Attention 运算是每个 block 的计算核心部分,对 Attention 运算的优化影响着大模型的整体优化效果。

图片[6]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站

上图中左侧是一个 ONNX 模型图,展示了 Diffusion 模型中 Attention 的操作,其中将 Attention 拆分成了 16 个算子,包括 12 个形状变化算子,个计算型算子,存在大量访存冗余。

右侧是 LLM 模型中的 Attention,其中有 past key/value 缓存,会涉及大量Cache 重复读写的问题。

Attention Fuse 的好处是可以消除访存冗余,增大 Attention 计算管理的便利性,可以更好地管理 KV-Cache

下面是针对 Transformer 常用插件的 fuse

图片[7]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站

首先是 Transformer ResnetBlock,包含 BroadCast Binary+GroupNorm+SiLU结构,在 ONNX 模型圈中包含 13 个算子,融合为 FuseGroupNorm

另外,在 Transformer 激活函数中,Feed-Forward 模块中采用 GEGLU 结构,融合为 SpiltGeLU

通过这些 Transformer-Plugin Fuse 可以消除访存冗余,简化计算。

另外一个重要部分是权重量化(Weight Quantization)。

  • 低比特量化是端侧部署大模型必备

    7模型 float32 需要 25GB+内存,int4 量化版仅需 3.5GB 内存。

    1.8B 模型,int4 量化版只需不到 1GB 内存。

    权重量化太大降低内存占用,加快运行速度。

  • MNN 量化支持:

    比特/8 比特 无输入数据校验 Weight 量化。

    对称/非对称量化。

    Channel block 量化。

    GPTQ/AWQ 权重导入,无缝对接 MNN 计算。

05


推理优化技术


接下来重点介绍推理优化技术,包括四个方面:动态量化、KV-Cache 量化、DRAM-Flash 混用方法,以及针对硬件特性的加速方法。

1. 动态量化

图片[8]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站

动态量化,即在运行时对实时输入数据进行量化。

对于 CPU,对输入的浮点类型数据,计算其量化信息,量化为 int8 的输入与量化好的 int4/int8 的权重去进行计算。ARM 有 int8 域特定的加速指令集,不仅可以减少内存,还可以得到加速的效果。采用 PerBatch 量化,来保证精度。

对于 GPU,在 int8 域计算相对于浮点域没有优势,所以端侧 GPU 不进行动态量化,会在浮点域进行矩阵乘的运算。对于内存瓶颈的矩阵乘运算,会在 kernel 内部对权重在线反量化成浮点,与浮点输入进行计算。对于计算密集型算子,会插入一个额外的算子,提前反量化成浮点。

2. KV-Cache 量化


图片[9]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站

当文本较长时,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 采用 fp8e5m2)量化,直接对 fp32 转为 fp8 进行量化。

3. DRAM-Flash 混用方法


图片[10]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站

由于端侧运行内存是有限的,多个应用抢占内存,会造成内存不足。针对这一问题,第一个解决方法是采用磁盘映射技术,通过 mmap 接口,操作系统可将运行内存映射到磁盘,从而避免其他应用运行内存过大抢占 DRAM 造成崩溃。

第二个方法是 DRAM-Flash 混用。针对长文本 KV-Cache 存储较大,当超过运行内存限制时采用磁盘进行存储。磁盘存储可能会读取较慢,可以采用提前预取的形式避免磁盘产生的 Overhead

4. Hardware-Driven Accelerate


下面介绍针对硬件特性进行的加速。

图片[11]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站
  • ARM CPU 优化

    为了做到多核负载均衡(CPU 多核频率也不同),可以采取以下方法:

    针对算力瓶颈的算子,按照核心频率比例进行任务划分。

    针对带宽瓶颈的算子,每个核心平均发配任务。

  • Armv8.2 sdot 指令优化

    sdot 实现 个 4×的 int8 数据乘累加,输出一个 4×的 int32 数据,从而提高吞吐。

  • Armv8.6 smmla 指令优化

    smmla 实现 2×和 8×的 int8 数据做 gemm,输出一个 2×的 int32 数据。

  • 进行中:集成 ARM KleidiAIARM 针对深度学习高性能算子的加速库),支持SME 指令。

图片[12]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站
  • Qualcomm GPU 优化

    支持 Recordable queue,将多个 kernel 放在一个 Recordable queue 中,以减少 kernel launch 耗时。

    支持 On-chip memory,相较于 global memory 有更快的访存速度。

  • Apple GPU 优化

    Apple A14 and M1 GPU 支持 SimdgroupSimdgroup 中所有 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 运行。

详细教程参见:

LLMhttps://mnn-docs.readthedocs.io/en/latest/transformers/llm.html

Diffusionhttps://mnn-docs.readthedocs.io/en/latest/transformers/diffusion.html

2. 性能数据


下图展示了在小米 148 Gen3)上一些 LLM 模型的性能。

图片[13]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站

可以看到,MNN-LLM 在 prefill 性能上,无论是 CPU 还是 GPU,都处于绝对领先的水平。在 decode 领域,MNN-LLM 相对于其他的大模型也有着不同程度的优势。

图片[14]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站

上图展示了在 Stable Diffusion 上的测评数据。可以看到,在 Android Mi 14 Apple Mac M3 上,MNN-diffusion 相对于竞品都有着明显的优势。

3. Demo


图片[15]-阿里巴巴MNN在端侧大模型高效部署上的技术创新与实践 - AI资源导航站-AI资源导航站

在手机上,使用 MNN-LLM 提出的需求都可以得出满意的回答,运行速度也完全可以满足需求。在多模态方面,文生图、图生文、语音生文,都有着流畅的性能表现。

4. MNN 对外通道

© 版权声明
THE END
喜欢就支持一下吧
点赞23 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片