Aller au contenu principal

Chapitre 1 : Optimisation de l'inférence

Cache KV​

Stockez les paires clé-valeur calculées pour éviter le recalcul :

# Sans cache KV : recalculer tous les KV pour chaque nouveau jeton
# Avec cache KV : calculer uniquement les KV pour le nouveau jeton

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

Décodage spéculatif​

Utilisez un petit modèle pour rédiger, un grand modèle pour vérifier :

# 1. Rédiger : Le petit modèle génère N jetons rapidement
# 2. Vérifier : Le grand modèle vérifie tous les N jetons en parallèle
# 3. Accepter les jetons correspondants, régénérer à partir de la première divergence

Regroupement continu​

Traitez plusieurs requêtes simultanément :

StratégieDébitLatence
StatiqueFaibleConsistante
ContinuÉlevéVariable