Mojo struct
ContinuousBatchingKVCache
@register_passable(trivial)
struct ContinuousBatchingKVCache[type_: DType, kv_params_: KVCacheStaticParams, assert_write_mode: Int = 0]
Wrapper for the ContinuousKVCache of a given layer in the transformer model.
This abstracts the Pointer indirection for accessing the ContinuousKVCache for a given batch entry.
THIS IS THE TYPE THAT IS PASSED TO KV PROJECTION AND FLASH ATTENTION KERNELS.
Fields
- blocks (
NDBuffer[type_, 4, MutableAnyOrigin, __init__[::Indexer,::Indexer,::Indexer,::Indexer](Dim(-31337), Dim(-31337), Dim(kv_params_.num_heads), Dim(kv_params_.head_size)), _strides_from_shape[::DimList,::Int]()]
): - cache_lengths (
NDBuffer[uint32, 1, MutableAnyOrigin]
): - lookup_table (
NDBuffer[uint32, 1, MutableAnyOrigin]
): - max_seq_length (
SIMD[uint32, 1]
): - max_cache_length (
SIMD[uint32, 1]
):
Implemented traits
AnyType
,
Copyable
,
ExplicitlyCopyable
,
KVCacheT
,
Movable
,
UnknownDestructibility
Aliases
blocks_shape
alias blocks_shape = __init__[::Indexer,::Indexer,::Indexer,::Indexer](Dim(-31337), Dim(-31337), Dim(kv_params_.num_heads), Dim(kv_params_.head_size))
blocks_stride
alias blocks_stride = _strides_from_shape[::DimList,::Int]()
blocks_type
alias blocks_type = NDBuffer[type_, 4, MutableAnyOrigin, __init__[::Indexer,::Indexer,::Indexer,::Indexer](Dim(-31337), Dim(-31337), Dim(kv_params_.num_heads), Dim(kv_params_.head_size)), _strides_from_shape[::DimList,::Int]()]
kv_params
alias kv_params = kv_params_
type
alias type = type_
Methods
__init__
__init__(blocks: NDBuffer[type_, 4, MutableAnyOrigin, __init__[::Indexer,::Indexer,::Indexer,::Indexer](Dim(-31337), Dim(-31337), Dim(kv_params_.num_heads), Dim(kv_params_.head_size)), _strides_from_shape[::DimList,::Int]()], cache_lengths: NDBuffer[uint32, 1, MutableAnyOrigin], lookup_table: NDBuffer[uint32, 1, MutableAnyOrigin], max_seq_length: SIMD[uint32, 1], max_cache_length: SIMD[uint32, 1]) -> Self
max_tile_size
static max_tile_size() -> Int
Returns the maximum tile size for the KVCache.
cache_lengths_nd
cache_lengths_nd(self) -> NDBuffer[uint32, 1, MutableAnyOrigin]
cache_length
cache_length(self, batch_idx: Int) -> Int
load
load[width: Int](self, bs: Int, head_idx: Int, tok_idx: Int, head_dim_idx: Int) -> SIMD[type_, width]
store
store(self, bs: Int, head_idx: Int, tok_idx: Int, head_dim_idx: Int, val: SIMD[type_, size])
empty_cache
empty_cache(self) -> Bool
Returns true if the cache_lengths for all requests is 0, false otherwise.
max_prompt_length
max_prompt_length(self) -> SIMD[uint32, 1]
Returns the maximum sequence length across all batches of the current request.
max_context_length
max_context_length(self) -> SIMD[uint32, 1]
Returns the maximum cache length used across all batches of the current request.
block_paged_ptr
block_paged_ptr[tile_size: Int](self, batch_idx: Int, start_tok_idx: Int, head_idx: Int, head_dim_idx: Int = 0) -> UnsafePointer[SIMD[type_, 1]]
Was this page helpful?
Thank you! We'll create more content like this.
Thank you for helping us improve!