Rozšíření kontextu ruGPT3XL na 8k tokenů: sparse attention a další trénink
Vývojáři úspěšně adaptovali ruGPT3XL z Megatron-LM do formátu HuggingFace s podporou GGUF v llama.cpp. Testování odhalilo degradaci Perplexity (PPL) na 50.1 na datasetu gazeta namísto očekávaných 12.05. Příčinou byla náhrada sparse attention za dense nn.MultiheadAttention z GPT-2.
Obnovení původního mechanismu z Megatron-LM snížilo PPL na 11.68. Korelace s deklarovanými metrikami původního modelu dosáhla R=0.93.
Srovnání PPL na gazeta
| Model | PPL (gazeta) |
|----------------|--------------|
| ruGPT3Small | — |
| ruGPT3Medium | 25.2 |
| ruGPT3Large | 16.8 |
| ruGPT3XL (dense)| 50.1 |
| ruGPT3XL (sparse)| 11.68 |
Mechanismus sparse attention v ruGPT3XL
Sparse attention využívá alternating-pattern z práce "Generating Long Sequences with Sparse Transformers" (arXiv:1904.10509):
- Sudé vrstvy (0,2,4…): block-sparse attention. Každý token vidí lokální okno 128 tokenů + globální bloky v pravidelných intervalech. Různé hlavy používají různé globální pozice.
- Liché vrstvy (1,3,5…): standardní causal dense attention.
Tím je zajištěn téměř lineární růst paměti namísto kvadratického. Při 4násobném zvětšení kontextu paměť na KV-cache a aktivace roste 3-4krát.
V llama.cpp byla přidána architektura LLM_ARCH_RUGPT3XL (PR #21161) s plnou podporou sparse attention. Opravena chyba masky pro batche >1 při tréninku.
Optimalizace přes Triton a SDPA
Implementace přes matmul + softmax + matmul (eager mode) dává ~6280 tok/s na RTX 4090.
Zrychlení:
F.scaled_dot_product_attention(SDPA): +40% (~8800 tok/s).- SDPA se zvětšeným batchem (5×2048): dalších +25%.
torch.compiles Inductor: ×1.85 k baseline (~11600 tok/s), generuje Triton-jádra.
Strategie rozšíření kontextu na 8k
Omezení architektury:
- Learned Absolute Positional Embeddings (nn.Embedding(2048,2048)) neextrapolují.
- Mřížka sparse attention závisí na
max_position_embeddings // sparse_block_size.
Principy dalšího tréninku
- Tiling pozicních embeddingů: Cyklické duplikování 0-2047 pro nové pozice. Zachovává stabilitu na krátkém kontextu.
- Smíšený dataset: 60% dlouhých příkladů (gazeta přes EOS), 40% krátkých chunků.
- Postupné rozšiřování: 2k→4k (2.6h), poté 4k→8k (3.9h) na RTX 4090.
Parametry: gazeta train, 3 epochy, lr=5e-6 cosine decay, bfloat16, gradient checkpointing. Vyřešena OOM přes PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True (38.5 GB peak).
Model: evilfreelancer/ruGPT3XL-8k.
Výsledky PPL na gazeta test
| Model | 2048 | 4096 | 8192 |
|----------------|------|------|------|
| ruGPT3XL base | 11.68| — | — |
| ruGPT3XL-4k | 11.75| 12.04| — |
| ruGPT3XL-8k | 11.77| 11.99| 13.00 |
Minimální regrese na 2k, model si zachovává kvalitu.
Co je důležité
- Sparse attention je klíčové: dense-implementace dává PPL 50.1 namísto 11.68.
- Tiling APE je efektivní: umožňuje další trénink bez degradace základního kontextu.
- 8k je reálné na RTX 4090: 38.5 GB s expandable_segments.
- Postupný přístup minimalizuje overfit: 2k→4k→8k za 6.5 hodin.
- Triton/SDPA zrychlují 1.85x: torch.compile generuje optimalizovaná jádra.
— Editorial Team
Zatím žádné komentáře.