Come inserire un milione di token in una GPU normale usando Kimi Linear
Ti sei mai chiesto perché lavorare con testi lunghi negli LLM è così costoso? È tutto una questione di KV-cache. Quando inserisci un documento massiccio in un modello, la sua "memoria" (la cache) si gonfia a dimensioni oscene, divorando tutta la tua memoria video. I ragazzi di MoonshotAI hanno deciso che è ora di fare qualcosa, e hanno lanciato Kimi Linear. Non è solo un altro modello "migliorato"—è un tentativo di ripensare l'architettura di attenzione per poter lavorare con un contesto di un milione di token senza dover comprare una server farm.
Qual è il problema con l'attenzione standard
Il meccanismo standard di Full Attention (quello nei transformer classici) è una bestia affamata. La sua complessità cresce quadraticamente con la lunghezza del testo. Vuoi un contesto due volte più grande? Preparati a spendere quattro volte le risorse. Soluzioni popolari come Flash Attention o MLA (Multi-head Latent Attention) di DeepSeek aiutano, ma non risolvono radicalmente il problema quando si tratta di sequenze veramente lunghe.
Kimi Linear adotta un approccio diverso. Gli sviluppatori hanno usato un metodo ibrido che combina i punti di forza dei transformer e delle strutture simili agli RNN.
Come funziona Kimi Delta Attention
Il cuore del progetto è il meccanismo Kimi Delta Attention (KDA). Senza addentrarci in matematica hardcore, è un'evoluzione del concetto di Gated DeltaNet. Il trucco principale qui è il "dimenticare" intelligente.
In un RNN standard, la memoria è vincolata da una dimensione fissa dello stato. KDA utilizza un meccanismo di gating che determina quali informazioni passate devono essere mantenute in questo stato compresso e quali possono essere scartate. Questo permette al modello di mantenere un'elevata accuratezza anche attraverso distanze enormi, dove i modelli lineari convenzionali iniziano a "derapare" e perdere il filo del discorso.
Cosa offre in pratica
Gli sviluppatori hanno introdotto un'architettura dove KDA e MLA (Global Attention) sono mescolati in un rapporto di 3:1. Questa combinazione ha ottenuto diversi risultati impressionanti:
- Risparmio di memoria. I requisiti della KV-cache sono diminuiti del 75%. Questo è critico quando si implementa il modello sul proprio hardware.
- Velocità di generazione. Su un contesto di 1 milione di token, il throughput dei token aumenta fino a 6 volte rispetto alle architetture standard.
- Contesto onesto. I test benchmark su RULER mostrano che il modello "vede" e utilizza veramente le informazioni in tutti i 128k (e fino a 1M) token, non sta solo fingendo.
I grafici qui sotto dimostrano come Kimi Linear (linea blu) si distingua in velocità man mano che cresce la lunghezza del contesto:
Proviamolo
MoonshotAI non si è trattenuta e ha rilasciato i pesi del modello su Hugging Face. C'è una versione base e una variante Instruct con 48 miliardi di parametri. Grazie all'architettura Mixture-of-Experts (MoE), durante il calcolo si attivano solo 3 miliardi di parametri, rendendo il modello sorprendentemente leggero per la sua classe.
Per iniziare, ti serviranno l'ultima versione di PyTorch e la libreria fla-core. Il codice è abbastanza standard per chi ha lavorato con i transformer:
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)
Se hai bisogno di implementarlo in produzione, il modello va d'accordo con vLLM. Puoi avviare un'API compatibile con OpenAI con un singolo comando da terminale, specificando un max-model-len massiccio.
Vale la pena scaricarlo
Il progetto sembra promettente per chi costruisce sistemi RAG o analizza log e documenti lunghi.
Chi dovrebbe sicuramente dare un'occhiata più da vicino:
- Chi ha raggiunto il tetto di memoria delle GPU lavorando con contesti lunghi.
- Sviluppatori che si preoccupano della velocità di risposta (TPOT) in tempo reale.
- Ricercatori che cercano alternative ai transformer standard.
Come svantaggio, l'architettura è relativamente nuova, e il supporto in strumenti di terze parti (come la quantizzazione o ottimizzatori specifici) potrebbe non arrivare subito. Ma avere kernel KDA già pronti nella libreria FLA è incoraggiante.
Kimi Linear è un buon esempio che l'ottimizzazione algoritmica può ancora produrre guadagni maggiori rispetto al semplice aggiungere più teraflop. Se hai bisogno di "digerire" un'intera libreria o un codebase massiccio in un solo passaggio—questa è probabilmente una delle opzioni più interessanti disponibili in questo momento.
Progetti correlati