Transformerの自己注意機構において、各トークンが固定幅のウィンドウ内にある隣接トークンのみに注意を向けるローカルアテンションの実装手法。Mistral 7Bで広く知られ、FlashAttention-2以降でハードウェアレベルの最適化が進んだ。計算量はO(n×w)でwはウィンドウ幅。
関連する技術記事・ガイドを検索
スライディングウィンドウアテンション(Sliding Window Attention, SWA)は、Transformerの自己注意機構におけるローカルアテンションの最も代表的な実装である。各トークンが左右w/2個ずつ(合計w個)の隣接トークンのみに注意を向けることで、計算量をFull AttentionのO(n²)からO(n×w)に削減する。2023年にMistral AI社がMistral 7Bで採用し、7Bパラメータクラスでのロングコンテキスト対応のスタンダードとなった。
SWAでは、アテンション行列のうち対角線から±w/2の帯状領域のみを計算し、それ以外の要素はマスク(-∞)で埋める。
| パラメータ | 説明 | 典型的な値 |
|---|---|---|
| ウィンドウ幅 w | 各トークンが注意する隣接トークン数 | 256 - 8,192 |
| レイヤ数 L | Transformerの積み重ね数 | 12 - 80 |
| 受容野 | w × L(全レイヤ通過後の情報到達範囲) | 4,096 - 655,360 |
| 実効コンテキスト | 受容野の範囲で実際に使える文脈長 | 受容野の50-80% |
ウィンドウ幅4,096、レイヤ数32のMistral 7Bの場合:
SWAの重要な性質は、単一レイヤではw個のトークンしか見えないが、L層のスタックによりL×w個のトークン情報が間接的に到達する点である。
レイヤ1: トークンiはi-w/2 〜 i+w/2の情報を持つ レイヤ2: トークンiはi-w 〜 i+wの情報を持つ(レイヤ1の隣接トークンの情報が伝播) レイヤL: トークンiはi-Lw/2 〜 i+Lw/2の情報を持つ
| モデル | SWA設定 | コンテキスト長 | 発表 | 備考 |
|---|---|---|---|---|
| Mistral 7B | w=4,096 | 32K | 2023/09 | SWA普及の立役者 |
| Mistral Nemo 12B | w=4,096 | 128K | 2024/07 | NVIDIA共同開発 |
| Mixtral 8x7B | w=4,096 | 32K | 2023/12 | MoE + SWA |
| Mixtral 8x22B | w=4,096 | 65K | 2024/04 | 大規模MoE + SWA |
| Phi-3-mini 3.8B | w=2,048 |
FlashAttention-2(Tri Dao, 2023)はSWAをネイティブにサポートしており、ウィンドウ外の計算を完全にスキップするハードウェアレベルの最適化が実現されている。
| 方式 | シーケンス長8K | 16K | 32K | 64K | 128K |
|---|---|---|---|---|---|
| Full Attention (naive) | 12ms | 48ms | 192ms | 768ms | OOM |
| FlashAttention-2 Full | 4ms | 14ms | 52ms | 200ms | 780ms |
| FlashAttention-2 SWA(w=4096) | 3ms | 6ms | 12ms | 24ms | 48ms |
| 速度比 (SWA/Full) | 1.3x | 2.3x | 4.3x |
シーケンス長が増えるほどSWAの利点が顕著になる。128Kトークンでは約16倍の高速化が得られる。
SWAの大きなメリットとして、KVキャッシュのサイズをウィンドウ幅wに制限できる点がある。標準的なFull Attentionではシーケンス長に比例してKVキャッシュが増大するが、SWAでは古いトークンのKVをウィンドウから外れた時点で破棄できる。
| シーケンス長 | Full Attention | SWA (w=4096) | 削減率 |
|---|---|---|---|
| 8K | 512MB | 256MB | 50% |
| 32K | 2GB | 256MB | 87.5% |
| 128K | 8GB | 256MB | 96.9% |
| 1M | 64GB | 256MB | 99.6% |
128Kトークンの場合、KVキャッシュが8GBから256MBに削減される。これはVRAMの節約に直結し、RTX 4090(24GB)でも大規模モデルのロングコンテキスト推論が可能になる。
SWAの最大の弱点は、ウィンドウ外のトークンへの直接的なアテンションが不可能な点である。多層スタックで間接的に情報は伝播するが、伝播の過程で情報が減衰する「情報ボトルネック」が発生する。
Q1: ウィンドウ幅はどう選べばよいか? A: 一般的にはGPUのL2キャッシュサイズに合わせる。A100(40MB L2)ではw=4096が最適、H100(50MB L2)ではw=8192まで効率的。実用上はw=4096がデファクトスタンダードで、Mistral・Gemma・Qwenなど主要モデルが採用している。
Q2: SWAだけで128Kトークンのコンテキストは本当に活用できるか? A: 完全には活用できない。Mistral 7Bのw=4096×32層=受容野131Kでカバーはしているが、ウィンドウ外の情報は間接伝達のため減衰する。Needle-in-a-Haystack評価では、128K後半の検索精度がFull Attentionに比べ5-15%低下する報告がある。
Q3: 自作PCでSWAモデルを高速に動かすコツは?
A: llama.cppの最新版はSWAのKVキャッシュ最適化に対応しており、--ctx-size 32768と--flash-attnフラグの併用が最も効果的。RTX 4070 Ti Super(16GB VRAM、約13万円)でMistral 7B Q4_K_Mが32Kコンテキストで約40 token/sの生成速度を実現する。
| 128K |
| 2024/04 |
| Microsoft、小型モデル |
| Gemma 2 9B/27B | w=4,096 | 8K | 2024/06 | 交互SWA/Full |
| Qwen2.5 7B | w=4,096 | 128K | 2024/09 | YaRN位置エンコーディング |
| DeepSeek-V3 | 動的 | 128K | 2025/01 | NSAの一部として |
| 8.3x |
| 16.3x |