vllm.v1.kv_cache_interface ¶
Classes:
-
AttentionSpec– -
ChunkedLocalAttentionSpec– -
CrossAttentionSpec–KV cache spec for cross-attention layers in encoder-decoder models.
-
FullAttentionSpec–When hybrid allocator is disabled and the model contains both full
-
HiddenStateCacheSpec–Marker for hidden-state cache layers used by extract_hidden_states.
-
KVCacheConfig–The KV cache configuration of a model.
-
KVCacheGroupSpec–Represents a group of model layers that share the same KV cache block table.
-
KVCacheSpec–A base class for specifying the KV cache format of one layer.
-
KVCacheTensor–A class for specifying how the workers should initialize the KV cache.
-
KVQuantMode–KV cache quantization mode.
-
RSWASpec–KV cache spec for Reference Sliding Window Attention (R-SWA).
-
SinkFullAttentionSpec– -
SlidingWindowMLASpec–Sliding window attention with MLA cache format.
-
SlidingWindowSpec– -
UniformTypeKVCacheSpecs–A KV cache spec for multiple layers with the same type of attention. Here,
Functions:
-
get_kv_quant_mode–Map a
kv_cache_dtypestring to a :class:KVQuantMode. -
kv_cache_uses_per_token_head_scales–Return True if kv_cache_dtype needs per-token-head scales.
-
replace_as–dataclasses.replace, but rebuilding spec as target_cls
AttentionSpec dataclass ¶
Bases: KVCacheSpec
Attributes:
-
num_head_slots(int | None) –H of the logical
[B, H, N, C]page when packing diverges from one -
real_page_size_bytes(int) –Alias of
unpadded_page_size_bytes -
state_content_bytes(int | None) –C in bytes when packed; None means dense K/V content.
-
state_content_size_bytes(int) –Bytes per (head slot, stored state) cell of the page.
Source code in vllm/v1/kv_cache_interface.py
num_head_slots = None class-attribute instance-attribute ¶
H of the logical [B, H, N, C] page when packing diverges from one slot per KV head. None means one slot per KV head. Published by the backend.
real_page_size_bytes property ¶
Alias of unpadded_page_size_bytes TODO(lucas): follow up with TPU backend to see if we can remove this property.
state_content_bytes = None class-attribute instance-attribute ¶
C in bytes when packed; None means dense K/V content.
state_content_size_bytes property ¶
Bytes per (head slot, stored state) cell of the page.
ChunkedLocalAttentionSpec dataclass ¶
Bases: AttentionSpec
Methods:
-
max_admission_blocks_per_request–Per-request admission cap, in blocks.
Source code in vllm/v1/kv_cache_interface.py
max_admission_blocks_per_request(max_in_flight_tokens, max_model_len) ¶
Per-request admission cap, in blocks.
Single source of truth for both startup pool sizing (max_memory_usage_bytes) and the runtime admission gate, so requests admitted by startup can also be admitted at runtime.
max_in_flight_tokens is the max tokens scheduled but not yet settled (one batch per concurrent step); see VllmConfig.max_in_flight_tokens.
Source code in vllm/v1/kv_cache_interface.py
CrossAttentionSpec dataclass ¶
Bases: AttentionSpec
KV cache spec for cross-attention layers in encoder-decoder models.
Source code in vllm/v1/kv_cache_interface.py
FullAttentionSpec dataclass ¶
Bases: AttentionSpec
When hybrid allocator is disabled and the model contains both full attention layers and sliding window attention layers, sliding window attention are regarded as full attention in KV cache manager (blocks are allocated for all tokens), while computed as sliding window attention in model runner. In this case, we use FullAttentionSpec and record the sliding window size.
Methods:
-
merge–Merge a list of FullAttentionSpec objects into a single
Attributes:
-
non_causal(bool) –Whether the layer attends non-causally (e.g. Prefix LM). Carried on the
-
sliding_window(int | None) –Default to None for not using sliding window attention.
Source code in vllm/v1/kv_cache_interface.py
274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 | |
non_causal = False class-attribute instance-attribute ¶
Whether the layer attends non-causally (e.g. Prefix LM). Carried on the spec so the engine core, which collects specs from all workers before the scheduler is built, can adjust scheduling policy (chunked prefill / prefix caching) regardless of tensor-parallel layout. It does not affect the KV cache layout itself.
sliding_window = None class-attribute instance-attribute ¶
Default to None for not using sliding window attention.
merge(specs) classmethod ¶
Merge a list of FullAttentionSpec objects into a single FullAttentionSpec object.
Source code in vllm/v1/kv_cache_interface.py
HiddenStateCacheSpec dataclass ¶
Bases: MLAAttentionSpec
Marker for hidden-state cache layers used by extract_hidden_states.
Source code in vllm/v1/kv_cache_interface.py
KVCacheConfig dataclass ¶
The KV cache configuration of a model.
Attributes:
-
has_mixed_precision_kv_cache(bool) –Whether attention groups store their KV cache at more than one precision.
-
kv_cache_groups(list[KVCacheGroupSpec]) –The kv cache groups of the model.
-
kv_cache_tensors(list[KVCacheTensor]) –How should model runner initialize the KV cache tensors for each layer
-
needs_kv_cache_zeroing(bool) –Whether newly allocated KV cache blocks must be zeroed before use.
-
num_blocks(int) –The number of KV cache blocks
Source code in vllm/v1/kv_cache_interface.py
has_mixed_precision_kv_cache property ¶
Whether attention groups store their KV cache at more than one precision.
kv_cache_groups instance-attribute ¶
The kv cache groups of the model. For models with only one type of attention, there is only one group that contains all layers. For models with multiple types of attention, there will be multiple groups, see _get_kv_cache_config_uniform_page_size for more details.
kv_cache_tensors instance-attribute ¶
How should model runner initialize the KV cache tensors for each layer
needs_kv_cache_zeroing property ¶
Whether newly allocated KV cache blocks must be zeroed before use.
Required for Mamba layers, whose state is read before it is fully written (#35219), and for mixed-precision caches, where a block reused across groups can be reinterpreted under a different precision and decode stale bytes to NaN/Inf. Uniform-precision caches skip zeroing.
num_blocks instance-attribute ¶
The number of KV cache blocks
KVCacheGroupSpec dataclass ¶
Represents a group of model layers that share the same KV cache block table. These layers are regarded as one layer in the KV cache manager.
Source code in vllm/v1/kv_cache_interface.py
KVCacheSpec dataclass ¶
A base class for specifying the KV cache format of one layer.
Methods:
-
copy_with_new_block_size–Create a new KVCacheSpec from self but replacing the block size.
-
is_uniform_with_collection–Whether this KVCacheSpec is uniform with all specs of all layers.
-
max_memory_usage_bytes–The maximum possible memory usage of this KV cache in bytes.
-
max_num_blocks_per_req–The number of block table entries needed per request, i.e. the row
-
merge–Merge a list of KVCacheSpec objects into a single KVCacheSpec object.
Attributes:
-
page_size_bytes(int) –The size of a page with
block_sizetokens in bytes.
Source code in vllm/v1/kv_cache_interface.py
page_size_bytes property ¶
copy_with_new_block_size(block_size) ¶
Create a new KVCacheSpec from self but replacing the block size.
is_uniform_with_collection(kv_cache_specs) ¶
Whether this KVCacheSpec is uniform with all specs of all layers.
Source code in vllm/v1/kv_cache_interface.py
max_memory_usage_bytes(vllm_config) ¶
The maximum possible memory usage of this KV cache in bytes.
Returns:
-
int–The KV cache size in bytes
max_num_blocks_per_req(vllm_config, max_len) ¶
The number of block table entries needed per request, i.e. the row length of the worker-side block table for this cache group.
Parameters:
-
(vllm_config¶VllmConfig) –The vllm config.
-
(max_len¶int) –The maximum sequence length to size for, including the encoder length for encoder-decoder models.
Source code in vllm/v1/kv_cache_interface.py
merge(specs) classmethod ¶
Merge a list of KVCacheSpec objects into a single KVCacheSpec object.
Source code in vllm/v1/kv_cache_interface.py
KVCacheTensor dataclass ¶
A class for specifying how the workers should initialize the KV cache.
Source code in vllm/v1/kv_cache_interface.py
KVQuantMode ¶
Bases: IntEnum
KV cache quantization mode.
Used by attention backends and kernels to dispatch quantization logic without string matching on kv_cache_dtype.
Attributes:
-
is_nvfp4(bool) –True for NVFP4 packed quantization mode.
-
is_per_token_head(bool) –True for any per-token-head quantization mode.
-
is_turboquant(bool) –True for any turboquant quantization mode.
Source code in vllm/v1/kv_cache_interface.py
RSWASpec dataclass ¶
Bases: FullAttentionSpec
KV cache spec for Reference Sliding Window Attention (R-SWA).
Prefill (image + text prompt) tokens are always globally visible. Only the last rswa_window generated tokens are kept in the KV cache; gap blocks (between the prefill tail and the current decode window) are evicted during each decode step to bound memory at O(prefix_blocks + window_blocks).
Source code in vllm/v1/kv_cache_interface.py
SinkFullAttentionSpec dataclass ¶
Bases: FullAttentionSpec
Methods:
-
merge–Merge a list of FullAttentionSpec objects into a single
Source code in vllm/v1/kv_cache_interface.py
merge(specs) classmethod ¶
Merge a list of FullAttentionSpec objects into a single FullAttentionSpec object.
Source code in vllm/v1/kv_cache_interface.py
SlidingWindowMLASpec dataclass ¶
Bases: SlidingWindowSpec
Sliding window attention with MLA cache format.
Source code in vllm/v1/kv_cache_interface.py
SlidingWindowSpec dataclass ¶
Bases: AttentionSpec
Methods:
-
max_admission_blocks_per_request–Per-request admission cap, in blocks.
Source code in vllm/v1/kv_cache_interface.py
max_admission_blocks_per_request(max_in_flight_tokens, max_model_len) ¶
Per-request admission cap, in blocks.
Single source of truth for both startup pool sizing (max_memory_usage_bytes) and the runtime admission gate. Per-request real-held blocks plateau at this bound because SlidingWindowManager.remove_skipped_blocks runs from allocate_slots before each chunk's get_num_blocks_to_allocate.
max_in_flight_tokens is the max tokens scheduled but not yet settled (one batch per concurrent step); see VllmConfig.max_in_flight_tokens.
Source code in vllm/v1/kv_cache_interface.py
UniformTypeKVCacheSpecs dataclass ¶
Bases: KVCacheSpec
A KV cache spec for multiple layers with the same type of attention. Here, same types means always need the same number of token slots. For example, sliding window attentions with different window sizes are not the same type and should not be merged into one UniformTypeKVCacheSpecs.
Methods:
-
from_specs–Return a SameTypeKVCacheSpecs object if all layers have the same type
-
is_uniform_type–Whether all layers have the same type of KV cache spec.
Source code in vllm/v1/kv_cache_interface.py
796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 | |
from_specs(kv_cache_specs) classmethod ¶
Return a SameTypeKVCacheSpecs object if all layers have the same type of KV cache spec. Return None if not.
Source code in vllm/v1/kv_cache_interface.py
is_uniform_type(kv_cache_specs) classmethod ¶
Whether all layers have the same type of KV cache spec.
Uses the registry to determine grouping base classes, so custom specs that inherit from FullAttentionSpec are treated as full attention.
Source code in vllm/v1/kv_cache_interface.py
get_kv_quant_mode(kv_cache_dtype) ¶
Map a kv_cache_dtype string to a :class:KVQuantMode.
Source code in vllm/v1/kv_cache_interface.py
kv_cache_uses_per_token_head_scales(kv_cache_dtype) ¶
Return True if kv_cache_dtype needs per-token-head scales.
replace_as(spec, target_cls, *, drop=(), **changes) ¶
dataclasses.replace, but rebuilding spec as target_cls e.g. SlidingWindowSpec -> FullAttentionSpec
Every field of spec must exist on target_cls unless named in drop; fields only target_cls has keep their default values.