Zpět na domů

ruGPT3XL s kontextem 8k: sparse attention

Článek popisuje obnovení sparse attention v ruGPT3XL a rozšíření kontextu na 8k tokenů. Použit tiling pozičních embeddingů, smíšený dataset gazeta a stupňovité doladění. Dosaženo PPL 13.00 při 8192 tokenech s minimální regresí na základním kontextu.

ruGPT3XL 8k kontext: od 2k do reality
Advertisement 728x90

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) |

Google AdInline article slot

|----------------|--------------|

| ruGPT3Small | — |

| ruGPT3Medium | 25.2 |

Google AdInline article slot

| ruGPT3Large | 16.8 |

| ruGPT3XL (dense)| 50.1 |

| ruGPT3XL (sparse)| 11.68 |

Google AdInline article slot

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.compile s 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

Advertisement 728x90

Číst dál