vllm [Usage]: prefix-caching

w8ntj3qf  于 3个月前  发布在  其他
关注(0)|答案(1)|浏览(61)

当前环境:

The output of `python collect_env.py`

如何使用vllm?我想知道vllm在高并发和系统提示差异下如何确保正确性(如果可以的话),因为我注意到前缀缓存中使用了哈希前缀树。如果我启动一个启用前缀缓存的服务器,考虑以下三种情况:

情况1:

有些用户使用相同的系统提示但不同的用户提示(许多用户具有高并发和多会话),KV缓存是否会在跨请求之间重用?例如:
请求1来自会话一:系统提示 + 用户提示是:“你是一个聪明的助手” + “请向我介绍一下CNN”。
请求2来自会话二:系统提示 + 用户提示是:“你是一个聪明的助手” + “中国最受欢迎的兴趣地点是什么?”
请求2是否会重用请求1的部分KV缓存,因为其中有一些令牌是相同的?

情况2:

有些用户使用不同的系统提示和用户提示(因为它们处于不同的任务中)
请求1来自会话一:系统提示 + 用户提示是:“你是AIRR开发的”,+ “请向我推荐一些短电影”。
请求2来自会话二:系统提示 + 用户提示是:“你是一个聪明的代码补全助手” + “aaaa xxx bbbb”(假设它是一个关于代码补全的任务)
在两个会话之间的进一步聊天中,两个会话之间KV缓存是否会不匹配?

情况3:

只有一个用户在一个会话中调用服务,但具有不同的系统提示和用户提示。
请求1来自会话一:系统提示 + 用户提示是:“你是AIRR开发的”,+ “请向我推荐一些短电影”。
请求2来自同一个会话:系统提示 + 用户提示是:“你是一个聪明的代码聊天助手” + “python中的静态方法是什么?”
当请求2发生时,请求1的KV缓存是否会被擦除?还是只是不使用但根据驱逐策略保留?还有一个问题,在一个服务中是否可以设置多个系统提示?我注意到在启动服务时有一个参数--chat-template

mu0hgdu0

mu0hgdu01#

据我所知,vLLM 只会在所有之前的 token 匹配的情况下重用一个 token 的 KV 缓存。因此:

  1. 是的,system prompt + 'you are a clever assistant' 的 KV 缓存将被重用。
  2. 否,如果系统提示不相同,那么前面的 token 不匹配,未来的所有 token 的 KV 缓存将不会被重用。
  3. 它不会立即被擦除,但可能会在未来的某个时刻被驱逐。

遗憾的是,我对 --chat-template 不熟悉,所以我不确定最后一个问题。

相关问题