Appearance
多模态处理 — 练习
练习 1:图像 token 计数
假设 LLaVA 模型使用 CLIP-ViT-L/14 作为 vision encoder:
- 每张图像被分割为 14×14 的 patch
- 输入分辨率 336×336
- 每张图有 1 个 CLS token
计算:
- 每张图像产生多少个 visual token?
- 如果 batch 中有 4 个请求,分别有 0、1、2、4 张图,总 token 数是多少(假设每请求 100 文本 token)?
参考答案
Patch 数 = (336/14) × (336/14) = 24 × 24 = 576 个 patch token + 1 个 CLS token = 577 个 visual token。
总 token 数:
- 请求 A(0图):100 tokens
- 请求 B(1图):100 + 577 = 677 tokens
- 请求 C(2图):100 + 577×2 = 1254 tokens
- 请求 D(4图):100 + 577×4 = 2408 tokens
- 总计:4439 tokens
注意:这与纯文本批处理(4×100=400 tokens)差了 10 倍,对调度和显存管理有重大影响。
练习 2:编码器缓存策略
分析以下场景中的编码器缓存效果:
- 多用户上传同一张图片询问不同问题
- 视频推理中同一视频的多个帧
- 每个请求都使用不同的图片
参考答案
极高效:所有请求共享同一份视觉特征。缓存命中率 100%(除第一个请求)。
部分有效:同一视频的不同帧需要分别编码。但如果使用 prefix caching,共享的视频帧可以复用 KV 缓存。
无效:每个请求的图片不同,缓存命中率接近 0。缓存反而增加了内存开销。
拓展挑战
- 阅读
vllm/multimodal/processing/processor.py,理解多模态输入的完整处理流程 - 分析
encoder_cache_manager.py的缓存淘汰策略 - 研究如何为新模型添加多模态支持