1. Fragmentação da memória

Fragmentação interna

Os sistemas pré-alocam um grande pedaço de memória para cada solicitação, assumindo o máximo de comprimento de saída possível (por exemplo, 2048 tokens). No entanto, se uma solicitação gerar apenas uma saída curta, grande parte dessa memória reservada não é utilizada, levando a um desperdício significativo.

Fragmentação externa

Como diferentes solicitações reservam pedaços de tamanhos variados, a memória da GPU fica espalhada com pequenas lacunas inutilizáveis, dificultando a ajuste novas solicitações, mesmo que a memória total total esteja disponível. Nossas fontes mostram que, nos sistemas existentes, apenas 20,4% – 38,2% da memória de cache de kv é realmente usada para armazenar estados de token, com o restante sendo desperdiçado.

2. Sem compartilhamento de memória

Técnicas avançadas de decodificação, como amostragem paralela ou pesquisa de feixe, geralmente geram várias saídas de um único prompt, o que significa que eles poderiam compartilhar partes do cache KV. No entanto, os sistemas existentes não podem compartilhar facilmente essa memória porque o cache KV de cada sequência está em seu próprio bloco separado e contíguo.