Comment faire tenir un million de tokens dans un GPU classique avec Kimi Linear
Vous êtes-vous déjà demandé pourquoi travailler avec de longs textes dans les LLM est si coûteux ? C'est tout une question de KV-cache. Quand vous donnez un document massif à un modèle, sa « mémoire » (le cache) gonfle jusqu'à des tailles obscènes, dévorant toute votre mémoire vidéo. Les gens de MoonshotAI ont décidé qu'il était temps de faire quelque chose, et ont lancé Kimi Linear. Ce n'est pas juste un autre modèle « amélioré » — c'est une tentative de repenser l'architecture d'attention pour pouvoir travailler avec un contexte d'un million de tokens sans acheter une ferme de serveurs.
Quel est le problème avec l'attention standard
Le mécanisme d'attention standard (Full Attention) — celui des transformers classiques — est une vraie gloutonne. Sa complexité croît de façon quadratique avec la longueur du texte. Vous voulez un contexte deux fois plus grand ? Préparez-vous à dépenser quatre fois plus de ressources. Des solutions populaires comme Flash Attention ou la MLA (Multi-head Latent Attention) de DeepSeek aident, mais ne résolvent pas radicalement le problème quand il s'agit de séquences vraiment longues.
Kimi Linear adopte une approche différente. Les développeurs ont utilisé une méthode hybride combinant les forces des transformers et des structures de type RNN.
Comment fonctionne Kimi Delta Attention
Le cœur du projet est le mécanisme Kimi Delta Attention (KDA). Sans entrer dans des maths complexes, c'est une évolution du concept de Gated DeltaNet. L'astuce principale ici est un « oubli » intelligent.
Dans un RNN standard, la mémoire est limitée par une taille d'état fixe. KDA utilise un mécanisme de gating qui détermine quelles informations passées doivent être conservées dans cet état compressé et lesquelles peuvent être supprimées. Cela permet au modèle de maintenir une grande précision même sur de vastes distances, là où les modèles linéaires conventionnels commencent à « dériver » et à perdre le fil du récit.
Ce que cela donne en pratique
Les développeurs ont introduit une architecture où KDA et MLA (Global Attention) sont mélangés dans un ratio de 3:1. Cette combinaison a permis d'obtenir plusieurs résultats impressionnants :
- Économies de mémoire. Les besoins en KV-cache ont diminué de 75%. C'est critique quand vous déployez le modèle sur votre propre matériel.
- Vitesse de génération. Sur un contexte d'un million de tokens, le débit de tokens augmente jusqu'à 6x par rapport aux architectures standard.
- Contexte honnête. Les tests de benchmark sur RULER montrent que le modèle « voit » et utilise réellement les informations sur l'ensemble des 128k (et jusqu'à 1M) tokens, pas seulement en apparence.
Les graphiques ci-dessous démontrent comment Kimi Linear (ligne bleue) prend l'avantage en vitesse à mesure que la longueur du contexte augmente :
L'essayer
MoonshotAI n'a pas fait dans la demi-mesure et a publié les poids du modèle sur Hugging Face. Il y a une version de base et une variante Instruct avec 48 milliards de paramètres. Grâce à l'architecture Mixture-of-Experts (MoE), seuls 3 milliards de paramètres s'activent pendant le calcul, ce qui rend le modèle étonnamment léger pour sa catégorie.
Pour commencer, vous aurez besoin de la dernière version de PyTorch et de la bibliothèque fla-core. Le code ressemble assez standard pour quiconque a travaillé avec les transformers :
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "moonshotai/Kimi-Linear-48B-A3B-Instruct"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto",
trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
# Обычный чат-шаблон
messages = [
{"role": "system", "content": "You are a helpful assistant provided by Moonshot-AI."},
{"role": "user", "content": "Расскажи, в чем преимущество линейного внимания перед обычным?"}
]
input_ids = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt"
).to(model.device)
generated_ids = model.generate(inputs=input_ids, max_new_tokens=500)
response = tokenizer.batch_decode(generated_ids)[0]
print(response)
Si vous avez besoin de déployer cela en production, le modèle s'entend bien avec vLLM. Vous pouvez lancer une API compatible OpenAI avec une seule commande terminal, en spécifiant un max-model-len massif.
Ça vaut le coup de télécharger
Le projet semble prometteur pour ceux qui construisent des systèmes RAG ou analysent de longs logs et documents.
Qui devrait definitely y regarder de plus près :
- Ceux qui ont atteint le plafond mémoire des GPU en travaillant avec de longs contextes.
- Les développeurs qui se soucient de la vitesse de réponse (TPOT) en temps réel.
- Les chercheurs à la recherche d'alternatives aux transformers standard.
Comme point négatif, l'architecture est relativement nouvelle, et le support dans les outils tiers (comme la quantification ou des optimiseurs spécifiques) peut ne pas arriver immédiatement. Mais avoir des noyaux KDA prêts à l'emploi dans la bibliothèque FLA est encourageant.
Kimi Linear est un bon exemple que l'optimisation algorithmique peut encore produire des gains plus importants que simplement empiler plus de teraflops. Si vous avez besoin de « digérer » une bibliothèque entière ou un codebase massif en un seul passage — c'est probablement l'un des outils les plus intéressants disponibles actuellement.
Projets similaires