Skip to content

3.1.0 新增LLM移动端应用

Latest
Compare
Choose a tag to compare
@github-actions github-actions released this 24 Feb 09:54
27aaf79

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

  • 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 生成后修改而得