大模型推理相关
- LLM支持
- 新增了多模态模型Qwen2VL的支持;
- 优化了LLM模型导出流程,现直接导出 MNN 相比先导出 onnx 再转 MNN 的流程快了十倍以上
- 重构了LoRA支持方案,现支持LoRA动态加载与多LoRA并存
- 新增GPTQ、AWQ量化支持;
- 支持tie_embedding参数加载;
- 多轮对话支持kv cache复用,多轮对话时相应延迟降低10倍;
- 支持python接口,支持ceval, ppl测试;
- 支持混合精度量化,支持指定block size量化;
- OpenCL与Metal后端支持,OpenCL性能优化;
- 增加了 Arm KleidiAI 库的集成,目前仅支持对称量化的LLM推理
- 废弃模型分段导出与推理;
- Stable Diffusion支持:实现了标准sd1.5模型的支持以及Attention算子插件。
- ModelZoo: ModelScope与Huggingface
新功能与改进
- 架构优化:现在支持多个模型串联运行时复用动态内存池。
- 动态量化:重构了动态量化相关的代码,以支持任意类型的卷积和模型。
- OpenCL 支持:增加了对五维 gridsampler 的支持,并提升了大尺寸1x1卷积、batchMatMul的计算性能。
- 加载时间优化:针对量化模型,对CPU和GPU的加载时间进行了优化。
- Softmax/LayerNorm/GRU算子优化:在fp16/x86模式下运行时优化了Softmax/LayerNorm/GRU内存占用与计算性能。
- 几何计算:增强了区域合并逻辑,支持裁剪和多对多处理。
- 多线程性能提升:添加了锁核支持,支持按CPU算力进行多核任务划分,对于大中小核架构的CPU,最高提升2线程性能30%。
- 内存管理:引入了Mmap模式,在内存不足时可以迁移到磁盘文件。
- 编译增强:提供了Windows-ARM设备的编译支持,基于 SSE4.1 支持编译 WebAssembly 开启 SIMD。
Bug修复
- 修复了部分模型量化后在ARM上运行出错的问题。
- 解决了某些机型如天矶9000上读取cachefile后再重新生成时cachefile大小变化的问题。
- 修正了ONNX ConvTranspose 带分组属性时(group)转换后的计算错误。
- 修正了Transpose + Slice操作可能越过原始大小时未正确分割region的问题。
- 修复了LaMa Inpainting Model在使用GPU(Metal)运行时输出为0的问题。
- 修正了Softmax在低版本onnx情况下转换后reshape error的问题。
关联 Issue 修正
包括但不限于
2.0-3.0更新说明
对比 2.0 版本,3.0版本更新主要包括如下内容
支持大模型推理
- 增加 mnn-llm 模块,支持大语言模型的推理,详见https://mnn-docs.readthedocs.io/en/latest/transformers/llm.html
- 增加 mnn-diffusion 模块,支持文生图模型的推理,详见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 进行了算子扩充