多模态模型的服务
文本服务器接收词元 ID。多模态服务器则可能先要获取、解码、缩放、采样、编码和投影图像、视频或音频片段。语言模型预填充开始之前,这些阶段就已经引入了各自的队列和失效方式。它们还可能产生数百乃至数千个特征,具体数量取决于媒体内容与预处理策略。因此,只看提示词长度不足以完成接纳控制。
本章讨论两类媒体格式相同、服务方式却差异很大的工作负载。在媒体输入服务中,编码器向语言模型提供证据,语言模型随后生成文本。在媒体生成服务中,模型通过迭代或自回归过程生成图像或视频。前者延伸了本部分已经建立的服务路径,后者需要另一套成本模型与调度器。
从融合契约算起
架构决定媒体特征存放在哪里,以及由哪类缓存承担成本。两种常见契约可以说明,为何不存在通用的“视觉词元”成本 (Qiu et al. 2025)。
| 融合契约 | 进入语言主干的内容 | 文本生成期间的持久状态 | 主要服务后果 |
|---|---|---|---|
| 仅解码器融合(也称投影前缀或早期融合) | 连接器把媒体特征映射到语言模型宽度,再插入输入嵌入。LLaVA 是典型例子 (Liu et al. 2023)。 | 插入位置通常会在与文本位置相同的缓存分配中产生自注意力键和值。它们是连续嵌入,不是分词器生成的词表 ID。 | 媒体长度会增加语言模型预填充、自注意力 KV 内存,以及每个解码步读取的 KV 字节数。 |
| 交叉注意力融合 | 文本仍是自注意力序列。选定的层通过交叉注意力读取独立媒体内存。Flamingo 会先把每张图像重采样为 64 个特征 (Alayrac et al. 2022)。 | 文本自注意力 KV 与媒体交叉注意力状态彼此独立。媒体成本取决于交叉注意力层数与缓存实现。 | 媒体不一定占用普通文本位置,但编码、交叉注意力计算和持久媒体键值状态仍然消耗时间与内存。 |
离散图像或音频编码带来了另一种表示选择,却没有消除这个架构问题。编码 ID 经过查表后同样会变成连续向量,模型仍须规定这些向量进入自注意力,还是保存在独立内存中。第 15 章 会展开这些模型设计。本章的重点是运维结论:容量核算取决于架构。
从预处理后的输入核算成本
对于仅解码器融合,设最终输入长度为
这里, 是第 个媒体项, 是媒体项数量, 是解码、缩放、裁剪、帧采样与填充策略, 标识媒体编码器版本, 标识连接器、合并器或重采样器, 返回单个媒体项插入的特征数量, 与 分别计算文本位置和模型特定的分隔位置。每个符号都是部署参数。只计算原始图块数,而不提供 、 与 ,不足以预测语言模型看到的序列。
如果全部 个位置都保留在自注意力中,其 KV 分配为
其中, 是保存自注意力 KV 状态的语言模型层数, 是键值头数量, 是单个头的宽度, 是每个缓存标量使用的字节数,系数 2 代表键和值。这条公式适用于投影前缀契约。交叉注意力模型需要单独计算媒体键值状态,而且只计入真正包含交叉注意力的层,不能把每个媒体特征都当作普通文本前缀收费。
首词元时间也包含更多阶段:
其中,每个 都是对应阶段的实际耗时。部分阶段可以重叠,所以这是一份上层核算模型,并不承诺所有系统都按顺序执行。不过,它仍比单一的“预填充延迟”更有解释力,因为它能显示慢请求究竟是在等待编码器、跨越网络边界,还是占用了语言主干。
这里,语言预填充的成本不只是随媒体长度线性增长。稠密层的工作量大致与 成正比,稠密自注意力则包含合并序列长度的二次项。优化内核会改变常数与内存流量,不会抹去这项区别。进入解码后,每个新文本查询仍要读取保留的媒体状态:仅解码器融合从自注意力 KV 缓存读取,交叉注意力融合则沿模型的交叉注意力路径读取。
根据实际策略推导视觉长度
对于固定网格,设预处理后的高度与宽度为 和 ,图块尺寸为 ,则原始图块数为
其中, 与 是缩放、裁剪或填充之后的尺寸, 与 是图块的高度和宽度。向上取整对应“把边缘不足一个图块的区域补齐”的策略;若策略会拒绝尺寸不整除的输入,或先做中心裁剪,结果就不同。语言模型实际接收的数量还可能去掉类别特征、加入分隔符或全局视图、拼接多个切片、合并相邻特征,或者用固定数量的重采样查询替换整个网格。
例如,LLaVA-1.5 使用输入为 336 像素的 CLIP ViT-L/14 编码器。去掉类别特征后, 的图块网格会贡献 576 个投影图像位置 (Liu et al. 2024)。这是模型特定的结果,并非 CLIP 或 336 像素图像的通用属性。
下面的可运行示例只描述这一种固定网格契约。它假设尺寸能够整除,不含类别位置和分隔位置,不使用切片或合并,并把每个图块都插入语言模型的全部 32 层。示例显式使用分组查询注意力的头尺寸,并以二进制 MiB 报告结果。
def visual_tokens(width, height, patch=14):
if width <= 0 or height <= 0 or patch <= 0:
raise ValueError("dimensions and patch must be positive")
if width % patch or height % patch:
raise ValueError("this fixed-grid example requires divisible dimensions")
return (width // patch) * (height // patch)
def kv_mib(tokens, layers=32, n_kv_heads=8, head_dim=128, bytes_per_value=2):
if min(tokens, layers, n_kv_heads, head_dim, bytes_per_value) <= 0:
raise ValueError("KV dimensions must be positive")
kv_bytes = 2 * layers * tokens * n_kv_heads * head_dim * bytes_per_value
return kv_bytes / 2**20
for width, height in [(336, 336), (672, 672)]:
tokens = visual_tokens(width, height)
print(f"{width}x{height}: {tokens:4d} visual tokens, {kv_mib(tokens):5.1f} MiB KV")
真实系统会用多种机制改变这个数量:
- 固定网格让成本容易预测,却可能在缩放时抹掉小号文字和小物体。
- 切片通过编码多个受支持的裁剪区域来保留更多空间细节。它是训练得到的模型能力,不是服务器可以随意添加的操作;全局视图、重叠、分隔符与填充都会让最终数量依赖具体模型。
- 动态分辨率让特征数量随长宽比和输入尺寸变化。Qwen2-VL 同时使用 视觉合并和多模态旋转位置编码,所以原始图块数与语言主干接收的数量并不相同 (Wang et al. 2024)。
- 空间合并或 pixel shuffle 会在投影前把相邻空间特征折叠进通道,从而缩短序列,但这本身不能证明细节已经丢失,训练得到的连接器决定保留什么。InternVL 1.5 把这类连接器与动态切片结合起来 (Chen et al. 2024)。
- 固定预算重采样器把可变的编码器网格映射到选定数量的特征。这样,每个媒体项的语言模型成本变得可预测,但编码器与重采样器仍需处理更大的输入 (Alayrac et al. 2022)。
- 词元剪枝会在主干的部分层之后删除特征。例如,FastV 在所评估视觉语言模型的第 2 层使用基于注意力的策略,并报告了更低的 FLOPs (Chen et al. 2024)。前面的层仍为完整序列付费,只有后续层才会变便宜。注意力权重无法证明因果重要性,因此激进剪枝必须在 OCR、图表、小号文字和小物体任务上测试,不能只凭平均视觉问答分数接受。
视频和音频还增加了时间这一长度轴。视频策略可能抽取帧、形成时空图块,或跨时间合并;音频策略可能把波形或频谱图切成编码器帧。因此,时长、采样率、帧率、时间步长与单请求媒体限制,都应和图像分辨率一起进入容量模型。这些策略都无法从用户的文本词元数推断出来。
训练完成的模型规定了有效的预处理与连接器选项,服务层只能在这份契约内选择限制。分辨率、切片、帧数、时长与降采样规则,共同决定呈现给主干的视觉词元或音频特征数量。这既是服务成本决策,也是质量决策。
调度资源向量,而不是提示词长度
一份有用的接纳记录,要在请求进入任何队列之前描述其工作量。它至少应包含一个资源向量:媒体字节、解码像素、图像数量、视频帧数或音频时长,预计编码器工作量、投影词元数、文本词元数、输出词元上限,所需模型与适配器,以及适用的延迟等级。系统应在分配大型解码缓冲区或加速器内存之前检查这些限制。
请求随后会经过两类不同的组批问题:
- 媒体侧适合使用形状分桶。把兼容的分辨率、帧数或音频长度放在一起,可以减少填充浪费,并让编码器内核高效运行。不能让单个大媒体项迫使批次中所有项目都填充到同一尺寸。
- 语言侧按总预填充与 KV 需求组批。系统必须按投影词元数与输出词元上限预留足够缓存,也可以把很长的多模态预填充分块,避免它长期独占引擎。
编码器与语言模型使用独立队列,可以暴露各自的积压情况,还能让接纳控制与公平策略阻止一波高分辨率请求为短文本或小图请求造成队首阻塞。生产流量通常呈长尾并带有突发性,平均值会掩盖真正决定尾延迟的请求 (Qiu et al. 2025)。
同机部署可以让媒体特征留在同一块加速器上,避免网络传输,但编码器工作可能干扰预填充与解码。拆分部署让编码器副本独立扩缩容,也能保护语言层不受模态流量突发影响;代价同样明确:特征张量必须跨越另一道服务边界进行序列化、传输、路由与失效处理。传输量会随特征数量和宽度增长,而容量不足的编码器池或网络只会成为新的队列。
出于这个原因,EPD 系统会采用编码、预填充与解码分离。2025 年一项 ICML 研究报告称,三类阶段具有不同的资源特征,适合独立放置 (Singh et al. 2025)。vLLM 后来提供了原生编码器拆分,并在四张 A100 上的特定 Qwen3-VL 基准中报告约 2 到 2.5 倍有效吞吐量 (vLLM Multimodal Workstream 2025)。这些数字证明了机制有效,不是对其他模型、工作负载或网络的容量承诺。
缓存真正想跳过的阶段
“图像缓存”可能指三种不同对象。它们使用不同缓存键,省掉的工作也不同。
| 缓存 | 保存的对象 | 命中时跳过 | 必须纳入身份的内容 |
|---|---|---|---|
| 处理器缓存 | 解码并规范化后的媒体,或处理器输出 | 获取、解码、缩放、帧采样或其他 CPU 侧处理 | 规范媒体身份、解码库与预处理器版本、策略参数 |
| 编码器输出缓存 | 编码器和连接器边界产生的媒体嵌入 | 编码器执行;除非前缀同时命中,否则语言模型预填充仍要运行 | 处理器身份,加上编码器版本、投影器版本、精度与布局 |
| KV 前缀缓存 | 已完成的语言模型 KV 块 | 精确缓存前缀块的预填充 | 模型与适配器版本、精确的前缀顺序和位置、媒体派生嵌入或其稳定身份、缓存格式与块对齐 |
例如,vLLM 会按多模态媒体项哈希与引用计数管理编码器输出,并与语言模型前缀缓存分开 (vLLM Project 2026)。这种区分很重要:编码器输出命中并不意味着 KV 前缀缓存命中。系统提示词、适配器、预处理规则或投影器改变时,可能只让其中一种缓存失效,另一种仍可使用。
缓存键还必须包含租户范围、授权决定、防碰撞比较、保留策略与按版本失效。对话中的文档或反复出现的视频很适合复用,但全局复用不能泄露另一租户曾提交过同一份私有媒体。在为大缓存预留资源之前,应先用真实工作负载测量命中率和实际节省的阶段耗时。
端到端验证媒体输入服务
使用能够保留模态组合、媒体项数量、分辨率、时长、文本长度、输出长度与到达突发的回放流量,对完整请求路径做性能分析。报告 p50、p95 与 p99,而不是一个平均值。
对于生成语言的请求,至少记录:
- 入口与解码时间、预处理时间、编码器排队与执行时间、连接器或传输时间、语言侧排队时间、首词元时间与词元间延迟;
- 解码像素数或帧数、投影词元数、峰值编码器内存、峰值 KV 内存、被拒绝或降采样的请求,以及各阶段的加速器利用率;
- 处理器缓存命中率、编码器缓存命中率与 KV 前缀缓存命中率,同时报告保留字节数和实际节省的时间;
- 同等负载下的有效吞吐量与尾延迟,既要报告全部流量,也要分别报告每种模态和尺寸分桶;
- 在产品实际使用的 OCR、图表、小物体、多图、视频与音频任务上,评估每种已上线分辨率、帧数、合并、重采样或剪枝策略的回答质量,并与完整细节基线比较。
这套测量可以避免两种常见错误:仅凭单个内核更快就宣布优化有用,以及因为聚合基准掩盖了细节敏感案例,就宣布压缩安全。
媒体生成是另一条服务路径
不能把媒体输出硬套进媒体输入的服务模型。常见的潜变量图像流水线包含文本编码器、迭代去噪器或流模型,以及潜变量解码器 (Rombach et al. 2022)。其他系统也可能自回归生成离散视觉编码,或预测从粗到细的块。调度器必须知道自己运行的是哪种契约。
对于迭代潜变量模型,一种有用的延迟分解是
这里, 是求解器步数或神经函数求值次数, 标识某一步, 是该步处理的潜变量状态, 是该步需要的去噪器求值次数,包括所有未融合的引导分支, 覆盖文本或参考媒体条件处理, 是给定形状和批量下实测的去噪器时间, 把最终潜变量转换为媒体, 则包含输出编码、存储或交付。这项求和解释了减少步数为何有帮助,却没有声称步数是唯一成本。
分辨率和时长会改变潜变量序列长度。对于图像大小为 、自编码器压缩率为 、Transformer 图块大小为 的二维潜变量,潜变量词元数为
其中, 与 是输出像素尺寸, 与 是自编码器的空间压缩系数, 与 是去噪器的潜变量图块尺寸, 是每次去噪器求值处理的潜变量词元数。视频在时间压缩和图块化后还要乘上时间项。稠密全局注意力可能引入 的二次项,局部、分解式或稀疏注意力则会改变这一项。
下面的可运行示例为一张 1024 像素正方形图像计算透明的词元遍历代理量,假设每个空间轴压缩 8 倍、潜变量图块为 ,并使用两个引导分支。它不是 FLOPs 估算,因为没有计入注意力形状、模型宽度、固定阶段、通信、稀疏性、组批和利用率。
def latent_tokens(width, height, compression=8, patch=2):
if min(width, height, compression, patch) <= 0:
raise ValueError("all dimensions must be positive")
stride = compression * patch
return ((width + stride - 1) // stride) * ((height + stride - 1) // stride)
def token_pass_proxy(tokens, steps, guidance_branches=2):
if min(tokens, steps, guidance_branches) <= 0:
raise ValueError("tokens, steps, and branches must be positive")
return tokens * steps * guidance_branches
tokens = latent_tokens(1024, 1024)
base = token_pass_proxy(tokens, 50)
fast = token_pass_proxy(tokens, 4)
print(f"latent tokens: {tokens}")
print(f"50-step proxy: {base} token-passes")
print(f" 4-step proxy: {fast} token-passes")
print(f"denoiser-only ratio: {base / fast:.1f}x")
渐进式蒸馏、一致性模型和对抗式扩散蒸馏表明,经过相应训练的模型可以把神经函数求值次数从很多步降到少数几步 (Salimans and Ho 2022; Song et al. 2023; Sauer et al. 2024)。结果是一个新的质量与延迟取舍点,不是免费的运行时开关。采样器、引导方式和步数都可能改变输出质量,必须一起评估。
重复去噪也带来了其他服务机会。模型、形状与迭代次数相同的兼容请求可以组批,步数不同则可能造成队首阻塞或类似填充的浪费。调度器应在迭代之间支持取消,让已经放弃的任务停止占用加速器时间。在单个请求内,DeepCache 会跨相邻步骤复用选定的 U-Net 特征 (Ma et al. 2024),DistriFusion 则用前一步的旧上下文把高分辨率样本分散到多台设备 (Li et al. 2024)。两者都是带有质量与硬件假设的特定方法近似,不是通用的 KV 缓存行为。
传统双向去噪器会反复更新整个潜变量,因此无法像自回归文本那样产生彼此独立、已经定稿的词元。服务仍然可以解码并流式传输预览,但预览频率会增加解码器工作,而且带噪声的中间图像不是完成结果。因果视频又有所不同:CausVid 从左到右生成帧块,并使用 KV 缓存,这说明因果媒体生成可以提供流式契约 (Yin et al. 2025)。
对于媒体输出,应测量排队时间、首次预览延迟、最终延迟、神经函数求值次数、引导分支、每份输出占用的加速器秒数、取消浪费、输出编码与出口传输,以及每种步数、分辨率、时长、采样器和组批策略下的质量。质量比较必须使用匹配的提示词、随机种子与设置。便宜却达不到产品质量目标的输出,不算服务改进。
- 固定还是可变的媒体预算? 固定重采样便于容量规划。动态分辨率与切片保留更多输入细节,却会带来长尾更重的工作负载。没有一种策略同时适合文档、自然图像、视频与音频。
- 同机部署还是拆分部署? 拆分可以隔离不同阶段的相互干扰,并允许独立扩缩容;同机部署避免传输,也能更充分地利用闲置容量。答案取决于实测阶段组合与网络,不取决于架构图本身。
- 在看到提示词之前还是之后压缩? 提前合并与重采样能够省掉最多语言模型工作,却无法利用深层提示词上下文。后期剪枝可以感知查询,但要为前面的层付费,还会让缓存形状更复杂。
- 一套服务引擎还是两套? 输入型视觉语言模型、迭代图像生成器与因果视频可以共享内核和机队管理,但它们的接纳单位、组批约束、进度语义与服务目标仍不相同。
运行准则
把媒体策略当作服务契约的一部分。公开接受的格式、字节与尺寸限制、图像和帧数量、时长、缩放或采样行为、词元或特征上限、降采样与拒绝方式,以及输出质量档位。调度器执行的契约必须与容量测试使用的契约相同。
重点不在于每增加一个像素都不好,而在于媒体能力有一条明确路径,依次经过预处理、编码器工作、持久状态、排队与质量。当这些成本项都可见时,编码器放置、图像前缀缓存、分辨率限制、剪枝和减少步数就成为可以测试的工程选择,而不是口号。
延伸阅读
- Dosovitskiy et al., “An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale,” 2021. arXiv:2010.11929ViT 表明,将纯 Transformer 直接应用于图像块序列,在足够规模的预训练后,可在图像分类任务上达到或超越 CNN 的性能。
- Alayrac et al., “Flamingo: a Visual Language Model for Few-Shot Learning” (Perceiver Resampler 与固定的视觉 token 预算), 2022. arXiv:2204.14198Flamingo 是一个视觉语言模型(VLM)系列,通过 Perceiver Resampler 和门控交叉注意力桥接冻结的视觉与语言模型,在 16 项图像和视频理解任务上实现少样本学习。
- Liu et al., “Visual Instruction Tuning” (直接投影进序列), 2023. arXiv:2304.08485LLaVA 通过线性投影将 CLIP 视觉编码器接入大语言模型,并在 GPT-4 生成的多模态指令数据上进行视觉指令微调,构建通用视觉语言模型助手。
- Wang et al., “Qwen2-VL: Enhancing Vision-Language Model's Perception of the World at Any Resolution” (朴素动态分辨率与多模态旋转位置编码), 2024. arXiv:2409.12191Qwen2-VL 通过动态分辨率机制和多模态旋转位置嵌入(M-RoPE)构建视觉语言模型(VLM)系列(2B、8B、72B),支持任意分辨率的图像与视频理解,在多模态基准上与 GPT-4o 性能相当。
- Chen et al., “InternVL: Scaling up Vision Foundation Models and Aligning for Generic Visual-Linguistic Tasks” (把视觉编码器扩展到六十亿参数), 2024. arXiv:2312.14238InternVL 将视觉 Transformer(ViT)编码器扩展至 60 亿参数,通过语言中间件与大语言模型(LLM)渐进对齐,在 32 项视觉语言基准上达到最优性能。
- Chen et al., “An Image is Worth 1/2 Tokens After Layer 2: Plug-and-Play Inference Acceleration for Large Vision-Language Models” (FastV), 2024. arXiv:2403.06764FastV 根据注意力分数在第 2 层后剪枝视觉语言模型中的视觉词元,在几乎不损失性能的情况下实现 45% 的 FLOPs 降低。
- Qiu et al., “ModServe: Modality- and Stage-Aware Resource Disaggregation for Scalable Multimodal Model Serving” (基于生产轨迹分析纯解码器和交叉注意力多模态服务系统), 2025. arXiv:2502.00937ModServe 测量多模态推理各阶段的异构资源需求与生产请求的重尾分布,并独立扩缩与放置各阶段,以满足尾延迟目标。
- vLLM Multimodal Workstream, “Encoder Disaggregation for Scalable Multimodal Model Serving,” 2025. vllm.aivLLM 原生的编码/预填充/解码分离自 v0.11.1 起可用,可独立扩缩视觉编码器池,并在四张 A100 上的 Qwen3-VL 基准中报告约 2 至 2.5 倍的有效吞吐量。
- Li et al., “DistriFusion: Distributed Parallel Inference for High-Resolution Diffusion Models” (靠容忍过时的图块上下文,把一张图切到多张 GPU 上), 2024. arXiv:2402.19481通过错位图块并行把单张高分辨率扩散样本切分到多张 GPU 上,复用上一步的特征图使各 worker 异步通信,延迟最多降低 6.1 倍且无质量损失。
- Ma et al., “DeepCache: Accelerating Diffusion Models for Free” (扩散版的 KV 缓存:特征在各步之间复用), 2024. arXiv:2312.00858一种免训练方法,在相邻去噪步之间缓存 U-Net 的高层特征、只重算快速变化的部分,加速 2 至 4 倍且质量损失可忽略。
- Salimans & Ho, “Progressive Distillation for Fast Sampling of Diffusion Models” (把数千步蒸馏到个位数步), 2022. arXiv:2202.00512反复把扩散采样器蒸馏成只需一半步数的学生模型,把生成从数千步降到最少四步,代价不超过原始训练。
- Song et al., “Consistency Models” (把轨迹上任意一点直接映射到结果:一步生成), 2023. arXiv:2303.01469把去噪轨迹上任意一点直接映射到其起点的模型,支持一步生成并可选多步细化,既可蒸馏训练也可从头训练。
- Sauer et al., “Adversarial Diffusion Distillation” (SDXL-Turbo 背后的方法:一到四步合成), 2024. arXiv:2311.17042把分数蒸馏与对抗损失结合,实现一到四步采样,是 SDXL-Turbo 背后的方法,四步之内即可达到与教师模型相当的实时合成。
- Black Forest Labs, “Announcing Black Forest Labs” (FLUX.1 流匹配模型家族,包括少步蒸馏版本), 2024. bfl.aiBlack Forest Labs 发布 FLUX.1 流匹配模型家族,包括完整模型、开放权重的蒸馏模型和更快的托管版本。
- Brooks et al., “Video generation models as world simulators” (在时空图块上运行的扩散 Transformer), 2024. openai.comSora 技术报告:在视频潜变量的时空图块上运行的扩散 Transformer,以算力为提升样本质量的坐标轴,可生成最长约一分钟的视频。
- Polyak & others, “Movie Gen: A Cast of Media Foundation Models” (十六秒高清视频对应 7.3 万词元的上下文), 2024. arXiv:2410.13720Meta 的媒体基础模型,其视频模型为十六秒高清画面维护 7.3 万词元的上下文,而单张百万像素图像约为四千个潜变量词元。
- Yin et al., “From Slow Bidirectional to Fast Autoregressive Video Diffusion Models” (视频生成重新发现了解码与 KV 缓存), 2025. arXiv:2412.07772CausVid 把五十步双向视频扩散模型蒸馏成四步因果生成器,并借助 KV 缓存在单张 GPU 上报告 1.3 秒首帧延迟后 9.4 FPS。
- Google DeepMind, “Genie 3: A New Frontier for World Models” (一个请求变成带帧截止时间的有状态每用户会话), 2025. deepmind.google一个实时交互式世界模型,以 24fps 生成 720p 画面并带短时视觉记忆,把请求从批处理作业变成带数十毫秒帧截止时间的有状态每用户会话。
评论
登录后评论