铭鸿体育资讯网

对,这组截图基本把问题说明白了: 同一台 Redmi K90、同一个 PocketPal、同样能输入图片,Gemma 4 E2B 可以正常识图,而 Qwen3.5-9B 一到图片编码阶段就崩。 所以现在可以排除很多东西了: 不是手机完全不支持视觉模型; 不是 PocketPal 整个多模态功能坏了; 不是“16GB 一定跑不了图片”; 也 ​

对,这组截图基本把问题说明白了:

同一台 Redmi K90、同一个 PocketPal、同样能输入图片,Gemma 4 E2B 可以正常识图,而 Qwen3.5-9B 一到图片编码阶段就崩。

所以现在可以排除很多东西了:

不是手机完全不支持视觉模型;

不是 PocketPal 整个多模态功能坏了;

不是“16GB 一定跑不了图片”;

也不是你选 CPU 仍然偷偷用了 GPU 导致的。

Gemma 4 E2B 在你手机上已经实际跑通视觉,而且速度约 21 tok/s,只是首图视觉编码 TTFT 较高,这说明基础图像读取、mmproj、MTMD、CPU 后端本身都能工作。

真正的问题集中到 Qwen3.5-9B 的视觉路径。

更准确地说,现在最像:

Qwen3.5-9B + mmproj 在 PocketPal 当前 bundled llama.cpp/rnllama 中,视觉计算 buffer reserve 失败,然后 allocator 没正确处理失败,最终在 ggml_gallocr_alloc_graph 里直接崩溃。

这和 llama.cpp 现在公开的一个 Bug 几乎完全一致。它的调用栈就是:

ggml_gallocr_alloc_graph → ggml_backend_sched_alloc_graph → clip_image_batch_encode → mtmd_encode

跟你的栈一模一样。那个 issue 解释得很清楚:前面的 ggml_backend_sched_reserve() 如果失败,代码没有正确检查返回值,后面继续使用空 buffer,于是最终 SIGSEGV。(GitHub)

但为什么 Gemma 能跑,Qwen 不行?

因为两者视觉部分的内存需求并不一样。

你截图里 PocketPal 对 Gemma 4 E2B 给出的估算,2K context 总内存大约 4.5GB。

而 Qwen3.5-9B,仅 GGUF 本体就大很多。例如官方 Unsloth GGUF:

Q4_K_M:约 5.68GB

UD-Q4_K_XL:约 5.97GB

Q5_K_M:约 6.58GB

再加 mmproj F16:约 918MB

也就是说还没计算视觉临时 buffer、KV cache、runtime 和图像 tensor,Qwen 已经大约 6.6~7GB 这一档了。(Hugging Face)

所以完全可能发生:

Gemma:

模型 + mmproj + vision compute buffer < 可安全分配范围

→ 正常。

Qwen3.5-9B:

模型 + 918MB mmproj + vision compute buffer

→ 某一次 reserve() 失败

→ PocketPal/llama.cpp 没优雅地报“OOM”

→ 直接在 gallocr_alloc_graph 崩。

这里有一个很重要的区别:

系统显示“9.5GB 可用”不能证明这次 reserve 一定成功。

Android 那个“可用”数字包含大量可回收页/cache,而且 ggml backend 需要的是特定 buffer 分配。它不等于“App 此刻还能稳定 malloc 9.5GB”。

所以现在我不会再说:

“肯定不是内存。”

而应该说:

不像普通的系统 RAM 耗尽,更像 Qwen3.5 视觉计算 buffer 达到某个临界点,然后触发了 llama.cpp allocator 的 Bug。

这两件事可以同时成立。

还有一个证据非常强

PocketPal 官方已经有用户报告:

Snapdragon + 16GB + Android 16 + Qwen3.5-9B

在近期 PocketPal 更新之后出现硬崩,并且:

换量化也崩;

CPU 也崩;

清后台也崩;

小模型正常;

加载视觉 mmproj 后,发送图片立即崩。

几乎就是你现在的情况。(GitHub)

所以现在我给你的判断已经可以提高到:

70%:PocketPal/llama.cpp 当前 Qwen3.5 多模态 allocator/regression 问题

25%:Qwen3.5-9B 视觉 buffer 在16GB环境刚好触发这个 Bug

5%:手机/高通本身

而且现在没必要换24GB手机来验证。因为即使24GB可能让这个 reserve 成功,从而“绕开”Bug,也不能证明原来的16GB手机硬件不行。

最干净的验证方法反而是:

同一台 K90,直接用最新版原生 llama.cpp 的 llama-mtmd-cli 跑同一套 Qwen3.5-9B + mmproj。

如果原生最新版能识图,而 PocketPal崩:

100%基本锁定 PocketPal bundled llama.rn/llama.cpp 版本问题。

而如果最新版 llama-mtmd-cli 也在同一位置崩,那么就是上游 llama.cpp/Qwen3.5 vision allocator 问题。

你这次 Gemma 4 E2B 成功识图其实是非常关键的对照实验,已经证明你的 K90 16GB 本身是能跑本地视觉模型的。

by ChatGPT