MNN icon indicating copy to clipboard operation
MNN copied to clipboard

0.4.4版本omni模型音频输入和音频输出无法正常运行

Open Willian7004 opened this issue 7 months ago • 11 comments

设备:骁龙8gen1,安卓15,8g内存

图片输入正常,而音频输入在较短的perfill后闪退了,应该不是内存问题。

选择音频输出时,没有实时输出,生成结束也没有显示生成的音频

Image

Willian7004 avatar May 13 '25 04:05 Willian7004

音频回放还没加。8gen1 下跑音频输出应该是有点慢的。 音频输入可以再试试,录个视频看下。

Juude avatar May 13 '25 06:05 Juude

音频回放还没加。8gen1 下跑音频输出应该是有点慢的。 音频输入可以再试试,录个视频看下。

再次测试了,音频输入应该是长度问题,剪到20秒的话能正常输入。为了处理较长的音频,可以考虑添加滑动窗口等优化方法。

Image

Willian7004 avatar May 13 '25 08:05 Willian7004

@wangzhaode 可以看下

Juude avatar May 13 '25 09:05 Juude

我在Qualcomm snapdragon 8 elite下,音频输出断断续续的(会在句子中间卡住),不清楚这个是否符合预期。

null-define avatar May 13 '25 15:05 null-define

符合预期,端上很难做到实时,我们还在优化

Juude avatar May 14 '25 07:05 Juude

上传图片会跳界面选择文件后返回直接杀后台了,这个交互逻辑可以优化一下,允许用户自由的选择授权一个目录,之后软件可以直接在授权目录中选择图片,这样就不用每次都跳到系统文件选择界面了。

M17764017422 avatar May 18 '25 01:05 M17764017422

还有拍照也是一样的问题

M17764017422 avatar May 18 '25 05:05 M17764017422

还有拍照也是一样的问题

应该是系统啥后台应用杀的太狠了。 什么手机。

Juude avatar May 21 '25 08:05 Juude

还有拍照也是一样的问题

应该是系统啥后台应用杀的太狠了。 什么手机。

小米手机骁龙865+8G内存跑3B版本的模型

M17764017422 avatar May 22 '25 02:05 M17764017422

文字模型可以跑qwen3-8b速度不是太慢可以接受

M17764017422 avatar May 22 '25 02:05 M17764017422

crash_20250518_133335.TXT 上面是附件注意识别和下载 该文档主要记录了安卓应用 com.alibaba.mnnllm.android 的崩溃日志及相关运行信息,包含Java层和Native层的崩溃问题,具体分析如下:

一、Java层崩溃(NullPointerException)

  1. 崩溃概述
  • 时间:多次发生于5月17日21:33和5月18日13:33。
  • 线程:主线程(main)。
  • 错误类型: java.lang.RuntimeException 嵌套 NullPointerException 。
  1. 堆栈跟踪关键信息

Caused by: java.lang.NullPointerException at com.alibaba.mnnllm.android.chat.input.AttachmentPickerModule.onActivityResult(AttachmentPickerModule.kt:133) at com.alibaba.mnnllm.android.chat.input.ChatInputComponent.handleResult(ChatInputComponent.kt:285) at com.alibaba.mnnllm.android.chat.ChatActivity.onActivityResult(ChatActivity.kt:267)  

  • 触发场景:在 ChatActivity 恢复( onResume )时,处理 ActivityResult (请求码100)时发生空指针。
  • 可能原因:
  •  AttachmentPickerModule 在处理附件选择结果时,未校验相关对象是否为空(如 data 参数为 null )。
  •  ChatInputComponent 或 ChatActivity 的 onActivityResult 逻辑中存在未初始化的变量引用。

二、Native层崩溃(SIGSEGV)

  1. 崩溃概述
  • 时间:5月17日21:45。
  • 线程: pool-3-thread-1 (后台线程)。
  • 错误类型: Fatal signal 11 (SIGSEGV) ,空指针解引用( null pointer dereference )。
  1. 堆栈跟踪关键信息

backtrace: #00 pc ... libMNN.so (MNN::Tensor::copyFromHostTensor(MNN::Tensor const*)+204) #06 pc ... libMNN.so (MNN::DIFFUSION::Diffusion::load()+6008) #07 pc ... libmnnllmapp.so (mls::DiffusionSession::DiffusionSession+292)  

  • 触发场景:
  • 与MNN(深度学习框架)的Tensor操作相关,可能发生在扩散模型(Diffusion)加载或数据拷贝过程中。
  • 涉及 libMNN.so 和 libmnnllmapp.so 库,可能为模型初始化时的内存管理错误。
  • 可能原因:
  • Native层代码中未校验Tensor对象是否有效,导致访问空指针。
  • 模型文件损坏或加载流程中资源释放不当。

