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
ALWAYS class-attribute
instance-attribute
¶
Cudagraph always supported; supports mixed-prefill-decode
UNIFORM_BATCH class-attribute
instance-attribute
¶
Cudagraph supported for batches the only contain query lengths that are the same, this can be used for spec-decode i.e. "decodes" are 1 + num_speculative_tokens
UNIFORM_SINGLE_TOKEN_DECODE class-attribute
instance-attribute
¶
Cudagraph supported for batches the only contain query_len==1 decodes
AttentionMetadataBuilder ¶
Source code in vllm/v1/attention/backends/utils.py
__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
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
seq_lens_cpu instance-attribute
¶
seq_lens_cpu: Tensor
(batch_size,), the length of each request including both computed tokens and newly scheduled tokens
__init__ ¶
__init__(
query_start_loc: Tensor,
query_start_loc_cpu: Tensor,
seq_lens: Tensor,
seq_lens_cpu: Tensor,
num_computed_tokens_cpu: Tensor,
num_reqs: int,
num_actual_tokens: int,
max_query_len: int,
max_seq_len: int,
block_table_tensor: Tensor,
slot_mapping: Tensor,
causal: bool = True,
) -> None
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
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 535 536 537 538 539 540 541 542 |
|
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