【内存分配优化、性能优化、Bugfix】2.7.0
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 #2332
- Onnx 模型中FP16 常量 转换到 MNN 时不支持#2477
- Onnx 新的 LayerNorm 算子不支持(目前采用效率较低的算子组合实现)#2509
- Vulkan Image 模式部分情形下计算错误#2433
- Yolov8 MNN CUDA 推理出错 #2428
- OpenCL Codegen 部分 case 下出现编译错误 #2523
3.2 其他 Bugfix 或优化
- 修正 Vulkan Buffer 模式单元测试 convolution3d 出错的问题
- 修正 ScatterND 算子在 update tensor 长度为空的计算错误问题
- 修正 Onnx EinSum 算子在部分情况下转换到 MNN 出错的问题
- 修正 Onnx Split 算子转换问题
- 支持 Onnx 的 GEMM + Relu 算子的合并