Skip to content

2.8.0

Compare
Choose a tag to compare
@github-actions github-actions released this 05 Dec 08:50
1ea55f4

1. 新特性

  • MNN支持以JSON文件格式导入量化参数 (issue-2587)
  • 支持 MaxPooling with index (issue-2268)
  • MNN支持NNAPI中Deconvolution算子
  • MNNConvert支持 Onnx 中 dim < 2 的矩阵乘算子
  • TestConvert 增加测试非 CPU 后端的能力
  • Pymnn支持构建 MNN 训练模型,以支持离线训练模式
  • 优化MNNConvert,大幅降低大模型转换时的内存占用
  • OpenCL 支持 Loop 算子特殊形式,广播 Binary
  • 支持 Unary, Prelu 算子量化

2. 性能优化

  • ONNX ScatterND算子性能优化 (issue-2530)
  • CPUTopKV2算子性能优化,将tflite的实现修改为stl的实现;
  • ARM汇编实现MNNTranspose16Bit8x8, 提升fp16的转置性能;
  • ARM/X86使用动态量化方案优化权重量化的矩阵乘、卷积算子;llm模型推理性能大幅提升;

llm cpu性能测试

mnn-llm 在MNN 2.8.0版本的CPU性能如下,测试均使用4线程, 速度为prefill / decode单位为tok/s

model android(f16/32) macos (f32) linux (f32) windows (f32)
qwen-1.8b-int4 100.21 / 22.22 84.85 / 19.93 151.00 / 35.89 117.30 / 33.40
qwen-1.8b-int8 99.95 / 16.94 67.70 / 13.45 118.51 / 24.90 97.19 / 22.76
chatglm-6b-int4 17.37 / 6.69 19.79 / 6.10 34.05 / 10.82 30.73 / 10.63
chatglm2-6b-int4 26.41 / 8.21 20.78 / 6.70 36.99 / 11.50 33.25 / 11.47
chatglm3-6b-int4 26.24 / 7.94 19.67 / 6.67 37.33 / 11.92 33.61 / 11.21
qwen-7b-int4 14.60 / 6.96 19.79 / 6.06 33.55 / 10.20 29.05 / 9.62
baichuan2-7b-int4 13.87 / 6.08 17.21 / 6.10 30.11 / 10.87 26.31 / 9.84
llama-2-7b-int4 17.98 / 5.17 19.72 / 5.06 34.47 / 9.29 28.66 / 8.90

测试的系统和设备信息如下,

os device CPU Memory
android XiaoMi12 Snapdragon 8gen1 8 GB
macos MacBook Pro 2019 Intel(R) Core(TM) i7-9750H CPU 16 GB
linux PC Intel(R) Core(TM) i7-13700K 32GB
windows PC Intel(R) Core(TM) i7-13700K 32GB

3. Bugfix

3.1 关联 Github Issue 解决

  • 修复MNN2.5.3版本后量化模型不能得到正确结果 (issue-2614)
  • 修复tflite模型转换到MNN时重复算子检测卡死的问题 (issue-2573)
  • 支持Pytorch FX 量化而得的 ONNX 模型转换 (issue-2548)

3.2 其他 Bugfix 或优化

工具类:

  • 修复Defer Allocator 实际分配内存后未做成功与否的检查
  • 修复量化工具中由index=-1导致的crash问题
  • 修复模型转换工具在转大模型时会crash的问题
  • 修复模型转换工具在转换ONNX模型的Clip算子时不能正确处理 int32_t数据的问题
  • 修复使用OpenCL训练时的内存泄露问题
  • OpenCL单测错误问题修复

编译兼容性问题:

  • 修复在X86_x64下SSE指令不兼容导致的编译错误
  • 修复IOS 工程文件中由于局部变量在线程函数外导致的编译错误
  • 修复一些ARM编译器无法识别 "vmov.f16 q0, #5.0"导致的编译错误

结果错误(crash)类问题:

  • 修复C++版本下Binary函数中(<=,<,>=,>,==)的返回值类型导致的结果错误
  • 修复 1x1 Strassen矩阵在Low Memory时crash问题
  • 修复coreML在deconvolution算子padding!=0时crash问题
  • 修复 ModuleAPI在运行时使用 Defer Allocator来申请内存的问题