allocate_cache
函数功能
分配Cache, 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[int], List[int]] |
仅当LLMRole为PROMPT时可设置, 用于在DECODER拉取KV。 |
调用示例
cache = kv_cache_manager.allocate_cache(kv_cache_desc, kv_cache_keys)
返回值
正常情况下返回KvCache。
传入数据类型错误情况下会抛出TypeError异常。
cache_keys中包含之前allocate_cache时绑定的CacheKey的情况下抛出LLMException异常。
约束说明
- 传入cache_keys时,如果Cache的batch size > 1, 则需要提供相同数量的CacheKey, 分别引用一组kv tensor。
- 如果当次推理的batch未占用满,即存在无效batch index,则需要插入特殊的CacheKey(将req_id设置为UINT64_MAX)占位,如果空闲的batch_index在末尾,则可以省略。
- 如果cache_keys存在重复,则最后一个生效。
父主题: KvCacheManager