版块:机器视觉

"把带视觉的大模型塞进盒子/机器人"的项目最近特别多。这篇按真实移植流程整理:量化、运行时、多模态预处理和内存调度四道坎,每一道都讲"卡在哪、怎么过去"。

坎 1:模型选型——先分清你是要"VLM"还是"VLM 级体验"

常见目标配置:2B~4B 参数级 VLM(视觉编码器 ViT + 语言模型),跑在 8~16 GB LPDDR 边缘盒子上。选型时看三点:

1. 是否有官方 ONNX/TensorRT/高通 QNN/瑞芯微 RKNN 适配先例:官方放出了量化 demo 的模型,移植周期能砍一半;
2. 视觉编码器是不是 CLIP/SigLIP 家族:算子覆盖率是各 NPU 工具链成熟度的短板位,SigLIP 的 attention-pool 经常要落 CPU;
3. 语言主干的上下文长度:端侧 KV 上限决定你实际"能看多大图 + 几句话历史"。

坎 2:量化——W8A16 起步,别一上来就 INT4

- 权重量化 W8A16:最稳的第一步,精度损失通常可接受(公开评测掉 1~2 个点以内),内存直接减半;
- W4A16(INT4 权重):再省一半,但反量化查表 + group scale 对 NPU 不友好,很多工具链会退化成 CPU 算力活;
- 激活量化 W8A8 慎用:大模型激活里 outlayer 极端值众所周知,视觉 token 入语模型那一段尤其脆弱。要做就按 SmoothQuant 类先平滑再量化,并且对首层/最后一层保留混合精度;
- 验证手段:端侧跑 MMMU/MMStar 缩小版(几百题)+ 你们自己的真实场景集,别只看官方评测表。

坎 3:运行时与内存峰值——坑都在"图很小、系统很大"

1. 视觉塔预处理(resize/normalize)别放主线程,用 RGA/PPA 类 2D 引擎做;
2. KV Cache 预留:语言解码阶段每 token 追加内存,峰值 = 权重 + 最大 KV + 图像中间激活,三项分别实测,只看权重会爆;
3. NPU 张量维度对齐:ViT 的 336×336 图像切 patch 后 token 数经常不是 64 的倍数——pad 到对齐,别指望编译器给你优化;
4. 首 token 延迟(TTFT)优化重点是 Prefill:图像 token 多时,端侧动辄几百 ms 起步,可以考虑视觉 token 压缩(Q-Former / resampler 类结构)或降图像分辨率策略,产品上"先文字后图像细答"体感也能救命。

坎 4:多轮与工具调用的工程闭环

- 端侧对话历史管理:KV 滑动窗口 + 摘要压缩两选一,别做无限缓存;
- function calling 的解析层放 CPU 侧,用约束解码(EBNF grammar + logits masking)保证 JSON 合法,端侧模型没有这个保护时业务层要写一堆兜底正则;
- 掉电与热保护:嵌入式没显存 EEC,高温降频后 token/s 波动大,控制层加"温度档位-并发策略"联动。

一个参考量级(公开口径估算,供校准预期)

6B W8A16、512 图像 token、4K 上下文、RK3588 级平台:Prefill 1~2 s、Decode 4~8 token/s 量级——"能演示"到"能商用"中间就是这些几百毫秒的账。

做过端侧 VLM 落地的来打个卡:你们最后用的 W4 还是 W8?视觉编码器落在 NPU 还是 GPU?