下载
中文
注册

pull_blocks

函数功能

PagedAttention场景下,根据BlocksCacheKey,通过block列表的方式从对端节点拉取Cache到本地Cache。

函数原型

pull_blocks(src_cache_key: Union[CacheKey, CacheKeyByIdAndIndex, BlocksCacheKey],
            dst_cache: Cache,
            src_blocks: Optional[Union[Tuple[int], List[int]]] = (),
            dst_blocks: Union[Tuple[int], List[int]] = (),
            src_layer_range: Optional[range] = None,
            dst_layer_range: Optional[range] = None)

参数说明

参数名称

数据类型

取值说明

src_cache_key

Union[CacheKey, CacheKeyByIdAndIndex, BlocksCacheKey]

远端的Cache索引。

dst_cache

Cache

目标Cache。

src_blocks

Optional[Union[Tuple[int], List[int]]]

远端的block index列表,src_cache_key不是BlocksCacheKey时,不填。

dst_blocks

Union[Tuple[int], List[int]]

本地的block index列表。

src_layer_range

Optional[range]

可选参数,用于按层pull kv场景。传输源的layer的范围, step只支持1。不设置时为传输所有 layer。需要注意这里是layer的index,而不是tensor的index,即1个layer对应连续2个tensor(K/V),这里要求allocate_cache时,必须是KV,...,KV排布 ,不支持其他场景。

dst_layer_range

Optional[range]

可选参数,用于按层pull kv场景。传输目标的layer的范围, step只支持1。不设置时为传输所有 layer。需要注意这里是layer的index,而不是tensor的index,即1个layer对应连续2个tensor(K/V),这里要求allocate_cache时,必须是KV,...,KV排布 ,不支持其他场景。

调用示例

from llm_datadist import *
...
cache_manager.pull_blocks(blocks_cache_key, cache, [0, 1], [2, 3])
cache_manager.pull_blocks(blocks_cache_key, cache, [0, 1], [2, 3], src_layer_range=range(0,2), dst_layer_range=range(2,4))

返回值

正常情况下无返回值。

传入数据类型错误情况下会抛出TypeError或ValueError异常。

执行时间超过sync_kv_timeout配置会抛出LLMException异常。

layer_range参数异常会抛出LLMException异常

约束说明

当src_cache是HOST设备时,dst_cache是DEVICE设备时,仅支持src_cache与dst_cache都为PA的场景。