RoPE (Su et al., 2021, lucrarea RoFormer) codifică poziția absolută a fiecărui token printr-o matrice de rotație aplicată vectorilor Query și Key, pe perechi de dimensiuni. Produsul scalar dintre doi vectori rotiți depinde astfel de distanța relativă dintre tokeni. Lucrarea menționează și o descreștere a dependenței dintre tokeni pe măsură ce distanța relativă crește.
Modelele cu RoPE nu generalizează singure dincolo de lungimea pe care au fost antrenate. YaRN („Yet another RoPE extensioN method”, Peng et al., 2023) rezolvă asta cu mai puțin calcul decât metodele anterioare: de 10 ori mai puțini tokeni și de 2,5 ori mai puțini pași de antrenare.
YaRN nu interpolează dimensiunile de frecvență înaltă (lungimea lor de undă este mult mai mică decât contextul), interpolează mereu dimensiunile de frecvență joasă și le amestecă pe cele intermediare. În plus, ajustează temperatura atenției. Cu YaRN, Llama 2 7B și 13B au fost extinse la 64K și 128K de tokeni.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
rope_theta |
Frecvența de bază RoPE. Llama 3 a crescut-o la 500.000 pentru context lung. |
rope_type: yarn |
Activează YaRN în configurația modelului (Transformers, vLLM, llama.cpp). |
factor (s) |
De câte ori se extinde contextul față de cel original (de exemplu 4: de la 32.768 la 131.072). |
original_max_position_embeddings |
Lungimea de context pe care a fost antrenat modelul înainte de extindere. |
Temperatura atenției |
În YaRN, √(1/t) = 0,1 · ln(s) + 1. |
Exemple practice și scenarii reale
Exemplul 1: Activarea YaRN la Qwen3 (config.json)
Din model card-ul oficial Qwen3: modelul are nativ 32.768 de tokeni, iar autorii au validat 131.072 cu YaRN.
{
...,
"rope_scaling": {
"rope_type": "yarn",
"factor": 4.0,
"original_max_position_embeddings": 32768
}
}
Exemplul 2: Același lucru la pornirea cu vLLM
vllm serve Qwen/Qwen3-235B-A22B --rope-scaling '{"rope_type":"yarn","factor":4.0,"original_max_position_embeddings":32768}' --max-model-len 131072
Exemplul 3: Un model livrat direct cu YaRN: gpt-oss-120b
Din fișierul config.json publicat de OpenAI pe Hugging Face (fragment).
"max_position_embeddings": 131072,
"rope_theta": 150000,
"rope_scaling": {
"rope_type": "yarn",
"factor": 32.0,
"original_max_position_embeddings": 4096,
"beta_fast": 32.0,
"beta_slow": 1.0
}
Greșeli frecvente și capcane
- Activezi YaRN pentru texte scurte. Documentația Qwen3 avertizează că implementările YaRN statice (factor constant) pot afecta performanța pe texte scurte și nu recomandă YaRN dacă textele nu depășesc de obicei 32.768 de tokeni.
- Mărești max-model-len fără rope_scaling sau fără un model antrenat pentru acea lungime. Modelele cu RoPE nu generalizează singure peste lungimea de antrenare.
- Uiți de memorie: un context mai lung înseamnă un KV cache proporțional mai mare.