0.4.4版本omni模型音频输入和音频输出无法正常运行
设备:骁龙8gen1,安卓15,8g内存
图片输入正常,而音频输入在较短的perfill后闪退了,应该不是内存问题。
选择音频输出时,没有实时输出,生成结束也没有显示生成的音频
音频回放还没加。8gen1 下跑音频输出应该是有点慢的。 音频输入可以再试试,录个视频看下。
音频回放还没加。8gen1 下跑音频输出应该是有点慢的。 音频输入可以再试试,录个视频看下。
再次测试了,音频输入应该是长度问题,剪到20秒的话能正常输入。为了处理较长的音频,可以考虑添加滑动窗口等优化方法。
@wangzhaode 可以看下
我在Qualcomm snapdragon 8 elite下,音频输出断断续续的(会在句子中间卡住),不清楚这个是否符合预期。
符合预期,端上很难做到实时,我们还在优化
上传图片会跳界面选择文件后返回直接杀后台了,这个交互逻辑可以优化一下,允许用户自由的选择授权一个目录,之后软件可以直接在授权目录中选择图片,这样就不用每次都跳到系统文件选择界面了。
还有拍照也是一样的问题
还有拍照也是一样的问题
应该是系统啥后台应用杀的太狠了。 什么手机。
还有拍照也是一样的问题
应该是系统啥后台应用杀的太狠了。 什么手机。
小米手机骁龙865+8G内存跑3B版本的模型
文字模型可以跑qwen3-8b速度不是太慢可以接受
上面是附件注意识别和下载
该文档主要记录了安卓应用 com.alibaba.mnnllm.android 的崩溃日志及相关运行信息,包含Java层和Native层的崩溃问题,具体分析如下:
一、Java层崩溃(NullPointerException)
- 崩溃概述
- 时间:多次发生于5月17日21:33和5月18日13:33。
- 线程:主线程(main)。
- 错误类型: java.lang.RuntimeException 嵌套 NullPointerException 。
- 堆栈跟踪关键信息
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)
- 崩溃概述
- 时间:5月17日21:45。
- 线程: pool-3-thread-1 (后台线程)。
- 错误类型: Fatal signal 11 (SIGSEGV) ,空指针解引用( null pointer dereference )。
- 堆栈跟踪关键信息
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对象是否有效,导致访问空指针。
- 模型文件损坏或加载流程中资源释放不当。
三、其他关键信息
- 设备与环境
- 设备型号:Redmi Apollo(Android 12,API 31)。
- ABI: arm64 。
- 应用版本:0.4.4(日志中显示检查更新时当前版本为0.4.4,最新版本同)。
- 性能与网络日志
- 主线程延迟:
- ChatActivity 的 onStart 耗时206ms~266ms。
- Looper 多次报告长消息( longMsg )和掉帧(Skipped frames),可能存在UI线程阻塞。
- 网络请求:
- 访问 modelscope.cn 的模型文件时返回404 Not Found,可能影响模型加载。
四、总结与建议
- 优先修复点
- Java层空指针:
- 在 AttachmentPickerModule.onActivityResult 中增加对 data 参数的非空校验。
- 检查 ChatInputComponent 和 ChatActivity 中与 ActivityResult 相关的变量初始化逻辑。
- Native层SIGSEGV:
- 排查MNN库在加载扩散模型时的Tensor操作,确保对象有效性。
- 验证模型文件路径和权限,避免加载过程中出现资源异常。
- 辅助优化
- 优化主线程任务,减少 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 希望对问题分析有点帮助
Marking as stale. No activity in 60 days.