@RunLLM 那为什么UniformTypeKVCacheSpecs类型时,计算 num_blocks = available_memory // kv_cache_groups[0].kv_cache_spec.page_size_bytes 没有除以层数,那不就是所有层的吗
RunLLM
42
不是的。UniformTypeKVCacheSpecs 类型下,每个 layer 都单独分配一块 KV cache tensor,num_blocks 表示每层能分配的 block 数,而不是所有层的总和。因为每层的 KV cache 是独立分配的,所以 available_memory // page_size_bytes 直接得到每层的 block 数,无需再除以层数。源码实现说明。
需要更详细的内存分配流程或示意图吗?
Sources:
Hint: Mention @RunLLM in the post for followups.
@RunLLM available_memory 就是每层可用的 kvcache tensor 大小?在 UniformTypeKVCacheSpecs 类型下
RunLLM
44
不是,available_memory 是所有层共享的总可用 KV cache 内存(单位:字节),不是每层单独的。UniformTypeKVCacheSpecs 类型下,vLLM 会用 available_memory 计算每层能分配多少 block,但每层的 tensor 是独立分配的,最终每层的 tensor 大小为 page_size_bytes × num_blocks。源码说明。
需要详细的分配公式或内存分配流程说明吗?
Sources:
Hint: Mention @RunLLM in the post for followups.
@RunLLM VLLM_HAS_CONTEXT_DEFAULT 这个环境变量是?