vllm.v1.attention.backends.utils
KV_SHARING_FAST_PREFILL_METADATA_FIELDS module-attribute
¶
KV_SHARING_FAST_PREFILL_METADATA_FIELDS = [
("logits_indices_padded", Optional[Tensor], None),
("num_logits_indices", int, 0),
]
AttentionCGSupport ¶
Bases: Enum
Constants for the cudagraph support of the attention backend Here we do not consider the cascade attention, as currently it is never cudagraph supported.
Source code in vllm/v1/attention/backends/utils.py
PURE_DECODE_ONLY class-attribute
instance-attribute
¶
Cudagraph supported for pure decode, need to run without cudagraph for mixed prefill-decode batches
AttentionMetadataBuilder ¶
Source code in vllm/v1/attention/backends/utils.py
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 |
|
__init__ abstractmethod
¶
__init__(
kv_cache_spec: AttentionSpec,
layer_names: list[str],
vllm_config: VllmConfig,
device: device,
)
build abstractmethod
¶
build(
common_prefix_len: int,
common_attn_metadata: CommonAttentionMetadata,
fast_build: bool = False,
) -> M
Central method that builds attention metadata. Some builders (MLA) require reorder_batch to be called prior to build.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
common_prefix_len | int | The length of the common prefix of the batch. | required |
common_attn_metadata | CommonAttentionMetadata | The common attention metadata. | required |
fast_build | bool | The meta-data will prioritize speed of building over then speed at execution. Can be used for spec-decode where the result of a build call may only be used for few layers/iters. | False |
Source code in vllm/v1/attention/backends/utils.py
build_for_cudagraph_capture ¶
build_for_cudagraph_capture(
common_attn_metadata: CommonAttentionMetadata,
) -> M
Build attention metadata for CUDA graph capture. Uses build by default. Subclasses that override this method should call self.build or super().build_for_cudagraph_capture.
Source code in vllm/v1/attention/backends/utils.py
build_for_drafting ¶
build_for_drafting(
common_attn_metadata: CommonAttentionMetadata,
draft_index: int,
) -> M
Build attention metadata for draft model. Uses build by default.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
common_attn_metadata | CommonAttentionMetadata | The common attention metadata. | required |
draft_index | int | The index of the current draft operation. When speculating a chain of tokens, this index refers to the draft attempt for the i-th token. For tree-based attention, this index instead refers to the draft attempt for the i-th level in the tree of tokens. | required |
Source code in vllm/v1/attention/backends/utils.py
can_run_in_cudagraph ¶
can_run_in_cudagraph(
common_attn_metadata: CommonAttentionMetadata,
) -> bool
Can this batch (with given metadata) use CUDA Graphs for attention.
CommonAttentionMetadata dataclass
¶
Per-batch attention metadata, shared across layers and backends. AttentionMetadataBuilder instances use it to construct per-layer metadata.
For many of the tensors we keep both GPU and CPU versions.
Source code in vllm/v1/attention/backends/utils.py
num_computed_tokens_cpu instance-attribute
¶
num_computed_tokens_cpu: Tensor
(batch_size,), the number of computed tokens for each request
query_start_loc_cpu instance-attribute
¶
query_start_loc_cpu: Tensor
(batch_size + 1,), the start location of each request in query Tensor
PerLayerParameters dataclass
¶
Currently, FlashInfer backend only support models in which all layers share the same values for the following hyperparameters. Should not be used for trtllm-gen backend since it supports different values for the following hyperparameters.
Source code in vllm/v1/attention/backends/utils.py
UbatchSlice dataclass
¶
Source code in vllm/v1/attention/backends/utils.py
_make_metadata_with_slice ¶
_make_metadata_with_slice(
ubatch_slice: UbatchSlice,
attn_metadata: CommonAttentionMetadata,
) -> CommonAttentionMetadata
This function creates a new CommonAttentionMetadata that corresponds to the requests included in ubatch_slice
Source code in vllm/v1/attention/backends/utils.py
get_kv_cache_layout cached
¶
Source code in vllm/v1/attention/backends/utils.py
get_per_layer_parameters ¶
get_per_layer_parameters(
vllm_config: VllmConfig,
layer_names: list[str],
cls_: type[AttentionImpl],
) -> dict[str, PerLayerParameters]
Scan layers in layer_names
and determine some hyperparameters to use during plan
.
Source code in vllm/v1/attention/backends/utils.py
infer_global_hyperparameters ¶
infer_global_hyperparameters(
per_layer_params: dict[str, PerLayerParameters],
) -> PerLayerParameters
Currently, FlashInfer backend other than trtllm-gen only support models in which all layers share the same values for the following hyperparameters: - window_left
- logits_soft_cap
- sm_scale
So this function asserts that all layers share the same values for these hyperparameters and returns the global values.
Source code in vllm/v1/attention/backends/utils.py
make_kv_sharing_fast_prefill_attention_metadata ¶
Return a new subclass of metadata_cls
for fast prefill
Source code in vllm/v1/attention/backends/utils.py
make_local_attention_virtual_batches ¶
make_local_attention_virtual_batches(
attn_chunk_size: int,
common_attn_metadata: CommonAttentionMetadata,
block_size: int = 0,
) -> CommonAttentionMetadata
Source code in vllm/v1/attention/backends/utils.py
404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 |
|
reorder_batch_to_split_decodes_and_prefills ¶
reorder_batch_to_split_decodes_and_prefills(
input_batch: InputBatch,
scheduler_output: SchedulerOutput,
decode_threshold: int = 1,
) -> bool
Reorders the batch to split into prefill and decode requests; places all requests with <= decode_threshold tokens at the front of the batch.
Returns:
Type | Description |
---|---|
bool | True if the batch was modified, False otherwise. |
Source code in vllm/v1/attention/backends/utils.py
slice_query_start_locs ¶
Creates a new query_start_loc that corresponds to the requests in request_slice.
Note: This function creates a new tensor to hold the new query_start_locs. This will break cudagraph compatibility.
Source code in vllm/v1/attention/backends/utils.py
split_attn_metadata ¶
split_attn_metadata(
ubatch_slices: list[UbatchSlice],
common_attn_metadata: CommonAttentionMetadata,
) -> list[CommonAttentionMetadata]
Creates a new CommonAttentionMetadata instance that corresponds to the requests for each UbatchSlice in ubatch_slices.
Note: This function does not modify common_attn_metadata
Source code in vllm/v1/attention/backends/utils.py
split_decodes_and_prefills ¶
split_decodes_and_prefills(
common_attn_metadata: CommonAttentionMetadata,
decode_threshold: int = 1,
) -> tuple[int, int, int, int]
Assuming a reordered batch, finds the boundary between prefill and decode requests.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
common_attn_metadata | CommonAttentionMetadata | CommonAttentionMetadata object containing the batch metadata. | required |
decode_threshold | int | The maximum query length to be considered a decode. | 1 |
Returns:
Name | Type | Description |
---|---|---|
num_decodes | int | The number of decode requests. |
num_prefills | int | The number of prefill requests. |
num_decode_tokens | int | The number of tokens in the decode requests. |
num_prefill_tokens | int | The number of tokens in the prefill requests. |
Source code in vllm/v1/attention/backends/utils.py
subclass_attention_backend ¶
subclass_attention_backend(
name_prefix: str,
attention_backend_cls: type[AttentionBackend],
builder_cls: type[AttentionMetadataBuilder[M]],
) -> type[AttentionBackend]
Return a new subclass where get_builder_cls
returns builder_cls
.
Source code in vllm/v1/attention/backends/utils.py
subclass_attention_metadata ¶
subclass_attention_metadata(
name_prefix: str,
metadata_cls: Any,
fields: list[tuple[str, Any, Any]],
) -> Any
Return a new subclass of metadata_cls
with additional fields
Source code in vllm/v1/attention/backends/utils.py
subclass_attention_metadata_builder ¶
subclass_attention_metadata_builder(
name_prefix: str,
builder_cls: type[AttentionMetadataBuilder[M]],
build_preprocess_fn: Callable[
[CommonAttentionMetadata], CommonAttentionMetadata
],
) -> type[AttentionMetadataBuilder[M]]
Return a new subclass of builder_cls
whose .build(...) method first calls build_preprocess_fn(common_attn_metadata) on the metadata.