Capítulo 1: Optimización de Inferencia
Caché KV
Almacene pares clave-valor calculados para evitar recálculos:
# Sin caché KV: recalcula todos los KV para cada nuevo token
# Con caché KV: solo calcula KV para el nuevo 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
Decodificación Especulativa
Utilice un modelo pequeño para redactar y uno grande para verificar:
# 1. Redactar: el modelo pequeño genera N tokens rápidamente
# 2. Verificar: el modelo grande verifica los N tokens en paralelo
# 3. Acepta los tokens coincidentes, regenera desde la primera discrepancia
Batching Continuo
Procese múltiples solicitudes simultáneamente:
| Estrategia | Rendimiento | Latencia |
|---|---|---|
| Estática | Bajo | Consistente |
| Continua | Alto | Variable |