2.7.0

alibaba/MNN2.7.0Sep 4, 2023by jxt1234

AI Summary

MNN 2.7.0 focuses on memory allocation optimization with DeferAllocator (19.13% average reduction), new LayerNorm int8 quantization, CUDA TopKV2 support, and various performance improvements.

Key Highlights

  • LayerNorm int8量化算子支持
  • CUDA TopKV2算子支持
  • DeferAllocator延迟分配内存(CPU后端默认启用,平均降低内存占用19.13%)
  • OpenCL Buffer模式新增Range/Select/Cast/ArgMax等算子支持
  • OpenCL支持用户设置platform_id/device_id/platform_num选择显卡核心
  • OpenCL支持默认优先选用独显(NVIDIA/AMD)
  • OpenCL Mali-GPU卷积运算优化(性能提升10%-20%)
  • CPU浮点模型Winograd卷积优化(性能提高3%-18%)
  • CPU量化模型Winograd优化(性能提高4%-22%)
  • CUDA广播Binary算子和Blit算子性能优化
  • CUDA CodeGen支持算子在线融合(整体性能提升5%-10%)

New Features

  • LayerNorm int8量化
  • CUDA TopKV2支持
  • DeferAllocator延迟内存分配
  • OpenCL Buffer模式算子(Range/Select/Cast/ArgMax)
  • OpenCL平台/设备选择接口
  • OpenCL独显优先选择
  • OpenCL Mali-GPU优化
  • CPU Winograd优化
  • CPU量化模型优化
  • CUDA性能优化
  • CUDA CodeGen

Full Release Notes

# 1. 新特性
- 新增LayerNorm int8量化算子支持:
- CUDA 后端 新增 TopKV2 算子支持
- 新增 DeferAllocator ,支持延迟分配内存,默认在 CPU Backend 中启用,内部模型测试平均降低内存占用 19.13%
- OpenCL Buffer 模式新增Range/Select/Cast/ArgMax 等算子支持
- OpenCL支持用户设置platform_id/device_id/platform_num接口,以选择显卡核心,并支持默认优先选用独显(NVIDIA/AMD独显)
- 优化 OpenCL 后端内存分配逻辑,降低ChatGLM模型的内存占用
# 2. 性能优化

- OpenCL优化Mali-GPU计算量大的卷积运算(image/buffer存储混用)。性能提升10%-20%。
- CPU浮点模型优化Winograd卷积的准入条件、1x1Strassen算法。性能提高3%~18%。
- CPU量化模型优化WinogradInt8、DepthwiseInt8。性能提高4%~22%。

- CUDA优化广播Binary算子性能、Blit算子性能。
- CUDA支持编译CodeGen功能,针对Unary/Raster/Binary算子进行算子在线融合,整体性能提升5%-10%。
# 3. Bugfix
## 3.1 关联 Github Issue 解决

- Tflite FC + Relu 情况下模型转换到 MNN 未正确解析 Relu [https://github.com/alibaba/MNN/issues/2332](https://github.com/alibaba/MNN/issues/2332)
- Onnx 模型中FP16 常量 转换到 MNN 时不支持[https://github.com/alibaba/MNN/issues/2477](https://github.com/alibaba/MNN/issues/2477)
- Onnx 新的 LayerNorm 算子不支持(目前采用效率较低的算子组合实现)[https://github.com/alibaba/MNN/issues/2509](https://github.com/alibaba/MNN/issues/2509)
- Vulkan Image 模式部分情形下计算错误[https://github.com/alibaba/MNN/issues/2433](https://github.com/alibaba/MNN/issues/2433)
- Yolov8 MNN CUDA 推理出错 [https://github.com/alibaba/MNN/issues/2428](https://github.com/alibaba/MNN/issues/2428)
- OpenCL Codegen 部分 case 下出现编译错误 [https://github.com/alibaba/MNN/issues/2523](https://github.com/alibaba/MNN/issues/2523)
## 3.2 其他 Bugfix 或优化

- 修正 Vulkan Buffer 模式单元测试 convolution3d 出错的问题
- 修正 ScatterND 算子在 update tensor 长度为空的计算错误问题
- 修正 Onnx EinSum 算子在部分情况下转换到 MNN 出错的问题
- 修正 Onnx Split 算子转换问题
- 支持 Onnx 的 GEMM  + Relu 算子的合并