2.5.0

alibaba/MNN2.5.0Apr 27, 2023by github-actions[bot]

AI Summary

MNN 2.5.0 adds extensive new OpenCV operators, Tflite int8 quantization support, CUDA bf16 support, and significant performance optimizations using Intel subgroup extensions.

Key Highlights

  • MNN OpenCV新增算子: erode、convertMaps、remap、adaptiveThreshold、bilateralFilter、solve、normalize、split、merge、addWeight
  • Tflite int8量化模型转换到MNN支持
  • ARM CPU支持GELU-bf16
  • CUDA新增算子: GridSampler、Multi-Input Convolution、Multi-Input Deconvolution
  • CUDA多卡推理支持设置device_id
  • 支持Deconvolution-int8
  • runSession函数加锁避免多线程调用出错
  • 支持非拓扑序ONNX模型转换
  • 支持ONNX多版本Softmax转换
  • Intel subgroup扩展优化Winograd算子(ResNet18优于OpenVINO)
  • CUDA Argmax/Softmax/MatMul性能优化(ChatGLM在A10显卡优于Pytorch 2.0)
  • GELU-bf16实现后性能提升

New Features

  • OpenCV算子(erode/convertMaps/remap/adaptiveThreshold/bilateralFilter/solve/normalize/split/merge/addWeight)
  • Tflite int8量化转换
  • ARM GELU-bf16
  • CUDA算子(GridSampler/Multi-Input Conv/Deconv)
  • CUDA多卡device_id设置
  • Deconvolution-int8
  • 非拓扑序ONNX支持
  • ONNX多版本Softmax支持
  • Intel subgroup优化
  • CUDA性能优化

Full Release Notes

# 1. 新特性
- MNN OpenCV新增算子:
   - erode
   - convertMaps
   - remap
   - adaptiveThreshold
   - bilateralFilter
   - solve (MNN numpy新增solve)
   - normalize
   - split
   - merge
   - addWeight
- 支持Tflite int8量化模型转换到MNN模型;
- ARM CPU支持GELU-bf16
- CUDA 新增算子:
   - GridSampler
   - Multi-Input Convolution
   - Multi-Input Deconvolution
- CUDA针对多卡推理,支持用户设置运行device_id
- 支持Deconvolution-int8
- runSession/runSessionWithCallBack函数加锁,避免多线程调用出错
- 支持非拓扑序ONNX模型转换
- 支持ONNX多版本Softmax转换
# 2. 重构/优化

- 优化内存分配与回收时机,新增Session
- 简化ONNX Slice算子模型转换
- Cuda性能优化
   - Argmax针对dim size较大的情况性能优化
   - Softmax在channel较大时性能优化
   - MatMul算子预重排逻辑优化
   - 优化后ChatGLM模型在A10显卡上性能优于Pytorch 2.0
- OpenCL优化,resnet测试优于OpenVINO
   - 使用intel subgroup扩展优化winogard算子,调整数据排布格式与准入条件
   - 根据输入尺寸调整conv2d算子的数据排布格式,使用intel subgroup扩展优化
   - 优化后ResNet18模型在intel UHD Graphics 630显卡上性能优于OpenVINO
- GELU-bf16实现后性能提升
# 3. Bugfix
## 3.1 关联 Github Issue 解决

- 修复CPURaster 的 singleConvert 部分情况出错 [issue-2264](https://github.com/alibaba/MNN/issues/2264)
- 修复atan2计算错误的问题
- 修复ONNX dynamic shape转换出错的问题 [issue-2276](https://github.com/alibaba/MNN/issues/2276)
- 修复i8mm时Im2col出错的问题
- 修复CPUConvolutionDepthwise错误的问题 [issue-2291](https://github.com/alibaba/MNN/issues/2291)
- 修复CUDA int8编译失败的问题 [issue-2321](https://github.com/alibaba/MNN/issues/2321)
- 修复Onnx Loop 算子的 M 和 cond 为optional 时,转换失败的问题 [issue-2267](https://github.com/alibaba/MNN/issues/2267)
- 修复Raster中fastblit 中turnPackRegion 部分情况下出错的问题 [issue-2337](https://github.com/alibaba/MNN/issues/2337)
## 3.2 其他 Bugfix

- 修复 onnx 子图中 identity 被优化导致 输出数和原始子图不一致的问题
- 修复 Onnx sequense 相关算子转换问题
- 修复 TensorArrayConcat 计算 newAxis = 1 时的问题(此时为 stack)
- 修复 TensorArray 计算 eleSize 时,axis < 0 时计算出错的问题
- 修复低精度计算或者 GPU 无法运行 mnn 训练模型的问题