KV缓存(Key-Value Cache)的动态分配与预分配机制

在自回归生成过程中,vLLM需要为每个生成的token缓存其注意力层的键(Key)和值(Value)向量(即KV缓存)。随着生成序列长度的增加,KV缓存占用的显存会显著增长。例如,一个13B参数的模型,单个序列的KV缓存可能占用12GB显存。

  • 预分配策略:vLLM默认通过参数(默认值0.9)预分配GPU显存以支持动态KV缓存。例如,在总显存160GB的双A800环境下,默认会预留140GB显存(160GB×0.9),即使模型参数仅需16GB,剩余空间主要用于KV缓存。gpu_memory_utilization
  • 显存碎片问题:传统系统因预分配连续显存块导致内部和外部碎片(显存利用率仅20%~40%),而vLLM通过PagedAttention技术(分块管理显存)将碎片浪费降至4%以下。尽管如此,默认高利用率参数仍可能分配远超实际需求的显存。

多卡并行推理的显存开销

vLLM支持多GPU分布式推理(通过参数配置),但多卡并行会引入额外的显存开销:tensor_parallel_size

  • 模型参数复制:模型参数需在多卡间拆分存储,若未充分优化,可能导致冗余占用。
  • 通信开销:多卡间的数据同步需要临时显存空间。例如,双卡运行Llama3-8B时,默认配置下显存占用可能达到单卡的2倍以上。

批处理(Batching)与序列管理的显存需求

vLLM通过连续批处理(Continuous Batching)提升吞吐量,但同时需为每个请求分配独立的KV缓存空间:

  • 动态序列长度:若请求的生成序列长度差异较大,vLLM需按最大可能长度预分配显存,导致未使用的预留空间浪费。
  • 并行采样与束搜索:支持多候选输出的解码策略(如并行采样)会生成多个分支序列,进一步增加显存占用。

默认参数配置的保守性

vLLM的默认参数倾向于最大化性能而非显存效率:

  • gpu_memory_utilization默认值0.9:预留90%显存用于KV缓存和中间结果,可能远超实际需求。例如,用户实验中将该值从0.9降至0.15后,显存占用从140G降至21G。
  • **未启用显存卸载(Offload):**默认未启用和功能,模型参数和激活值均驻留GPU显存。offload_weights``offload_activations

模型量化支持的限制

vLLM对低精度量化模型(如4-bit/8-bit)的支持仍在完善中。若使用非量化模型,显存占用会显著增加。例如,量化后的Qwen-72B模型在48GB显存下可运行,但未量化版本可能超出单卡容量。


优化建议

若需降低显存占用,可通过以下调整:

  1. 降低gpu_memory_utilization:根据实际需求调整至0.3~0.5。
  2. 启用显存卸载:通过将参数转移至CPU内存。offload_weights=True
  3. 限制批处理规模:减少和以降低并发显存需求。max_batch_size``max_num_seqs
  4. 使用量化模型:加载4-bit或8-bit量化版本,减少参数占用的显存。
  5. 缩短生成序列长度:通过参数控制输出长度,减少KV缓存占用。max_tokens

总结

vLLM的高显存占用源于其以吞吐量为优先的设计哲学(如预分配机制、连续批处理),以及默认参数对显存资源的保守预留。通过合理调整参数并利用PagedAttention的分块管理特性,可在性能与显存效率间取得平衡。


vLLM引擎在部署模型时占用较大的显存是为了换取更高的计算效率和更低的推理延迟。以下是详细的解析:

一、提升计算效率

  1. 批处理优化
  • vLLM引擎通过批量处理更多的输入数据,充分利用GPU的并行计算能力,显著提高了模型的吞吐量。
  • 这种方法减少了GPU空闲时间,尤其是在处理连续任务时,效果更为明显。
  1. 算子融合与优化
  • 引擎采用算子融合技术,将多个计算步骤合并为一个内核执行,减少了中间结果的存储和传输,提升了效率。
  • 利用GPU的SIMD(单指令多数据)特性,加速矩阵运算,这是深度学习的核心作。
  1. 计算粒度细化
  • 将计算任务细分成更小的颗粒度,适应GPU的流水线处理,最大限度地利用硬件资源。
  • 这种策略避免了因任务过大导致的资源闲置,提升了整体利用率。

二、降低延迟

  1. 模型驻留内存
  • 模型权重常驻显存,减少了从主存加载数据的时间,直接加速推理过程。
  • 减少I/O操作次数,有效降低延迟,尤其适用于实时性要求高的应用。
  1. 缓存机制增强
  • 引入高效的缓存策略,临时存储频繁使用的数据和中间结果,减少重复计算和数据访问开销。
  • 更好的缓存管理有助于维持高速的数据流动,保持高性能状态。
  1. 并行机制强化
  • 利用多线程和流式计算,实现数据预取和处理的无缝衔接,缩短队头阻塞现象。
  • 增加的显存支持更多上下文和数据管道,并发处理能力更强。

三、优势的具体体现

  • 响应更快:更高的计算效率直接转化为更低的延迟,适合实时问答、对话系统等场景。
  • 吞吐量提升:每秒处理更多请求,提升了服务器的整体服务能力,适合高并发应用。
  • 用户体验优化:快速的推理速度带来更好的互动体验,特别对于在线服务至关重要。

四、适用场景

  • 实时交互应用:如即时翻译、智能客服等,需要快速响应。
  • 高性能计算环境:如数据中心,能处理更多请求,提升资源利用率。
  • 研究开发:加快实验迭代速度,提升开发效率。

结论

vLLM引擎以更高的显存占用为代价,换取了更快的推理速度和更低的延迟。这种设计使其成为需要高性能和低延迟场景的理想选择,尽管增加了硬件成本,但在性能收益上得到了充分补偿。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