3.1.0

alibaba/MNN3.1.0Feb 24, 2025by github-actions[bot]

AI Summary

MNN 3.1.0 introduces new mobile LLM applications for Android and iOS, significant performance improvements in CPU prefill and GPU inference, and expanded model support including Qwen2-VL/Audio and DeepSeek-R1.

Key Highlights

  • Android大模型应用(MNNChat)正式发布
  • iOS大模型应用(MNNLLMChat)正式发布
  • Qwen2-VL、Qwen2-Audio、Qwen2.5-VL等多模态大模型支持
  • DeepSeek-R1-1.5B-Qwen和DeepSeek-R1-7B-Qwen支持
  • LLM单步执行支持便于调试和优化
  • LLM-CPU支持mmap文件缓存避免二次加载时内存重排
  • CPU多线程性能进一步提升
  • CPU prefill性能优化使1024 token和512 token输入性能持平
  • GPU优化OpenCL AutoTuning耗时避免首次推理过长
  • Metal/OpenCL后端支持fp16的scale/bias和对称量化优化

New Features

  • Android LLM/Diffusion应用 - MNNChat
  • iOS LLM应用 - MNNLLMChat
  • Qwen2-VL/Audio/2.5-VL等多模态大模型导出和运行
  • DeepSeek-R1-1.5B-Qwen和DeepSeek-R1-7B-Qwen支持
  • LLM单步执行支持
  • LLM扩展采样算法支持
  • LLM导出时输出历史Token的概率值
  • LLM-CPU mmap文件缓存支持
  • CPU多线程性能优化
  • CPU prefill性能优化
  • GPU OpenCL AutoTuning耗时优化
  • Metal/OpenCL fp16 scale/bias支持
  • Vulkan Image分支性能优化(8Gen系列芯片与OpenCL持平)
  • Convolution3D转换为Convolution2D降低耗时和内存
  • OpenCL降低非对齐情况下内存申请大小

Full Release Notes

#### LLM 相关更新
##### App 发布
1. **Android**
    - **新增Android的大模型应用(LLM / Diffusion),详见 apps/Android/MnnLlmChat/README.md**
2. **iOS**
    - **新增 iOS 的大模型应用,详见 apps/iOS/MNNLLMChat/README.md**

##### 新特性
1. **模型支持**
    - **支持 Qwen2-VL / Qwen2-Audio / Qwen2.5-VL 等多模态大模型的导出和运行。**
    - **支持 DeepSeek-R1-1.5B-Qwen 和 DeepSeek-R1-7B-Qwen**
2. **LLM 单步执行支持**
    - 新增了对 LLM 单步执行的支持,便于调试和优化模型推理过程。
3. **LLM 扩展采样算法支持**
    - 扩展了采样算法的支持,提升了模型推理的灵活性和多样性。
4. **LLM 导出模型时支持输出历史 Token 的概率值**
    - 在导出 LLM 模型时,新增了输出历史 Token 概率值的功能,便于后续分析和优化。
5. **LLM-CPU 支持 mmap 文件缓存**
    - 新增了对 mmap 文件缓存的支持,使二次加载模型时避免内存重排,提升了加载效率。

##### 性能优化
1. **CPU 多线程性能进一步提升**
    - 对 LLM 多线程性能进行了优化,进一步提升了整体推理速度。
2. **CPU prefill 性能优化**
    - 优化了 CPU 上 prefill 性能,使 1024 token 输入和 512 token 输入的 prefill 性能持平。
3. **GPU 优化 OpenCL AutoTuning 耗时**
    - 优化了 OpenCL AutoTuning 的耗时,避免了首次推理耗时过长的问题。
4. **GPU 优化:Metal / OpenCL 支持 fp16 的 scale/bias,支持对称量化优化**
    - Metal / OpenCL 后端支持 fp16 的 scale/bias 和对称量化优化的支持,提升了推理效率。
5. **LLM 加速:Metal / OpenCL 后端支持 scale/bias 使用 fp16**
    - Metal / OpenCL 支持 scale/bias 使用 fp16(设置 precision = low 时启用),进一步优化了 GPU 推理性能。

