多模态推理账:视觉编码、序列压缩与成本结构
多模态模型(看图、看视频、听语音)推理的核心不是"多了个编码器",而是视觉输入被 token 化后,序列长度与 KV 成本暴涨。本文把多模态推理的 token 化账、KV 账与工程优化讲透,衔接 KV 缓存压缩账。
1. Token 化账:一张图 = 多少个 token
| 输入 | 典型 token 数 | 说明 |
|---|---|---|
| 纯文本 1K 字 | ~1K token | 基线 |
| 一张 224² 图 | 256 token(patch 14²) | 每 patch 一个 token |
| 一张高清图 | 1K+ token(切片/高分辨率编码) | 分辨率越高越贵 |
| 1 分钟视频(8fps) | ~12K+ token | 帧 × patch |
判断:视觉输入的 token 化是把成本放大的根源——一张高清图 ≈ 千级 token,一分钟视频 ≈ 万级 token,KV 与预填充算力同步放大(见 推理资源账)。
2. 架构账:编码器 + 投影 + 语言模型
图像/视频 ── 视觉编码器(ViT/自研)── 投影层(MLP/Q-Former)── LLM
语音 ────── 音频编码器 ────────────── 投影 ──────────────── LLM- 视觉编码器:把像素变成 patch 特征(ViT 系);
- 投影层:把视觉特征映射到 LLM 的词向量空间(MLP 或 Q-Former 压缩);
- LLM:与文本共用同一套权重,做跨模态推理。
判断:投影层是"压缩"的第一层——Q-Former 类方案用少量 learned query 压缩视觉 token,是控制序列长度的架构级手段。
3. 成本账:多模态推理的三大放大项
| 成本项 | 放大来源 | 优化手段 |
|---|---|---|
| 预填充算力 | 视觉 token 多,attention 平方增长 | 视觉 token 降采样/合并 |
| KV 显存 | 视觉 token 长期驻留 | 视觉 KV 单独量化/缓存 |
| 视觉重算 | 同一图多次推理重复编码 | 图像 token 缓存复用 |
判断:多模态推理的优化重点与文本推理不同——先压视觉 token 量,再压 KV,最后做图像级缓存(同一张图配不同问题,只编码一次)。
4. 工程优化清单
- 输入级:按任务降分辨率/降帧率——能看清就行,别一味上高清;
- 架构级:用 Q-Former 类投影压缩视觉 token 数;
- 推理级:视觉 KV 与文本 KV 分开管理,视觉段可先量化/可过期;
- 服务级:图像/视频编码结果按内容哈希缓存,相同视觉输入复用;
- 评测级:多模态任务实测"单图问答"与"视频问答"的 token 与延迟基线(见 验收基线)。
5. 可复算 Python:多模态成本估算
python
def mm_cost(n_img, tokens_per_img, n_text_tokens, kv_bytes_per_token):
"""多模态请求的 KV 显存(GB):视觉 token 主导"""
vis = n_img * tokens_per_img
tot = vis + n_text_tokens
return round(tot * kv_bytes_per_token / 1e9, 3), vis
mm_cost(n_img=5, tokens_per_img=512, n_text_tokens=500, kv_bytes_per_token=0.128)
# 总 KV 0.358 GB,其中视觉 0.328 GB(占 92%)→ 视觉 token 是绝对大头6. 交付清单
- 上线前先量化"单图/视频问答"的 token 账,明确成本基线;
- 视觉输入按任务分级降采样,别默认最高清;
- 视觉 token 用投影压缩 + 推理时降采样/合并;
- 视觉 KV 单独量化、按内容缓存编码结果;
- 监控多模态请求的 KV 占比,超阈值再压视觉侧(见 llm-serving-sre)。
本文为本站整理思考后撰写,用于知识库学习交流;公式与算例为本站自行推导整理,具体版本与实测数据以现场为准。