巨大的KV cache:KV cache随着请求数量增长迅速。对于13B的OPT模型,一个token的KV cache需要800 KB的空间,2(K和V)*5120(隐藏层维度)*40(层数)*2(FP16)。OPT生成tokens最大长度2048,因此存储KV cache需要1.6GB,将导致容纳的请求数有限。而且算力增速高于内存容量,内存将成为瓶颈。 复杂的解码算法:KV高速缓存共享...
CacheEngine:负责管控gpu/cpu上的KV cache物理块(调度器的block manager只负责物理块id的分配,CacheEngine则是根据这个id分配结果实打实地在管理物理块中的数据) Worker.model:根据vLLM代码,这里写成model_runner会更合适一些。它负责加载模型,并执行推理。PagedAttention的相关逻辑,就维护这个实例关联的代码下。 三、加...
Prefill 优化的主要目标是降低 TTFT,优化用户使用体验,这里常用的优化是多卡并行,例如 TP 和 SP,来降低 TTFT,Taco-LLM 在此基础上使用 GPU & CPU 结合多级缓存的 Prefix Cache 技术,让一部分的 prompt token 通过查找历史的 kv-cache 获得,而不用参与 Prefill 阶段的计算,减少计算量,从而降低 TTFT。...
在预填充阶段,需要分配指定数量的cache内存。而在decoder阶段,每次只需要一个长度的kvcache。
""" def __init__( self, device: Device, block_size: int, num_blocks: int, ) -> None: self.device = device # 设备:cpu/gpu self.block_size = block_size # 该设备上每个物理块的槽位数,默认为16 self.num_blocks = num_blocks # 该设备上留给KV cache的总物理块数量 # === # 初始化...
(2) KV Cache Manager (键值缓存管理器) 此管理器控制键值缓存,它的设计允许以分页的方式管理内存。它有两个表现形式的“块表”(Block tables)。 (3) CPU Block Allocator & GPU Block Allocator (CPU块分配器 & GPU块分配器) 这两个组件分别负责为CPU和GPU分配内存块。这种分块的分配方式可能是为了优化内存...
如果Block 太小,PagedAttention 可能无法充分利用 GPU 的并行性来读取和处理 KV Cache。 如果Block 过大,则内存碎片会增加,Prefix Cache 共享的可能性会降低。 如下图所示,作者使用 ShareGPT 和 Alpaca 数据评估了不同 Block Size 下的 Latency(越低越好),可以看出,当 Block Size 为 16 和 32 时表现最好,...
对一个13b的模型来说,一个序列的KV Cache就能达到1.7GB。除此之外,KV Cache的大小当然也跟输入序列...
通过PagedAttention对 KV Cache 的有效管理 传入请求的continus batching,而不是static batching 支持张量并行推理 支持流式输出 兼容OpenAI 的接口服务 与HuggingFace 模型无缝集成 VLLM支持绝大多数LLM模型的推理加速。它使用如下的方案大幅提升推理速度: Continuous batching ...
通过PagedAttention对 KV Cache 的有效管理 传入请求的continus batching,而不是static batching 支持张量并行推理 支持流式输出 兼容OpenAI 的接口服务 与HuggingFace 模型无缝集成 VLLM支持绝大多数LLM模型的推理加速。它使用如下的方案大幅提升推理速度: Continuous batching ...