![image](https://github.com/user-attachments/assets/8b345acc-bb89-4806-885c-ce38cd57e3a6)

+ 3.1.0 对比 3.0.0 在 小米14 设备上的性能对比,千问 2.5-7B-Int4-128 ,输入 512 token

##### Bug 修复
1. **LLM Lora 分离加载的模式存在误差**
    - 修复了 Lora 分离加载模式存在误差的问题
2. **开源反馈 #3091: LLM Export 8Bit 量化出错**
    - 修复了 LLM Export 8Bit 量化出错的问题,确保了量化功能的稳定性。

##### 重构与改进
1. **LLM 导出模型时支持输出历史 Token 的概率值**
    - 重构了 LLM 导出模型的功能,支持输出历史 Token 的概率值,便于模型分析和优化。

---

#### 引擎其他更新
##### 新特性
1. **Pymnn 支持无 numpy 环境安装**
    - 现在 Pymnn 可以在没有 numpy 的环境下安装,解决了之前必须依赖 numpy 的问题。
2. **数字人支持 KV Cache 回溯**
    - 新增了对 KV Cache 回溯的支持,提升了数字人模型的推理效率。
3. **OpenCL 支持大模型分块计算**
    - 新增了对大模型分块计算的支持,避免了渲染卡顿问题。

##### 性能优化
1. **Vulkan Image 分支性能优化**
    - 在 8Gen 系列芯片上,Vulkan 后端推理性能与 OpenCL 后端持平;在中低端设备上,整体性能提升了 30% 左右。
2. **Convolution3D 转换为 Convolution2D**
    - 将 Convolution3D 转换为 Convolution2D,降低了 Convolution3D 的耗时和内存占用。
3. **OpenCL 降低非对齐情况下申请的内存大小**
    - 优化了 OpenCL 在非对齐情况下申请的内存大小,减少了内存占用。

##### Bug 修复
1. **Arm v8 架构下 Debug 和 Release 模式 layernorm 计算有微小误差**
    - 修复了 Arm v8 架构下 Debug 和 Release 模式 layernorm 计算存在微小误差的问题。
2. **NNAPI 修正 Binary 不支持 relu fuse 的问题**
    - 修正了 NNAPI 中 Binary 不支持 relu fuse 的问题。
3. **MNN:GPU 模型串联运行时内存访问越界问题**
    - 修复了在模型串联运行时可能出现的内存访问越界问题,原因是 backend 没有调用 onExecuteBegin 和 onExecuteEnd。
4. **ConvTranspose3D 占用内存过大**
    - 通过把 **ConvTranspose3D 转换为 ConvTranspose2D ,**修复了 ConvTranspose3D 占用内存过大的问题。
5. **Onnx 的 Cast 算子输出 fp16 时报 not support type 错误**
    - 修复了 Onnx 的 Cast 算子输出 fp16 时报 not support type 错误的问题,提升了模型转换的兼容性。

##### 开源反馈修复
1. **开源反馈 #3061: ConvTranspose CPU 运行时占用内存大**
    - 修复了 ConvTranspose CPU 运行时占用内存过大的问题。
2. **开源反馈 #3073: 离线量化工具出错**
    - 修复了离线量化工具出错的问题。
3. **开源反馈 #3076: MNN CV 处理出错**
    - 修复了 MNN CV 处理出错的问题,并进行了相关沟通确认。
4. **开源反馈 #3156: Metal 改变输入形状后仍需要 auto-tuning**
    - 修复了 Metal 改变输入形状后仍需要 auto-tuning 的问题。

##### 重构与改进
1. **OpenCL 内存共享方案切换为 HardwareBuffer**
    - 将 OpenCL 内存共享方案切换为 HardwareBuffer,提升了内存管理效率。
2. **MNN:Geometry Conv3D 的 im2col 产出的 region 数量太多**
    - 优化了 Conv3D 的 im2col 实现,减少了产出的 region 数量。


**本文由 DeepSeek 生成后修改而得**