结论:不推荐作为 LLM 主力推理单元。8295 的 Adreno 695 GPU 优先留给图形渲染(仪表/中控/AR-HUD/多屏),GPU 推理只能作为 CPU 的备选降级路径,不要主动抢占。 这不是"保守派"观点,而是 llama.cpp 社区在骁龙平台上的实测共识------OpenCL 跑 LLM 的解码速度普遍比纯 CPU 还慢 40~50%。
一、实测数据打脸"GPU 比 CPU 快"的直觉
来自 llama.cpp 社区在骁龙 8 Gen 2(Adreno 740,比 8295 的 Adreno 695 更新一代)上的公开基准,Llama 3.2 3B Q4_K_M:
| 后端 | Prefill (pp512) | 解码 | 结论 |
|---|---|---|---|
| CPU(6 线程) | 30.5 tok/s | 9.8 tok/s | 基准 |
| OpenCL (GPU) | 14.5 tok/s | 5.9 tok/s | 比 CPU 慢 40% |
| HTP (NPU v73) | 28.5 tok/s | 8.4 tok/s | 略慢于 CPU |
| 这份数据的结论和你的直觉相反:就算是最新的 Adreno 740,OpenCL 跑 LLM 也是全面输给 CPU。而在 8 Gen 3 上的另一份实测(2026 年 5 月,社区成员用 llama.rn + OpenCL + Hexagon 双后端测试)直接写明:"GPU is detected and selected correctly, but performance is identical to CPU-only runs"------即 GPU 后端被正确加载,性能却和纯 CPU 没区别。 | |||
| Adreno 695(8295)比 Adreno 740 还要老一代,只会更糟。 |
二、为什么 GPU 跑 LLM 反而慢
有三个结构性原因,在 8295 上尤其致命:
1. 内存带宽瓶颈 + 共享内存的"假优势"
LLM 解码是 Memory-Bound,每生成一个 token 要把全部权重读一遍。Adreno 695 和 CPU 共享同一块 LPDDR5,"GPU 带宽高"的优势根本不存在------它只是多了一个读内存的竞争者 ,还要额外付出 host↔GPU 数据拷贝开销(llama.cpp 的 OpenCL 后端在某些 Adreno 驱动上必须拷贝数据,进一步拖慢速度)。
2. llama.cpp 的 OpenCL 后端对 Adreno 优化不充分
高通 2025 年发布的专用 OpenCL backend 优化幅度有限,社区实测显示在多数 Adreno 上 "the more GPU layers offloaded, the slower the speed becomes"------显式关闭 GPU 卸载(-ngl 0)反而更快。
3. 最致命:车机上 GPU 有更高优先级的任务
8295 的 Adreno 695 需要同时支撑仪表渲染(QNX + 安全岛)、中控 Android 界面、AR-HUD 投影、多屏渲染(最多 6 块 4K 屏)。让 GPU 跑 LLM 意味着:
- 帧率抢占:LLM 解码是持续负载,会把仪表刷新率拉低,涉及 ASIL 功能安全;
- 功耗飙升:GPU 满载推理功耗 3~5W,叠加渲染后整机功耗可能突破热设计;
- QoS 无保障 :Android 的 GPU 调度对"车机仪表渲染"和"LLM 推理"一视同仁,没有优先级隔离。
这是 NPU 和 CPU 都没有的问题------NPU 有独立的 Hexagon 时钟域和优先级仲裁,CPU 可以通过 cgroup/taskset 隔离大核。
三、推荐优先级:NPU > CPU > GPU(GPU 只做降级备选)
基于上述实测和工程约束,8295 上的推荐优先级是:
| 优先级 | 计算单元 | 承担任务 | 原因 |
|---|---|---|---|
| ① 首选 | NPU (HTP v68) | 意图槽位 BERT、DMS/OMS、VLM ViT 编码、唤醒词 | 走 QNN 常规 HTP 后端,毫秒级,功耗最低 |
| ② 次选 | CPU 大核 | LLM 主体(1.2~2B INT4)、Tokenizer、业务调度 | 唯一稳定的 LLM 路径,可用 cgroup/taskset 隔离 |
| ③ 备选 | GPU (Adreno 695) | LLM 降级路径(CPU 失败时) | OpenCL 比纯 CPU 还慢,仅作"能跑就行"的兜底 |
| ✗ 不推荐 | GPU 作为 LLM 主力 | --- | 实测比 CPU 慢 + 抢占仪表渲染 + 功耗不可控 |
四、什么时候可以考虑用 GPU
虽然不推荐作为主力,但在以下场景可以考虑启用 GPU 推理:
- CPU 大核全部被占用 (比如 LLM 正在解码 + 同时在做 ASR),GPU 作为溢出算力跑部分层(用
--n-gpu-layers分层卸载),但一定要实测确认不会拖慢整体速度。 - 用 MLC-LLM 的 Vulkan backend:MLC-LLM 的 Vulkan 后端对 Adreno 的优化比 llama.cpp 的 OpenCL 后端更成熟,在某些 Adreno 上能跑出与 CPU 相当或略好的速度,但依然不足以反超。
- 跑非 LLM 的 CNN/视觉模型:QNN 的 GPU backend(走 OpenCL/Vulkan)在 Adreno 上跑轻量 CNN(如 YOLO-nano、人脸检测)比 CPU 快,这是合理的用法。
五、给你的实操建议
- 默认路径:LLM 走 CPU(llama.cpp / MNN-LLM,INT4 量化,大核隔离),NPU 走 QNN 跑感知类模型,GPU 交给渲染框架。
- 如果一定要用 GPU 推理 :先用
llama-bench在 8295 EVM 板上跑 CPU/OpenCL/Vulkan 三条路径的实测数据,确认 OpenCL 不掉速再启用,不要想当然。 - 别被"满血 GPU"宣传误导 :Adreno 695 的 FLOPS 数字看着好看,但 LLM 是带宽瓶颈不是算力瓶颈,FLOPS 在这里没有意义。
一句话:8295 的 GPU 是"渲染专用单元",把它留给仪表、中控、AR-HUD 和多屏才是正解;LLM 推理交给 CPU(主体)+ NPU(感知和前置 NLU),才是 2026 年所有 8295 量产车型在工程实践中达成的共识分工。