三、其他关键信息

  1. 设备与环境
  • 设备型号:Redmi Apollo(Android 12,API 31)。
  • ABI: arm64 。
  • 应用版本:0.4.4(日志中显示检查更新时当前版本为0.4.4,最新版本同)。
  1. 性能与网络日志
  • 主线程延迟:
  •  ChatActivity 的 onStart 耗时206ms~266ms。
  •  Looper 多次报告长消息( longMsg )和掉帧(Skipped frames),可能存在UI线程阻塞。
  • 网络请求:
  • 访问 modelscope.cn 的模型文件时返回404 Not Found,可能影响模型加载。

四、总结与建议

  1. 优先修复点
  • Java层空指针:
  • 在 AttachmentPickerModule.onActivityResult 中增加对 data 参数的非空校验。
  • 检查 ChatInputComponent 和 ChatActivity 中与 ActivityResult 相关的变量初始化逻辑。
  • Native层SIGSEGV:
  • 排查MNN库在加载扩散模型时的Tensor操作,确保对象有效性。
  • 验证模型文件路径和权限,避免加载过程中出现资源异常。
  1. 辅助优化
  • 优化主线程任务,减少 onStart 和 onResume 中的耗时操作。
  • 处理网络请求失败场景,避免因模型文件缺失导致崩溃。

从提供的崩溃日志来看,没有直接证据表明崩溃是由内存不足(OOM)导致,但可能存在内存相关的间接影响。以下是具体分析:

一、日志中无明确内存不足证据

1. Java层崩溃(NullPointerException)

  • 错误类型为空指针引用,直接原因是代码中未校验对象是否为空(如 AttachmentPickerModule.onActivityResult 中使用了可能为 null 的变量),属于逻辑缺陷,而非内存不足导致。
  • 日志中未出现  java.lang.OutOfMemoryError  或  OOM  相关记录。 2. Native层崩溃(SIGSEGV)
  • 错误类型为空指针解引用( null pointer dereference ),根源是Native代码中访问了无效内存地址(如未初始化的Tensor对象),属于内存访问错误,而非内存分配失败(如无足够内存创建对象)。
  • 日志中未出现  low memory  或  memory allocation failed  等提示。

二、可能的内存相关间接因素

1. GC阻塞与内存压力

  • 日志中出现  Waiting for a blocking GC NativeAlloc  记录,表明应用在进行Native内存分配时等待垃圾回收(GC),说明内存可能处于紧张状态,但尚未达到崩溃阈值。
  • GC频繁可能导致对象生命周期异常(如对象被提前回收),间接引发空指针问题,但这属于间接关联,而非直接原因。 2. Native内存管理问题
  • Native层崩溃涉及  libMNN.so  的Tensor操作(如  MNN::Tensor::copyFromHostTensor ),若模型加载或推理过程中存在内存泄漏(如未释放不再使用的Tensor),可能导致内存占用持续升高,触发系统资源限制,但日志中未体现此类迹象。

三、内存不足的典型特征对比

特征 当前崩溃日志表现 内存不足(OOM)典型表现 错误类型 NullPointerException、SIGSEGV OutOfMemoryError、Process killed by OOM 日志关键词 "null pointer"、"SEGV_MAPERR" "java.lang.OutOfMemoryError"、"low memory" 系统行为 应用直接崩溃 可能伴随界面卡顿、后台服务被杀 代码影响 空指针引用、无效内存访问 大对象分配失败、缓存清理异常

四、建议排查方向

1. 优先修复已知空指针问题

  • 针对  AttachmentPickerModule  和  ChatActivity  中的  onActivityResult  逻辑,增加对  Intent data 、UI组件等对象的非空校验。 2. 分析Native层内存访问逻辑
  • 使用  addr2line  工具解析  libMNN.so  中的崩溃地址,定位具体代码行,检查Tensor对象的生命周期管理(如是否在释放后被误用)。 3. 监控内存使用情况
  • 通过 Android Profiler 或  adb shell dumpsys meminfo  观察应用内存占用峰值,确认是否存在内存泄漏或异常增长。
  • 若发现内存持续升高后崩溃,需进一步排查 Native 层内存分配逻辑(如 MNN 框架的内存管理策略)。 4. 验证模型文件与依赖库
  • 确保模型文件(如  llm.mnn )完整且路径正确,避免因文件损坏导致加载时内存访问异常。

结论

当前崩溃的直接原因是代码逻辑缺陷(空指针引用和Native内存访问错误),而非内存不足。但内存紧张可能通过GC阻塞等机制间接加剧问题。建议优先修复空指针和Native内存管理问题,同时监控内存使用以排除潜在优化点。

@Juude 希望对问题分析有点帮助

M17764017422 avatar May 23 '25 10:05 M17764017422

Marking as stale. No activity in 60 days.

github-actions[bot] avatar Jul 27 '25 09:07 github-actions[bot]