3.0.0
alibaba/MNN3.0.0Nov 20, 2024by jxt1234
AI Summary
MNN 3.0 is a major release introducing comprehensive LLM inference support, Stable Diffusion support, dynamic quantization for arbitrary convolution types, and WebAssembly SIMD support.
Key Highlights
- 多模态模型Qwen2VL支持
- LLM模型导出流程优化(比先导出onnx再转mnn快10倍以上)
- LoRA支持方案重构 - 支持动态加载与多LoRA并存
- GPTQ、AWQ量化支持
- 多轮对话KV cache复用,延迟降低10倍
- Python接口支持(ceval, ppl测试)
- Stable Diffusion标准sd1.5模型支持及Attention算子插件
- Arm KleidiAI库集成(仅支持对称量化LLM推理)
- Mmap模式支持(内存不足时可迁移到磁盘)
- WebAssembly SIMD支持(基于SSE4.1)
- 动态量化重构支持任意类型的卷积和模型
- OpenCL与Metal后端LLM支持
- 多线程性能提升(大中小核架构CPU最高提升30%)
New Features
- Qwen2VL多模态模型支持
- LLM模型导出优化(10x faster)
- LoRA动态加载与多LoRA并存
- GPTQ、AWQ量化支持
- tie_embedding参数加载支持
- 多轮对话KV cache复用
- Python接口支持
- 混合精度量化,支持指定block size量化
- OpenCL与Metal后端LLM支持
- Arm KleidiAI库集成
- Stable Diffusion支持
- ModelZoo - ModelScope与Huggingface
- 动态量化支持任意卷积和模型
- Mmap模式支持
- WebAssembly SIMD支持
- Windows-ARM设备编译支持
Full Release Notes
# 大模型推理相关
+ **<font style="color:rgb(44, 44, 54);">LLM支持</font>**
- <font style="color:rgb(44, 44, 54);">新增了多模态模型Qwen2VL的支持;</font>
- <font style="color:rgb(44, 44, 54);">优化了LLM模型导出流程,现直接导出 MNN 相比先导出 onnx 再转 MNN 的流程快了十倍以上</font>
- <font style="color:rgb(44, 44, 54);">重构了LoRA支持方案,现支持LoRA动态加载与多LoRA并存</font>
- <font style="color:rgb(44, 44, 54);">新增GPTQ、AWQ量化支持;</font>
- <font style="color:rgb(44, 44, 54);">支持tie_embedding参数加载;</font>
- <font style="color:rgb(44, 44, 54);">多轮对话支持kv cache复用,多轮对话时相应延迟降低10倍;</font>
- <font style="color:rgb(44, 44, 54);">支持python接口,支持ceval, ppl测试;</font>
- <font style="color:rgb(44, 44, 54);">支持混合精度量化,支持指定block size量化;</font>
- <font style="color:rgb(44, 44, 54);">OpenCL与Metal后端支持,OpenCL性能优化;</font>
- <font style="color:rgb(44, 44, 54);">增加了 Arm KleidiAI 库的集成,目前仅支持对称量化的LLM推理</font>
- <font style="color:rgb(44, 44, 54);">废弃模型分段导出与推理;</font>
+ **<font style="color:rgb(44, 44, 54);">Stable Diffusion支持</font>**<font style="color:rgb(44, 44, 54);">:实现了标准sd1.5模型的支持以及Attention算子插件。</font>
+ **<font style="color:rgb(44, 44, 54);">ModelZoo</font>**<font style="color:rgb(44, 44, 54);">: </font>[ModelScope](https://modelscope.cn/organization/MNN)<font style="color:rgb(44, 44, 54);">与</font>[Huggingface](https://huggingface.co/taobao-mnn)
# <font style="color:rgb(44, 44, 54);">新功能与改进</font>
+ **<font style="color:rgb(44, 44, 54);">架构优化</font>**<font style="color:rgb(44, 44, 54);">:现在支持多个模型串联运行时复用动态内存池。</font>
+ **<font style="color:rgb(44, 44, 54);">动态量化</font>**<font style="color:rgb(44, 44, 54);">:重构了动态量化相关的代码,以支持任意类型的卷积和模型。</font>
+ **<font style="color:rgb(44, 44, 54);">OpenCL 支持</font>**<font style="color:rgb(44, 44, 54);">:增加了对五维 gridsampler 的支持,并提升了大尺寸1x1卷积、batchMatMul的计算性能。</font>
+ **<font style="color:rgb(44, 44, 54);">加载时间优化</font>**<font style="color:rgb(44, 44, 54);">:针对量化模型,对CPU和GPU的加载时间进行了优化。</font>
+ **<font style="color:rgb(44, 44, 54);">Softmax/LayerNorm/GRU算子优化</font>**<font style="color:rgb(44, 44, 54);">:在fp16/x86模式下运行时优化了Softmax/LayerNorm/GRU内存占用与计算性能。</font>
+ **<font style="color:rgb(44, 44, 54);">几何计算</font>**<font style="color:rgb(44, 44, 54);">:增强了区域合并逻辑,支持裁剪和多对多处理。</font>
+ **<font style="color:rgb(44, 44, 54);">多线程性能提升</font>**<font style="color:rgb(44, 44, 54);">:添加了锁核支持,支持按CPU算力进行多核任务划分,对于大中小核架构的CPU,最高提升2线程性能30%。</font>
+ **<font style="color:rgb(44, 44, 54);">内存管理</font>**<font style="color:rgb(44, 44, 54);">:引入了Mmap模式,在内存不足时可以迁移到磁盘文件。</font>
+ **<font style="color:rgb(44, 44, 54);">编译增强</font>**<font style="color:rgb(44, 44, 54);">:提供了Windows-ARM设备的编译支持,基于 SSE4.1 支持编译 WebAssembly 开启 SIMD。</font>
# <font style="color:rgb(44, 44, 54);">Bug修复</font>
+ <font style="color:rgb(44, 44, 54);">修复了部分模型量化后在ARM上运行出错的问题。</font>
+ <font style="color:rgb(44, 44, 54);">解决了某些机型如天矶9000上读取cachefile后再重新生成时cachefile大小变化的问题。</font>
+ <font style="color:rgb(44, 44, 54);">修正了ONNX ConvTranspose 带分组属性时(group)转换后的计算错误。</font>
+ <font style="color:rgb(44, 44, 54);">修正了Transpose + Slice操作可能越过原始大小时未正确分割region的问题。</font>
+ <font style="color:rgb(44, 44, 54);">修复了LaMa Inpainting Model在使用GPU(Metal)运行时输出为0的问题。</font>
+ <font style="color:rgb(44, 44, 54);">修正了Softmax在低版本onnx情况下转换后reshape error的问题。</font>
# <font style="color:rgb(44, 44, 54);">关联 Issue 修正</font>
包括但不限于
+ https://github.com/alibaba/MNN/issues/2760
+ https://github.com/alibaba/MNN/issues/2820
+ https://github.com/alibaba/MNN/issues/2878
+ https://github.com/alibaba/MNN/issues/2895
+ https://github.com/alibaba/MNN/issues/2916
+ https://github.com/alibaba/MNN/issues/2958
+ https://github.com/alibaba/MNN/issues/2951
+ https://github.com/alibaba/MNN/issues/2967
+ https://github.com/alibaba/MNN/issues/2960
+ https://github.com/alibaba/MNN/issues/3052
+ https://github.com/alibaba/MNN/issues/3065
# <font style="color:rgb(44, 44, 54);">2.0-3.0更新说明</font>
对比 2.0 版本,3.0版本更新主要包括如下内容
## 支持大模型推理
+ 增加 mnn-llm 模块,支持大语言模型的推理,详见[https://mnn-docs.readthedocs.io/en/latest/transformers/llm.html](https://mnn-docs.readthedocs.io/en/latest/transformers/llm.html)
+ 增加 mnn-diffusion 模块,支持文生图模型的推理,详见[https://mnn-docs.readthedocs.io/en/latest/transformers/diffusion.html](https://mnn-docs.readthedocs.io/en/latest/transformers/diffusion.html)
## 量化算子补充及支持动态量化
+ 增加了 ConvTranspose / Unary / Binary 等算子的量化计算实现
+ 支持动态量化,对于仅权重量化模型,也可以对核心算子使用量化计算,以减少内存占用。CPU 后端会将浮点输入量化后使用量化指令计算,GPU后端则将权重在推理过程中反量化回浮点计算
## 内存优化及形变缓存机制
+ 支持了MMAP机制,可以将MNN运行所用内存切换到磁盘,降低内存不足时的崩溃风险
+ 支持了延迟内存分配机制,目前仅限CPU后端支持,内部模型测试平均降低内存占用 19.13%,详见 2.7.0 Release Note
+ 支持预推理缓存机制,部分输入形状不定的模型(如翻译模型)性能提升10%左右,使用方法详见 2.9.0 Release Note
## 基于新硬件特性的优化
+ 适配了 Arm v8.6 的新指令 smmla 和 bfmmla ,相比 sdot 和 fmla (fp16) ,提升 1倍性能,详见 2.2.0 Release Note ,此外,由于 BF16 计算精度较低,修改为仅对矩阵乘启用BF16 。
+ 基于 Intel Subgroup 特性,重新实现了OpenCL 后端相关的算子的,使在支持相应特性的 Intel 显卡上性能提升 70%-100% ,详见 2.5.0 Release Note
+ 适配 Adreno GPU 的 Recordable Queue 特性,降低了高通芯片上 OpenCL 后端运行结构复杂但计算量相对较小模型的耗时,最高可能降低40%,详见 2.6.0 Release Note
+ 增加了 NNAPI 后端,并对原有的 CoreML 后端和 HIAI 进行了算子扩充
## 算子整体优化与补充,FP16计算性能提升
