Skip to content

3.0发布【多模态大模型支持、动态量化功能完善、Web SIMD支持及其他Bug修复】

Latest
Compare
Choose a tag to compare
@jxt1234 jxt1234 released this 20 Nov 01:43
707b8a4

大模型推理相关

  • 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: ModelScopeHuggingface

新功能与改进

  • 架构优化:现在支持多个模型串联运行时复用动态内存池。
  • 动态量化:重构了动态量化相关的代码,以支持任意类型的卷积和模型。
  • 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版本更新主要包括如下内容

支持大模型推理

量化算子补充及支持动态量化

  • 增加了 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计算性能提升

image