allocate_cache
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 推理系列产品 | √ |
| Atlas A2 训练系列产品 | x |
函数功能
分配Cache,分配成功后,会同时被cache_id与cache_keys引用,只有当这些引用都解除后,cache所占用的资源才会实际释放。
cache_id的引用需通过deallocate_cache解除,cache_keys的引用则可以通过以下2种方式解除。
- Decoder调用pull_cache接口成功后解除。
- Prompt调用remove_cache_key接口时解除。
函数原型
allocate_cache(cache_desc: CacheDesc, cache_keys: Union[Tuple[CacheKey], List[CacheKey]] = ())
参数说明
| 参数名称 | 数据类型 | 取值说明 |
|---|---|---|
| cache_desc | CacheDesc | Cache的描述。 |
| cache_keys | Union[Tuple[CacheKey], List[CacheKey]] | 仅当LLMRole为PROMPT时可设置,用于在Decode拉取KV。 |
调用示例
from llm_datadist import *
...
kv_cache_manager = data_dist.kv_cache_manager
cache_desc = CacheDesc(80, [2, 2 * 1024 * 1024], DataType.DT_FLOAT16)
cache_keys = [CacheKey(prompt_cluster_id=0, req_id=1)]
kv_cache = kv_cache_manager.allocate_cache(cache_desc, cache_keys)
返回值
正常情况下返回KvCache。
参数错误可能抛出TypeError或ValueError。
如果cache_keys中包含了分配内存时绑定的CacheKey,则抛出LLMException异常。
执行时间超过sync_kv_timeout配置会抛出LLMException异常。
约束说明
- 传入cache_keys时,如果Cache的batch size>1,则需要提供相同数量的CacheKey,分别引用一组kv tensor。
- 如果当次推理的batch未占用满,即存在无效batch_index,则需要插入特殊的CacheKey(将req_id设置为UINT64_MAX)占位,如果空闲的batch_index在末尾,则可以省略。
- 如果cache_keys存在重复,则最后一个生效。
- 本接口不支持并发调用。