Skip to content

多模态处理 — 练习

练习 1:图像 token 计数

假设 LLaVA 模型使用 CLIP-ViT-L/14 作为 vision encoder:

  • 每张图像被分割为 14×14 的 patch
  • 输入分辨率 336×336
  • 每张图有 1 个 CLS token

计算:

  1. 每张图像产生多少个 visual token?
  2. 如果 batch 中有 4 个请求,分别有 0、1、2、4 张图,总 token 数是多少(假设每请求 100 文本 token)?
参考答案
  1. Patch 数 = (336/14) × (336/14) = 24 × 24 = 576 个 patch token + 1 个 CLS token = 577 个 visual token。

  2. 总 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:编码器缓存策略

分析以下场景中的编码器缓存效果:

  1. 多用户上传同一张图片询问不同问题
  2. 视频推理中同一视频的多个帧
  3. 每个请求都使用不同的图片
参考答案
  1. 极高效:所有请求共享同一份视觉特征。缓存命中率 100%(除第一个请求)。

  2. 部分有效:同一视频的不同帧需要分别编码。但如果使用 prefix caching,共享的视频帧可以复用 KV 缓存。

  3. 无效:每个请求的图片不同,缓存命中率接近 0。缓存反而增加了内存开销。

拓展挑战

  • 阅读 vllm/multimodal/processing/processor.py,理解多模态输入的完整处理流程
  • 分析 encoder_cache_manager.py 的缓存淘汰策略
  • 研究如何为新模型添加多模态支持