2.8.0
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来申请内存的问题