LLM 相关更新
App 发布
- Android
- 新增Android的大模型应用(LLM / Diffusion),详见 apps/Android/MnnLlmChat/README.md
- iOS
- 新增 iOS 的大模型应用,详见 apps/iOS/MNNLLMChat/README.md
新特性
- 模型支持
- 支持 Qwen2-VL / Qwen2-Audio / Qwen2.5-VL 等多模态大模型的导出和运行。
- 支持 DeepSeek-R1-1.5B-Qwen 和 DeepSeek-R1-7B-Qwen
- LLM 单步执行支持
- 新增了对 LLM 单步执行的支持,便于调试和优化模型推理过程。
- LLM 扩展采样算法支持
- 扩展了采样算法的支持,提升了模型推理的灵活性和多样性。
- LLM 导出模型时支持输出历史 Token 的概率值
- 在导出 LLM 模型时,新增了输出历史 Token 概率值的功能,便于后续分析和优化。
- LLM-CPU 支持 mmap 文件缓存
- 新增了对 mmap 文件缓存的支持,使二次加载模型时避免内存重排,提升了加载效率。
性能优化
- CPU 多线程性能进一步提升
- 对 LLM 多线程性能进行了优化,进一步提升了整体推理速度。
- CPU prefill 性能优化
- 优化了 CPU 上 prefill 性能,使 1024 token 输入和 512 token 输入的 prefill 性能持平。
- GPU 优化 OpenCL AutoTuning 耗时
- 优化了 OpenCL AutoTuning 的耗时,避免了首次推理耗时过长的问题。
- GPU 优化:Metal / OpenCL 支持 fp16 的 scale/bias,支持对称量化优化
- Metal / OpenCL 后端支持 fp16 的 scale/bias 和对称量化优化的支持,提升了推理效率。
- LLM 加速:Metal / OpenCL 后端支持 scale/bias 使用 fp16
- Metal / OpenCL 支持 scale/bias 使用 fp16(设置 precision = low 时启用),进一步优化了 GPU 推理性能。
- 3.1.0 对比 3.0.0 在 小米14 设备上的性能对比,千问 2.5-7B-Int4-128 ,输入 512 token
Bug 修复
- LLM Lora 分离加载的模式存在误差
- 修复了 Lora 分离加载模式存在误差的问题
- 开源反馈 #3091: LLM Export 8Bit 量化出错
- 修复了 LLM Export 8Bit 量化出错的问题,确保了量化功能的稳定性。
重构与改进
- LLM 导出模型时支持输出历史 Token 的概率值
- 重构了 LLM 导出模型的功能,支持输出历史 Token 的概率值,便于模型分析和优化。
引擎其他更新
新特性
- Pymnn 支持无 numpy 环境安装
- 现在 Pymnn 可以在没有 numpy 的环境下安装,解决了之前必须依赖 numpy 的问题。
- 数字人支持 KV Cache 回溯
- 新增了对 KV Cache 回溯的支持,提升了数字人模型的推理效率。
- OpenCL 支持大模型分块计算
- 新增了对大模型分块计算的支持,避免了渲染卡顿问题。
性能优化
- Vulkan Image 分支性能优化
- 在 8Gen 系列芯片上,Vulkan 后端推理性能与 OpenCL 后端持平;在中低端设备上,整体性能提升了 30% 左右。
- Convolution3D 转换为 Convolution2D
- 将 Convolution3D 转换为 Convolution2D,降低了 Convolution3D 的耗时和内存占用。
- OpenCL 降低非对齐情况下申请的内存大小
- 优化了 OpenCL 在非对齐情况下申请的内存大小,减少了内存占用。
Bug 修复
- Arm v8 架构下 Debug 和 Release 模式 layernorm 计算有微小误差
- 修复了 Arm v8 架构下 Debug 和 Release 模式 layernorm 计算存在微小误差的问题。
- NNAPI 修正 Binary 不支持 relu fuse 的问题
- 修正了 NNAPI 中 Binary 不支持 relu fuse 的问题。
- MNN:GPU 模型串联运行时内存访问越界问题
- 修复了在模型串联运行时可能出现的内存访问越界问题,原因是 backend 没有调用 onExecuteBegin 和 onExecuteEnd。
- ConvTranspose3D 占用内存过大
- 通过把 **ConvTranspose3D 转换为 ConvTranspose2D ,**修复了 ConvTranspose3D 占用内存过大的问题。
- Onnx 的 Cast 算子输出 fp16 时报 not support type 错误
- 修复了 Onnx 的 Cast 算子输出 fp16 时报 not support type 错误的问题,提升了模型转换的兼容性。
开源反馈修复
- 开源反馈 #3061: ConvTranspose CPU 运行时占用内存大
- 修复了 ConvTranspose CPU 运行时占用内存过大的问题。
- 开源反馈 #3073: 离线量化工具出错
- 修复了离线量化工具出错的问题。
- 开源反馈 #3076: MNN CV 处理出错
- 修复了 MNN CV 处理出错的问题,并进行了相关沟通确认。
- 开源反馈 #3156: Metal 改变输入形状后仍需要 auto-tuning
- 修复了 Metal 改变输入形状后仍需要 auto-tuning 的问题。
重构与改进
- OpenCL 内存共享方案切换为 HardwareBuffer
- 将 OpenCL 内存共享方案切换为 HardwareBuffer,提升了内存管理效率。
- MNN:Geometry Conv3D 的 im2col 产出的 region 数量太多
- 优化了 Conv3D 的 im2col 实现,减少了产出的 region 数量。
本文由 DeepSeek 生成后修改而得