Como a cache de prefixos reutiliza prompts de LLM e tokens em cache
Tradução automática
Este artigo foi traduzido automaticamente a partir da versão original em inglês.
A cache de prefixos reutiliza o estado de atenção de um prefixo de prompt anterior compatível. Um novo pedido processa apenas a parte restante que não está em cache, em vez de repetir todos os cálculos do prompt. É útil em cargas de trabalho com instruções de sistema, exemplos, documentos ou prefixos de conversa repetidos.
A correspondência é verificada nos tokens e no estado do modelo. Uma redação semelhante, texto repetido mais à frente num prompt ou os mesmos tokens com outro adaptador não estabelecem um acerto válido na cache.
O que tem de coincidir
Num transformer causal, as chaves e os valores de um token em cache dependem dos tokens anteriores. Reutilizar uma passagem repetida mais à frente depois de alterar uma passagem anterior implicaria reutilizar estados dependentes de um contexto diferente.
| Possível reutilização | Verificação |
|---|---|
| system prompt idêntico | IDs de token exatos e estado do modelo compatível |
| Documento repetido | Prefixo anterior idêntico, além do documento |
| Conversa continuada | Mensagens anteriores, modelo de formatação e tokens sem alterações |
| Mesmo texto com outro adaptador | Identidade do adaptador e regras de compatibilidade da cache |
| prompt multimodal | Identidade das imagens ou dos conteúdos multimédia, não apenas os tokens de substituição |
O desenho da cache de prefixos do vLLM calcula um hash dos tokens de um bloco, do seu prefixo pai e de identificadores adicionais, como LoRA e o estado multimodal. Reutiliza blocos completos; um último bloco incompleto não constitui automaticamente um acerto na cache. Os valores de salt da cache também podem separar pedidos que não devem partilhar estado em cache.
RadixAttention do SGLang organiza os prefixos reutilizáveis numa árvore radix. A representação é diferente, mas continua a ser necessário um estado de prefixo compatível.
Medir o trabalho de prefill evitado
A cache de prefixos evita sobretudo repetir os cálculos do prompt. Não elimina a descodificação nem a sua atenção sobre o histórico disponível. A poupança de cálculos também não implica uma melhoria do TTFT de todos os pedidos: continuam a existir esperas em fila e pedidos com a cache fria.
Compare separadamente os pedidos com a cache fria e os pedidos cujo prefixo repetido já está em cache. Registe os tokens reutilizados, não apenas a proporção de pedidos com algum acerto. Um acerto que abrange 32 tokens e outro que abrange 8,000 tokens evitam quantidades de trabalho diferentes. Meça a memória retida pela cache, as expulsões e a latência em função do comprimento do prefixo.
Coloque as instruções estáveis antes dos dados específicos do pedido quando essa ordem preservar o prompt pretendido. Inclua a compatibilidade dos inquilinos e dos adaptadores na política de cache. Indique o estado da cache sempre que publicar resultados de serving.
Guia de engenharia: cache de prefixos relaciona o mecanismo de reutilização com a alocação KV.