TROISINH
BreakthroughsAttention Efficiency

Sliding Window Attention — Chỉ nhìn N token gần nhất, đủ rồi

Giảm độ phức tạp attention từ O(n²) xuống O(n×w) bằng cách giới hạn mỗi token chỉ nhìn w token lân cận. Cách Mistral 7B chạy 32K context trên GPU 24GB.

Khi context dài đến 8.000 tokens, ma trận attention nặng 512MB và cần tính toán 64 triệu cặp score. Sliding Window Attention (SWA) nói rằng: điều đó là lãng phí. Chỉ cần nhìn 512 token gần nhất, bạn vẫn hiểu câu hiện tại — và đột nhiên chi phí giảm 20 lần, cho phép chạy long-context trên GPU consumer.

Vấn đề

Standard Attention có độ phức tạp O(n²) theo chiều dài sequence. Với n=8.000 tokens, ma trận attention có 64 triệu entries, chiếm ~512MB VRAM chỉ riêng cho ma trận score (FP16). Khi n=32.000, con số này tăng lên 8GB — chưa kể KV Cache và weights.

Vấn đề không chỉ là memory. Tính toán attention cũng tốn FLOPs theo n², nhưng thực tế inference lại bị memory bandwidth bound: bạn phải load toàn bộ KV cache từ HBM vào SRAM cho mỗi token mới sinh ra. Với context dài, bạn dành 95% thời gian chờ dữ liệu di chuyển, không phải tính toán.

Nhưng liệu có thực sự cần thiết phải tính attention giữa token hiện tại và token đầu tiên của đoạn văn 10.000 tokens trước đó? Thống kê ngôn ngữ học cho thấy 90% dependencies cú pháp (subject-verb, adjective-noun) nằm trong phạm vi < 50 tokens. Dependency xa hơn thường là hiếm và có thể được xử lý qua các tầng trung gian.

Ý tưởng cốt lõi

Giới hạn attention trong cửa sổ cố định (window size w). Thay vì nhìn toàn bộ n tokens, mỗi token chỉ attend đến w token lân cận. Độ phức tạp giảm từ O(n²) xuống O(n×w) — với w=512, đây là sự khác biệt giữa "không thể chạy" và "mượt mà trên RTX 4090".

Locality là King

Ngôn ngữ tuân theo power-law distribution về khoảng cách dependency. Phần lớn thông tin cần thiết để hiểu token hiện tại nằm ngay xung quanh nó — giống như con người đọc sách: bạn không nhớ từng chữ của 100 trang trước, chỉ cần "working memory" gồm vài câu gần nhất và ý chính đã tóm tắt.

SWA ép buộc transformer học theo cách con người suy nghĩ: thông tin phải được nén và truyền dần qua các tầng trung gian, thay vì truy cập trực tiếp từ xa.

The Hierarchy Trick (Receptive Field Expansion)

Một window đơn lẻ chỉ thấy w token, nhưng giống như CNN, khi stack nhiều layers, receptive field tăng nhân lên. Với window size w=512 và 12 layers:

  • Layer 1-2: Học n-grams, local syntax (cửa sổ 512)
  • Layer 6: Học sentence-level semantics (cửa sổ ~3K)
  • Layer 12: Học document structure (cửa sổ ~6K)

Thông tin từ token đầu tiên đến token thứ 10.000 không cần đường truyền trực tiếp; nó đi qua các "checkpoint" trung gian, mỗi layer tóm tắt context local thành representation dense hơn. Đây là compositional reasoning thay vì memorization thô.

Rolling Buffer KV Cache (Mistral)

Thay vì append KV cache vô hạn, Mistral dùng circular buffer có kích thước cố định bằng window size. Khi token mới đến, nó ghi đè lên phần tử cũ nhất. Kết quả: memory usage O(w) thay vì O(n), cho phép inference sequence dài vô hạn (streaming) với memory cố định.

Sigmoid thay Softmax (SWAT)

Trong softmax attention, tổng attention weights phải bằng 1 (zero-sum competition). Nếu một token irrelevant ở đầu sequence nhận chút attention, nó "cướp" budget từ các token quan trọng trong window hiện tại — hiện tượng attention sink.

Sliding Window Attention Training (SWAT) thay softmax bằng sigmoid: mỗi token được attend independently (range 0-1), không cạnh tranh. Trong window cố định, bạn không thể afford việc 30% budget bị waste vào token ngoài window như trong full attention.

Tại sao nó hoạt động

Mathematical Sparse Pattern: SWA tạo sparse attention mask — một band matrix thay vì full matrix. Với n=10.000 và w=512, số lượng attention computations giảm từ 100M xuống ~5M (20× speedup).

Information Diffusion qua Layers: Giống như heat diffusion, thông tin từ token xa truyền đến token hiện tại qua nhiều bước trung gian, mỗi bước nén và trích xuất đặc trưng. Điều này thực chất tốt hơn full attention vì ép model học hierarchical features thay vì raw memorization.

Streaming Capability: SWA cho phép "training context mismatch" — train trên window ngắn (4K) nhưng inference trên sequence dài vô hạn (100K+) bằng cách giữ fixed-size KV cache và để window trượt. Model đã học cách compress information vào hidden states; nó không cần nhìn lại 100K tokens trước, chỉ cần state tóm tắt cuối cùng.

Ý nghĩa thực tế

So sánh với Full Attention

MetricFull AttentionSliding Window Attention (w=512)
ComplexityO(n²)O(n×w)
Memory Attention Matrix512MB (n=8K)16MB
KV Cache GrowthO(n) — unboundedO(w) — constant
Long-rangeDirect linkHierarchical via layers
Use caseNeedle-in-haystack exact matchStreaming, long docs, chat

Benchmarks thực tế

  • Mistral 7B với SWA xử lý 32K context trên 24GB VRAM với throughput 2-3× cao hơn Llama full attention tương đương.
  • Summarization 10K tokens: SWA đạt 95% quality so với full attention, nhưng latency giảm 65%.
  • StreamingLLM: Dùng SWA + attention sinks để xử lý văn bản vô hạn (infinite context) trên GPU consumer mà không OOM.

Limitations

Không thể nhảy cóc: Nếu task đòi hỏi liên kết trực tiếp giữa đoạn đầu và đoạn cuối tài liệu 100K tokens mà không có summary tokens ở giữa (ví dụ: "so sánh đoạn 1 và đoạn 1000"), SWA thất bại. Thông tin bị suy giảm qua nhiều layers (telephone game effect).

Global tokens cần thiết: Longformer giải quyết bằng cách thêm "global attention" cho tokens đặc biệt (CLS, punctuation) để chúng nhìn toàn bộ sequence và được mọi token nhìn lại. Mistral không dùng global tokens, nên cần careful prompt design để đặt summary ở cuối window.

Coding tasks: Code thường có long-range dependencies (function definition ở đầu file, call ở cuối). SWA có thể struggle nếu không có cơ chế nhìn xa bổ sung.

Đào sâu hơn

Paper gốc:

Cùng cụm (attention-efficiency):

  • Flash Attention — Tối ưu IO-aware cho attention nhanh hơn bằng tiling trên SRAM.
  • Multi-Query Attention — Giảm KV cache bằng cách share K/V heads.
  • Grouped-Query Attention — Sweet spot giữa MHA và MQA.
  • RoPE — Position encoding dùng rotation thay vì addition.
  • ALiBi — Phạt khoảng cách tuyến tính cho extrapolation.

Đọc tiếp:

On this page