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。 |
|
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的场景。