2.6.0
alibaba/MNN2.6.0Jul 5, 2023by github-actions[bot]
AI Summary
MNN 2.6.0 adds comprehensive int8 quantization operator support, OpenCL recordable queue adaptation for Qualcomm GPUs, and low memory inference mode supporting ChatGLM-6B in 3GB.
Key Highlights
- 新增int8量化算子: Softmax、Interp、Binary、Unary、Scale
- OpenCL支持高通record queue降低GPU Command Buffer创建时间
- x86_64支持GELU-bf16
- CUDA支持bf16模型推理
- Benchmark工具支持直接测试量化后模型性能
- Pymnn Tensor/Var使用Tuple支持混合类型数据
- 权值量化模型低内存推理模式(ChatGLM-6B仅需3GB内存)
- 稀疏卷积内存优化
- 减少异构运行时的常量内存占用
- CUDA int8算子性能优化
- AVX512-VNNI下ConvolutionInt8及im2col分块大小调整(性能提升20%-30%)
- x86 bilinear/nearest sample的SIMD实现(ImageProcess性能提升50%左右)
New Features
- int8量化算子(Softmax/Interp/Binary/Unary/Scale)
- OpenCL Loop算子(BatchMatMul/Gather)
- x86_64 GELU-bf16
- CUDA bf16推理
- Benchmark量化模型测试
- 低内存推理模式(ChatGLM-6B 3GB)
- 稀疏卷积优化
- CUDA int8优化
- AVX512-VNNI优化
- x86 SIMD ImageProcess
Full Release Notes
# 1. 新特性 - 新增int8量化算子支持: - Softmax - Interp - Binary - Unary - Scale - OpenCL 支持 Loop 算子特定情形; - BatchMatMul - Gather - x86_64支持Gelu-bf16; - CUDA支持bf16模型推理; - benchmark 工具支持直接测试模型量化后的性能(不需要先用量化工具量化模型) - Pymnn Tensor/Var使用Tuple创建时支持混合类型数据; - 权值量化模型支持低内存推理模式,计算时反量化; - 支持ChatGLM-6B模型推理内存占用3G; - 支持构建了ChatGLM-MNN Android app; # 2. 优化 - OpenCL支持高通reocrd queue ,以降低创建 GPU Command Buffer 所需的时间; Oneplus 9 机型 Benchmark 测试结果如下 | **Model** | **unrecord** | **record** | | --- | --- | --- | | resnet-v2-50.mnn | 21.254 | 20.160 | | MobileNetV2_224.mnn | 4.853 | 4.186 | | mobilenet-v1-1.0.mnn | 6.424 | 5.315 | | nasnet.mnn | 46.751 | 20.260 | | SqueezeNetV1.0.mnn | 7.35 | 6.832 | | squeezenetv1.1.mnn | 3.936 | 3.693 | | mobilenetV3.mnn | 14.201 | 6.743 | | inception-v3.mnn | 33.111 | 32.032 | - 稀疏卷积内存优化,降低内存占用; - 减少异构(CPU低精度/GPU)运行 MNN 模型时的常量内存占用; - CUDA优化int8算子性能; - 减少Permute几何计算产生的region数量; - 重新调整ConvolutionInt8及im2col在AVX512-VNNI下的分块大小,提升性能20%-30%; - X86新增bilinear/nearest sample的SIMD实现,提升ImageProcess性能 50% 左右; # 3. Bugfix ## 3.1 关联 Github Issue 解决 - 修复CUDA Raster错误导致输出为0的问题;[issue-2333](https://github.com/alibaba/MNN/issues/2333) - 修复OpenCL Gather算子出错的问题;[issue-2424](https://github.com/alibaba/MNN/issues/2424) - 修复ImageProcess出错的问题;[issue-2386](https://github.com/alibaba/MNN/issues/2386) - OpenCL支持用户选择device id; [issue-2343](https://github.com/alibaba/MNN/issues/2343) ## 3.2 其他 Bugfix - CUDA CMakeList对未支持架构增加报错信息; - testMNNFromOnnx脚本在模型测试正确时不启用DEBUG模式; - load_module_from_file中的shape_mutable默认改为True(存在子图的模型无法在False情形下运行); - MNNConvert使用keepInputFormat选项时,也同时将输出Tensor的format转换为原始格式 - 修复log记录时设备为空时Crash的情况; - 修复BinaryOp单元测试在Windows下无法编译的问题; - 修复MNN_SUPPORT_DEPRECATED_OP宏不控制OptimizedComputer的问题; - 修复fp16多线程且分块方向为channel时convolution计算出错的问题; - 修复deconvolutionInt8访存越界的问题; - 修复TensorArrayWrite几何计算产生zero region的问题; - 修复CUDA depthwise conv出错的问题; - 修复一些文档格式、内容的错误; - 修复多线程下createRuntime和setGlobalConfig出错的问题; - 修复Vec.hpp中无用代码导致的编译失败问题; - 修复OpenCL对gpuDevice的assert失败的问题; - 修复OpenCL bianry mod出错的问题; - 修复CUDA argmax出错的问题; - 修复pymnn/example/mnn_numpy_cv_demo.py中形状不对的问题;