Pular para o conteúdo principal

Capítulo 1: Otimização de Inferência

KV Cache​

Armazene pares chave-valor computados para evitar recomputação:

# Sem KV cache: recomputa todos os KV para cada novo token
# Com KV cache: computa apenas o KV para o novo token

class KVCache:
def __init__(self, max_batch, max_seq, num_heads, head_dim):
self.k_cache = torch.zeros(max_batch, num_heads, max_seq, head_dim)
self.v_cache = torch.zeros(max_batch, num_heads, max_seq, head_dim)

def update(self, k, v, position):
self.k_cache[:, :, position] = k
self.v_cache[:, :, position] = v

Decodificação Especulativa​

Use um modelo pequeno para rascunhar e um modelo grande para verificar:

# 1. Rascunho: Modelo pequeno gera N tokens rapidamente
# 2. Verificação: Modelo grande verifica todos os N tokens em paralelo
# 3. Aceita tokens correspondentes, regenera a partir da primeira divergência

Batching Contínuo​

Processe múltiplas requisições simultaneamente:

EstratégiaVazãoLatência
EstáticaBaixaConsistente
ContínuaAltaVariável