Skip to content

【新增Int8 量化算子,OpenCL后端适配 recordable queue】2.6.0

Compare
Choose a tag to compare
@github-actions github-actions released this 05 Jul 08:11
c293f9e

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
  • 修复OpenCL Gather算子出错的问题;issue-2424
  • 修复ImageProcess出错的问题;issue-2386
  • OpenCL支持用户选择device id; issue-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中形状不对的问题;