あなたはOpenAIのリサーチサイエンティストの面接を受けていますね。 面接官はこう尋ねます: 「LLMのコンテキスト長を2Kトークンから128Kトークンに拡張するにはどうすればいいですか?」 あなた:「128Kの文脈を持つ長いドキュメントでモデルを微調整します。」 面接終了。 見落とした内容は以下の通りです:
コンテキストウィンドウの拡張は、より大きな行列だけではありません。 従来のトランスフォーマーでは、トークンを 8 倍に拡張すると、アテンションの二次複雑度により、メモリ ニーズが 64 倍に増加します。下の画像を参考に! では、どうやって管理すればよいのでしょうか? 続ける。。。👇
1) まばらな注意 これにより、アテンション計算がトークンのサブセットに制限されます。 - ローカルアテンションを使用する (トークンは隣接するものにのみ参加します)。 - どのトークンに焦点を当てるべきかをモデルに学習させます。 しかし、これには計算の複雑さとパフォーマンスの間にトレードオフがあります。
同様の考え方はModernBERTでも使われています。 → 3層ごとに全域注意 → 局所的な注意(128トークン)その他 結果: - 16倍の長い配列長 - はるかに優れた性能 - 最もメモリ効率の良いエンコーダ シンプルでありながら力強い。
論文から抜粋した直感的な説明は次のとおりです。 本を読んでいる自分を想像してみてください。読むすべての文について、そのほとんどを理解するにはプロット全体を完全に認識する必要がありますか (完全なグローバルな注意)? それとも、メインプロットに対するその重要性を時々振り返る限り、現在の章を認識するだけで十分ですか(ローカルな注目)(世界的な注目)? ほとんどの場合、後者です。
2) フラッシュアテンション これは、従来のアテンションメカニズムの正確さを維持する、高速でメモリ効率の高い方法であり、つまり、グローバルアテンションを効率的に使用します。 全体のアイデアは、GPU メモリ内のデータ移動を最適化することを中心に展開しています。 理解しましょう!
背景の詳細: - スレッドは実行の最小単位です。 - 複数のスレッドがブロックを形成します。 また: - ブロック内のスレッドは、SRAM と呼ばれる高速 (ただし希少な) メモリを共有します。 - すべてのブロックは、HBM (豊富ですが遅い) と呼ばれるグローバル メモリを共有します。 これを👇チェックしてください
アテンションは、SRAMとHBMの間で大きな行列を移動します。 QK を計算するには: - 行列をスレッドに配布する - compute、および - HBMに製品を送る softmaxを計算するには: - 製品をスレッドに分配する - compute、および - HBMに出力を送信する すべてのレイヤーについて繰り返します。 これを👇チェックしてください
フラッシュアテンションには、SRAMを利用して中間結果をキャッシュするハードウェアレベルの最適化が含まれます。 このようにして、冗長な動きが減り、標準的な注意方法よりも最大 7.6 倍の速度が得られます。 これを👇チェックしてください
3) DeepSeek Sparse Attention(DSA) DeepSeekの新しいV3.2モデルでは、複雑度をO(L²)からO(Lk)に低くし、kが固定されるDeepSeek Sparse Attention(DSA)を導入します。 仕組み: 軽量のライトニングインデクサーは、各クエリで実際に重要なトークンを評価します。 ヘッド数は少なく、FP8で動作し、計算コストも低く。 その後、選択機構が上位k個のキー値エントリのみを取得します。 重要な洞察は、コンテキストの長さに関係なく、1クエリごとに選ばれるトークンは2048個だけだということです。 したがって、高価な注意計算はこの小さな部分集合上で行われ、128Kの全列では行われません。
128Kのコンテキストでは、プリフィルコストは100万トークンあたり~$0.65から~$0.35に下がります。そしてデコードは~$2.4から~$0.8に下がります。 そしてパフォーマンスは変わりません。一部の長期コンテキストベンチマークでは、V3.2の方が実際により高いスコアを得ています。 注目が少なくなるのは新しいことではありません。しかし、品質を落とさずに機能させるのは難しいです。 LLMのコンテキストの長さを長くするための他の手法にはどんなものがありますか?
152.6K