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 算子的合并