O que muda o PagedAttention na atribuição de memória KV dos LLMs?
Tradução automática
Este artigo foi traduzido automaticamente a partir da versão original em inglês.
O PagedAttention permite que a cache de atenção de um pedido ocupe blocos de memória separados de tamanho fixo, em vez de uma única atribuição contígua de grande dimensão. Uma tabela de blocos associa as posições lógicas dos tokens do pedido a blocos físicos. Isto reduz a necessidade de reservar antecipadamente a memória para o comprimento máximo possível da sequência de um pedido.
A principal vantagem é uma atribuição de memória KV mais flexível para pedidos simultâneos. Não reduz a quantidade de dados de chaves e valores necessária para cada token armazenado.
Calcular o espaço não utilizado nos blocos
Considere uma implementação ilustrativa com blocos de 16 tokens. Uma sequência de 35 tokens precisa de três blocos, com espaço para 48 tokens. Treze posições no último bloco ficam por utilizar: cerca de 27% das posições atribuídas a esta sequência curta.
Só o último bloco pode ficar parcialmente preenchido. À medida que as sequências crescem, esse espaço não utilizado representa uma fração menor da memória que lhes é atribuída. O tamanho real dos blocos e as disposições suportadas dependem do runtime, do backend de atenção e da versão.
O artigo sobre PagedAttention descreve a conceção da associação e da atribuição. Atribui blocos adicionais à medida que uma sequência cresce e liberta-os quando o pedido termina, em vez de reservar uma grande região contígua por pedido.
A partilha exige mais do que atribuição de memória
Vários pedidos podem referenciar o mesmo bloco de cache compatível. A cache de prefixos encontra blocos reutilizáveis para prefixos idênticos; a gestão de cópia na escrita permite que os pedidos divirjam sem corromper o estado partilhado. Uma disposição por blocos permite isto, mas não fornece automaticamente uma política de pesquisa na cache nem garante a reutilização entre pedidos.
A apresentação original do vLLM indicava um desperdício de 60–80% nas abordagens anteriores de atribuição usadas na comparação e menos de 4% nas cargas de trabalho de PagedAttention medidas. O cálculo acima para uma sequência curta mostra por que motivo menos de 4% não é um limite superior universal. As comparações que mostram grandes aumentos de débito também incluem diferenças em todo o runtime, pelo que não devem ser atribuídas apenas à atribuição de memória.
Meça os blocos atribuídos, as posições de tokens utilizadas, as remoções da cache ou preempções e a capacidade para pedidos simultâneos. Compare os mesmos comprimentos e a mesma precisão da cache. Se os dados KV por si só já excedem a memória, a atribuição por blocos não pode fazer desaparecer esses dados; também pode ser necessário reduzir o número de cabeças KV, usar quantização de cache suportada ou reduzir a carga de trabalho.
Guia de engenharia: PagedAttention inclui um exemplo de tabela de blocos.