push_blocks
产品支持情况
产品 |
是否支持 |
---|---|
√ |
|
√ |
|
x |
|
x |
|
x |
|
x |
函数功能
PagedAttention场景下,根据BlocksCacheKey,通过block列表的方式从本地节点推送Cache到远端Cache。
函数原型
1 2 3 4 5 6 7 8 | push_blocks(self, dst_cache_key: BlocksCacheKey, src_cache: Cache, src_blocks: Optional[Union[Tuple[int], List[int]]] = (), dst_blocks: Union[Tuple[int], List[int]] = (), src_layer_range: range = None, dst_layer_range: range = None, tensor_num_per_layer = _NUM_TENSORS_PER_LAYER) |
参数说明
参数名称 |
数据类型 |
取值说明 |
---|---|---|
dst_cache_key |
远端的Cache索引。 |
|
src_cache |
本地Cache。 |
|
src_blocks |
Optional[Union[Tuple[int], List[int]]] |
本地的block index列表。 |
dst_blocks |
Union[Tuple[int], List[int]] |
远端的block index列表。 |
src_layer_range |
Optional[range] |
可选参数,用于按层pull kv场景。默认值为None。 传输源的layer的范围,step只支持1。不设置时为传输所有layer。需要注意这里是layer的index,而不是tensor的index,即1个layer对应连续N个tensor(K/V),这里要求分配内存时,必须是KV,...,KV排布,不支持其他场景。N为tensor_num_per_layer的取值,默认为2。 |
dst_layer_range |
Optional[range] |
可选参数,用于按层pull kv场景。默认值为None。 传输目标的layer的范围,step只支持1。不设置时为传输所有layer。需要注意这里是layer的index,而不是tensor的index,即1个layer对应连续N个tensor(K/V),这里要求分配内存时,必须是KV,...,KV排布,不支持其他场景。N为tensor_num_per_layer的取值,默认为2。 |
tensor_num_per_layer |
Optional[int] |
可选参数,表示每层的tensor的数量,默认值是2,取值范围是[1,cache的tensor总数]。当src_layer_range或dst_layer_range取值为非默认值时, tensor_num_per_layer可以保持默认值,也可以输入其他值,输入其他值的时,tensor_num_per_layer的取值还需要被当前cache的tensor总数整除。 |
返回值
- 正常情况下无返回值。
- 传入数据类型错误情况下会抛出TypeError或ValueError异常。
- 执行时间超过sync_kv_timeout配置会抛出LLMException异常。
- layer_range参数异常会抛出LLMException异常。
约束说明
- 当src_cache是HOST设备时,dst_cache是DEVICE设备时,仅支持src_cache与dst_cache都为PA的场景。
- 开启enable_remote_cache_accessible时会引入额外约束,详见该配置的约束说明章节。
- 在D2H和H2D传输场景,需要在Host端初始化时配置Device内存池。
- 当前仅支持src_layer_range和dst_layer_range取值一致。