PullKvBlocks

Applicability

Product

Supported (Yes/No)

Atlas 350 Accelerator Card

No

Atlas A3 training product/Atlas A3 inference product

Yes

Atlas A2 training product/Atlas A2 inference product

Yes

Atlas 200I/500 A2 inference product

No

Atlas inference product

No

Atlas training product

No

Note: For the Atlas A2 training product/Atlas A2 inference product, only the Atlas 800I A2 inference server and A200I A2 Box heterogeneous subrack are supported.

Function Description

Pulls the cache from the remote node to the local cache via a block list in the blocks cache transmission scenario. This API can be called only when the role is Decoder.

Prototype

1
2
3
4
5
Status PullKvBlocks(const CacheIndex &src_cache_index,
                    const Cache &dst_cache,
                    const std::vector<uint64_t> &src_blocks,
                    const std::vector<uint64_t> &dst_blocks,
                    const KvCacheExtParam &ext_param = {})

Parameters

Parameter

Input/Output

Description

src_cache_index

Input

Index of the remote source cache.

dst_cache

Input

Local destination cache.

src_blocks

Input

Block index list of the source cache.

dst_blocks

Input

Block index list of the destination cache.

ext_param

Input

The difference between second and first in src_layer_range must equal that in dst_layer_range. The default values of first and second in both src_layer_range and dst_layer_range are -1, indicating all layers. The valid range for each index is [0, maximum available layer index], and first must be less than or equal to second. The maximum available layer index is calculated as follows:

(CacheDesc::num_tensors / KvCacheExtParam::tensor_num_per_layer) - 1

tensor_num_per_layer can range from 1 to the total number of tensors in the cache, with a default value of 2. When src_layer_range or dst_layer_range uses non-default values, tensor_num_per_layer can either remain at its default value or be set to another value, which must be divisible by the total number of tensors in the cache.

Example

1
2
3
4
5
6
7
CacheIndex cache_key{0, 1, 0};
std::vector<uint64_t> prompt_blocks = {1,3,5,7};
std::vector<uint64_t> decoder_blocks = {0,2,4,6};
auto ret = llm_datadist.PullKvBlocks(cache_key,
                                     kv_cache,
                                     prompt_blocks,
                                     decoder_blocks)

Returns

  • LLM_SUCCESS: Success.
  • LLM_PARAM_INVALID: Incorrect parameter.
  • LLM_NOT_YET_LINK: No link is established with the remote cluster.
  • LLM_TIMEOUT: Pull operation timeout.
  • LLM_KV_CACHE_NOT_EXIST: The remote KV cache does not exist.
  • Other values: Failure.

Constraints

Before calling this API, call the Initialize API to complete initialization. dst_cache must be the cache allocated by the AllocateCache API.