Fast & Efficient LLM Inference with vLLM-II

Fast & Efficient LLM Inference with vLLM-II

💡 原文中文,约3800字,阅读约需9分钟。
📝

内容提要

本文介绍vLLM推理优化:通过连续批处理让GPU持续忙碌,用PagedAttention分页管理KV缓存减少碎片,并利用前缀缓存跳过重复计算。还介绍GuideLLM测性能、lm_eval测质量,以权衡成本、准确率与性能。

🔎

延伸解读

连续批处理如何提升GPU利用率

文章指出,推理时GPU计算单元常因等待权重从HBM搬运而闲置。静态批处理需等待整批请求完成,导致短请求结束后GPU出现空闲。vLLM采用连续批处理,动态补充新请求,使GPU持续忙碌,从而摊薄权重读取成本,提高吞吐量。

PagedAttention与KV缓存内存管理

KV缓存随序列长度变化,传统预分配固定内存易产生碎片。PagedAttention借鉴操作系统分页思想,将内存划分为固定大小的块,通过块表映射逻辑位置到物理块,实现按需分配和回收。当块不再使用且无前缀缓存引用时,采用LRU策略删除,减少内存浪费。

前缀缓存的适用场景与局限

前缀缓存利用相同前缀的KV缓存复用,适用于多轮对话和共享系统提示等场景。vLLM默认开启,但跨服务实例共享缓存需分布式架构,会引入性能和成本问题。文章提到火山引擎等平台设计了显式和隐式缓存及路由策略,普通用户若不使用专门SDK调优,成本较高。

性能与质量评估工具

为权衡成本、准确率和性能,文章推荐GuideLLM测性能,可控制请求速率并记录TTFT、ITL、端到端延迟和吞吐量等指标;lm_eval测质量,通过基准任务评估模型表现。量化模型是否达标,需结合两者衡量性价比。

❓

Q&A

vLLM 如何通过连续批处理提高 GPU 利用率?

连续批处理(Continuous Batching)不断补充新的请求进来,让 GPU 持续忙碌,从而摊薄权重读取成本并提高 GPU 利用率。

PagedAttention 是如何管理 KV 缓存的?

PagedAttention 借鉴操作系统分页思想,将内存分为大小相同的 block,通过物理块号(PBN)和 FilledSlots 管理空余槽位,每个序列维护逻辑位置到物理块的映射表,按需回收,减少内存碎片。

前缀缓存(Prefix Caching)在什么场景下有用?

前缀缓存适用于相同用户多轮对话(消息追加,前缀不变)和多个用户使用相同 system prompt 的场景,可以跳过重复的 KV 计算。

如何启动 vLLM 推理服务?

使用命令 `vllm serve Qwen/Qwen3-0.6B --dtype=bfloat16 --max-model-len 4096` 启动,加载权重到引擎,默认开启 PagedAttention、连续批处理和前缀缓存,并通过 HTTP 暴露在 8000 端口。

GuideLLM 和 lm_eval 分别用来测量什么?

GuideLLM 用于性能基准测试,测量 TTFT、ITL、E2E 延迟和吞吐量等指标;lm_eval 用于质量评估,测量模型在真实任务上的表现。

vLLM 暴露了哪些 Prometheus 指标来监控推理服务?

vLLM 暴露的指标包括:num_requests_running/waiting(活跃与排队请求数)、gpu_cache_usage_perc(KV 缓存内存压力)、prompt_tokens_total/generation_tokens_total(累计 token 数)、prefix_cache_queries_total 和 prefix_cache_hits_total(前缀缓存查询与命中数)。

🏷️

标签

➡️

继续阅读