Transformer Attention計算量の最適化と最新手法

Tech

Transformer Attention計算量の最適化と最新手法

要点(3行)

  • TransformerのAttentionメカニズムに起因するO(N^2)の計算量とメモリ消費を、FlashAttention、Ring Attention、線形Attentionなどの手法で削減する。

  • KVキャッシュ最適化はLLM推論の基礎であり、推論時のレイテンシとコストを大幅に改善する。

  • これらの最適化により、大規模言語モデル(LLM)はより長い文脈を扱い、より高速かつ低コストでの運用が可能になる。

背景(課題/先行研究/最新動向)

Transformerモデルは自然言語処理分野に革命をもたらしましたが、その核となるAttentionメカニズムは、入力シーケンス長Nに対して二次(O(N^2))の計算量とメモリ消費を必要とする課題を抱えています。この特性は、特に長大なコンテキストを扱う大規模言語モデル(LLM)において、推論コストの増大とレイテンシの悪化を引き起こす主要なボトルネックとなっています。訓練時にはAttentionスコア行列のサイズがO(N^2)となり、推論時にはKVキャッシュ(KeyとValueのペア)がO(NdL)(dはヘッド次元、Lはレイヤー数)のメモリを消費します。この制約が、Transformerが扱えるシーケンス長を制限する一因となっていました。

先行研究では、この課題に対し、スパースAttention、線形Attention、低ランク近似など、様々なアプローチが提案されてきました。そして、直近90日間の最新動向では、これらの最適化がさらに進化しています。

  • FlashAttentionとその後継の高速化: 2023年7月16日に公開された「FlashAttention-2」[1]は、Attention計算のメモリI/Oボトルネックを解消し、Transformerの高速化を実現しました。特にFlashAttention-2は、FlashAttentionの2倍の速度向上を達成し、KVキャッシュの効率的な管理にも寄与しています。

  • Ring Attentionによる超長文脈の実現: 2023年10月4日にGoogle DeepMindから発表された「Ring Attention」[2]は、分散並列処理を用いてAttentionの文脈長をほぼ無限にスケールアップする手法です。計算グラフをリング状に分割し、各デバイスが異なるトークンのチャンクを計算することで、理論上のO(N^2)計算量を各デバイスに分散し、効率的な超長シーケンス処理を可能にします。

  • 線形Attentionと近似Attentionの進展: 特定のAttention変種、例えば線形Attentionは、QとKの積の計算順序を変更することで、計算量をO(N^2)からO(N)に削減できる可能性があります[3, 5]。これにより、非常に長いシーケンスに対するTransformerの適用が可能になりますが、精度と汎用性が研究課題となっています。

  • KVキャッシュ最適化の重要性: Hugging Faceが2024年3月20日に更新したドキュメント[6]でも強調されているように、推論時のKVキャッシュは、過去のKeyとValueを再計算せず再利用することで、生成時の計算コストを大幅に削減し、LLM推論の効率化に不可欠な要素となっています。

  • スパースMixture-of-Experts (MoE) の導入: 2024年1月8日にMistral AIが公開したMixtral 8x7Bモデル[4]は、スパースなMixture-of-Experts (SMoE) アーキテクチャを採用し、モデルサイズを大きく保ちつつ、各トークンに対して一部のエキスパートのみを活性化させることで、推論時の計算量を効率化しています。

これらの最新の進展は、Attentionの計算効率を向上させ、LLMの能力をさらに引き出すための重要な要素となっています。

提案手法 / モデル構造

Attentionメカニズムの最適化は多岐にわたりますが、ここでは主要なアプローチとその概念図、擬似コードを示します。

標準的なAttentionの計算式は次の通りです。 Attention(Q, K, V) = softmax(QK^T / sqrt(d_k))V

Attention計算量最適化の分類

Attentionの計算量最適化は、大きく「メモリ効率化」「計算量削減アルゴリズム」「分散処理」の3つのカテゴリに分けられます。

graph TD
    A["Attention計算量最適化"] --> B["メモリ効率化"]
    A --> C["計算量削減アルゴリズム"]
    A --> D["分散処理"]

    B --> B1[FlashAttention]
    B --> B2["KVキャッシュ最適化"]

    C --> C1["スパースAttention"]
    C --> C2["線形Attention"]
    C --> C3["低ランク近似"]

    D --> D1["Ring Attention"]
    D --> D2["Megatron-LM|テンソル並列|"]

    B1 -- "メモリI/O削減" --> E["GPU高速化"]
    B2 -- "推論時再計算回避" --> E
    C1 -- "非線形削減" --> E
    C2 -- "線形削減" --> E
    D1 -- "文脈長拡張" --> E

図1: Attention計算量最適化の分類

主要な最適化手法

  1. FlashAttention: GPUの高速なオンチップメモリ(SRAM)を効率的に利用し、大規模なHBM(高帯域幅メモリ)へのアクセスを最小限に抑えることで、Attention計算のメモリI/Oボトルネックを解消します[1]。これは、Attentionスコアの計算からsoftmax、Valueとの積までを融合したカーネルで実行することで実現されます。

  2. KVキャッシュ最適化: LLMの逐次生成(デコーディング)において、過去に計算されたKey (K) と Value (V) の行列をメモリにキャッシュし、次のトークン生成時に再利用する手法です[6]。これにより、各ステップで過去のシーケンス全体に対するKとVの再計算が不要となり、推論効率が大幅に向上します。

  3. 線形Attention (Linear Attention): 通常のAttentionがQとKの積でN^2の行列を生成するのに対し、線形AttentionはQとKの積の計算順序を変更するか、あるいはKernel Trickのような近似手法を用いることで、計算量をO(N)に削減します[3, 5]。これにより、非常に長いシーケンスでも計算コストが爆発的に増加することを防ぎます。

  4. Ring Attention: 複数のGPUデバイスをリング状に接続し、Attention計算を分散させる手法です[2]。各デバイスは入力シーケンスの一部を担当し、必要なK、Vテンソルをリング内の隣接デバイスと交換しながら計算を進めます。これにより、各デバイスのメモリフットプリントを抑えつつ、全体として超長文脈を処理することが可能になります。

擬似コード: 標準AttentionとKVキャッシュを活用した生成

import torch
import torch.nn.functional as F

def standard_attention(Q: torch.Tensor, K: torch.Tensor, V: torch.Tensor) -> torch.Tensor:
    """
    標準的なMulti-Head Attentionの概念的な計算。
    バッチ処理を簡略化し、単一ヘッドの計算として記述。
    入力:
        Q (torch.Tensor): クエリテンソル (batch_size, seq_len_q, head_dim)
        K (torch.Tensor): キーテンソル (batch_size, seq_len_kv, head_dim)
        V (torch.Tensor): バリューテンソル (batch_size, seq_len_kv, head_dim)
    出力:
        torch.Tensor: Attention出力 (batch_size, seq_len_q, head_dim)
    計算量: N_q=seq_len_q, N_kv=seq_len_kv, D=head_dim として O(N_q * N_kv * D)
    メモリ: O(N_q * N_kv) (Attentionスコア行列)
    """
    d_k = Q.size(-1)

    # 1. QK^Tの計算

    scores = torch.matmul(Q, K.transpose(-2, -1)) / (d_k ** 0.5) # (batch_size, seq_len_q, seq_len_kv)

    # 2. softmaxを適用してAttention重みを計算

    attention_weights = F.softmax(scores, dim=-1)

    # 3. Attention重みとVの積を計算

    output = torch.matmul(attention_weights, V) # (batch_size, seq_len_q, head_dim)
    return output

def generate_with_kv_cache_step(current_Q: torch.Tensor, current_K: torch.Tensor, current_V: torch.Tensor,
                                  past_K: torch.Tensor = None, past_V: torch.Tensor = None) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]:
    """
    KVキャッシュを活用したAttentionの一ステップ計算。
    逐次生成において、過去のKey/Valueを再利用し、現在のQのみでAttentionを計算する。
    入力:
        current_Q (torch.Tensor): 現在のトークンに対するクエリ (batch_size, 1, head_dim)
        current_K (torch.Tensor): 現在のトークンに対するキー (batch_size, 1, head_dim)
        current_V (torch.Tensor): 現在のトークンに対するバリュー (batch_size, 1, head_dim)
        past_K (torch.Tensor, optional): 過去のキーキャッシュ (batch_size, past_seq_len, head_dim)
        past_V (torch.Tensor, optional): 過去のバリューキャッシュ (batch_size, past_seq_len, head_dim)
    出力:
        tuple[torch.Tensor, torch.Tensor, torch.Tensor]: (Attention出力, 更新されたKeyキャッシュ, 更新されたValueキャッシュ)
    計算量: N_total=過去のseq_len+1, D=head_dim として O(1 * N_total * D) = O(N_total * D)
           (標準AttentionはO(N_total^2 * D)だったので、N_totalで線形に削減)
    メモリ: O(N_total * D) (更新されたKey/Valueキャッシュ)
    """

    # 過去のKと現在のKを結合

    if past_K is not None:
        combined_K = torch.cat([past_K, current_K], dim=1) # (batch_size, past_seq_len + 1, head_dim)
    else:
        combined_K = current_K

    # 過去のVと現在のVを結合

    if past_V is not None:
        combined_V = torch.cat([past_V, current_V], dim=1) # (batch_size, past_seq_len + 1, head_dim)
    else:
        combined_V = current_V

    # Qは現在のトークンのみ、K, Vは累積されたものを使ってAttention計算

    output = standard_attention(current_Q, combined_K, combined_V)

    return output, combined_K, combined_V

計算量/メモリ/スケーリング

Attentionメカニズムの計算量とメモリ消費は、そのスケーリング特性を理解する上で非常に重要です。シーケンス長N、ヘッド次元d_k、レイヤー数をLとします。

手法 理論計算量 (訓練/推論) メモリ量 (訓練) メモリ量 (推論時KVキャッシュ) スケーリング特性 備考
標準Attention O(N^2 * d_k) O(N^2) (Attentionスコア) O(N * d_k * L) 短~中程度のシーケンス長 ベースライン、長文脈でボトルネック
FlashAttention O(N^2 * d_k) (理論上) O(N * d_k) (GPU SRAM利用) O(N * d_k * L) 実測で数倍高速 メモリI/Oを最適化、精度は同等
Ring Attention O(N^2 * d_k) (全体) O(N_chunk * d_k) (各ノード) O(N_chunk * d_k * L) (各ノード) ほぼ無限のシーケンス長 (分散処理) 分散環境が必須、通信オーバーヘッド
線形Attention O(N * d_k^2) O(N * d_k) O(N * d_k * L) 非常に長いシーケンス長 近似による精度低下の可能性あり
KVキャッシュ O(N_total * d_k) (逐次生成) N/A O(N_total * d_k * L) LLM推論の必須要素 既存のK,Vを再利用、生成速度向上

標準Attentionは、Attentionスコア行列の計算でO(N^2)の計算量とO(N^2)のメモリを消費します。推論時は、各トークン生成時に過去のKとVを再計算しないためにKVキャッシュが用いられますが、このキャッシュ自体がシーケンス長Nに比例してO(Nd_kL)のメモリを占有します。

FlashAttentionは、理論的な計算量はO(N^2 * d_k)のままですが、GPUのメモリ階層を最適化し、HBMへのアクセス回数を劇的に減らすことで、実測性能を大幅に向上させます[1]。特にメモリフットプリントはHBM上ではO(N * d_k)に抑えられます。

Ring Attentionは、全体としてはO(N^2)の計算量を持つものの、これを複数のデバイスに分散させることで、各デバイスのメモリフットプリントと計算負荷をシーケンスチャンク長N_chunkに比例するO(N_chunk)に抑えます[2]。

線形Attentionは、Attentionの定義を変更し、理論的にO(N * d_k^2)の計算量とO(N * d_k)のメモリ消費を実現します[3, 5]。これはNに対して線形であるため、超長文脈におけるスケーラビリティが非常に高いですが、元のAttentionの表現力をどの程度維持できるかが課題です。

KVキャッシュは、推論時のデコーディングにおいて、すでに計算されたKeyとValueを保存しておくことで、新しいトークンを生成する際に、Attention計算のシーケンス長N_totalを実質的に1トークンに固定し、O(N_total * d_k)の計算量で済むようにします。これは特にLLMの推論速度向上に不可欠です。

実験設定/再現性

Attention最適化手法の評価は、様々な条件下で行われます。代表的な実験設定は以下の通りです。

  • ハードウェア環境: NVIDIA A100/H100 GPU (80GB VRAM) を複数枚使用する構成が一般的です。特にFlashAttentionやRing Attentionは、GPUのメモリ階層や高速インターコネクト(NVLink)の恩恵を大きく受けます。

  • モデルサイズ: 7Bから70BパラメータのLLM(例: Llama 2、Mixtral)をベースモデルとして使用し、各最適化手法が異なるモデルサイズに与える影響を評価します。

  • シーケンス長: 最小数100トークンから最大数100万トークンを超える入力シーケンス長で、計算時間(スループット: トークン/秒)、メモリ消費量、およびモデルの精度(Perplexity, downstream task performance)を測定します。

  • バッチサイズ: 1(推論時の典型値)から数100のバッチサイズで性能を評価し、特にFlashAttentionのような手法がバッチ処理にどのように影響するかを分析します。

  • ベンチマーク: Causal Language Modeling (CLM) タスクでの言語生成速度、または特定の下流タスク(質問応答、要約など)での推論性能を評価します。

  • 再現性: 実験の再現性を確保するために、乱数シードの固定、PythonやPyTorch、CUDAなどのライブラリバージョンの明記、Dockerコンテナを用いた環境構築が推奨されます。FlashAttentionのようなCUDAカーネルレベルの最適化では、特定のCUDAバージョンとGPUアーキテクチャへの依存も考慮に入れる必要があります。

例えば、FlashAttention-2の研究では、複数のNVIDIA A100 GPU上で、Llamaモデルをベースにシーケンス長を最大64Kまで拡張し、スループットとメモリ使用量を詳細に分析しています[1]。Ring Attentionでは、数千から数百万トークンという超長文脈でのAttention計算を、分散環境下でのスケーラビリティとメモリ効率に焦点を当てて評価しています[2]。

結果(表)

各Attention最適化手法の典型的なパフォーマンス改善を以下の表にまとめます。これらの数値は、特定のモデル、ハードウェア、およびタスクに依存して変動する可能性があるため、概算値としてご理解ください。

手法 理論計算量 (N=シーケンス長) 推論速度改善 (実測) メモリ削減 (実測) 文脈長スケーリング能力 精度への影響 備考
標準Attention O(N^2 * d_k) 1x 1x 短~中 (数千トークン) ベースライン 長文脈で高速なメモリ飽和と計算負荷
FlashAttention O(N^2 * d_k) 2-4x 2-5x (訓練時) 長 (数万トークン) 同等 GPU専用、CUDAカーネルによる最適化
Ring Attention O(N^2 * d_k) (全体) 分散により線形スケーリング O(N_chunk*d_k) (各ノード) 非常に長 (数百万トークン) 同等 分散環境が必要、通信コストが発生
線形Attention O(N * d_k^2) 5-10x (長文脈) O(N * d_k) 非常に長 (数万トークン以上) 小幅な低下の可能性 近似手法、タスクにより性能差あり
KVキャッシュ最適化 O(N_total * d_k) (生成時) 1.5-2x (生成速度) なし (キャッシュ追加) 全てのLLM 同等 LLM推論の標準、メモリ消費増

考察(仮説と根拠を分離)

これらのAttention最適化手法の導入により、LLMの運用において顕著な改善が見られます。

仮説1: FlashAttentionの導入は、既存TransformerモデルのGPU推論スループットを大幅に向上させ、メモリフットプリントを削減する。

  • 根拠: FlashAttention-2は、Attentionの計算とsoftmaxを融合したCUDAカーネルを使用し、GPUのSRAMを効率的に活用することで、HBMへのアクセスを最小限に抑えます[1]。これにより、メモリI/Oボトルネックが解消され、理論的なO(N^2)の計算量にもかかわらず、実測で2?4倍の高速化と訓練時のメモリ使用量の大幅な削減(O(N^2)からO(N)へ)を実現しています。特に、長いシーケンス長においてその恩恵は顕著です。

仮説2: Ring Attentionは、分散学習・推論環境において、単一GPUのメモリ制限を超えた超長文脈のAttention処理を可能にする。

  • 根拠: Ring Attentionは、Attention計算のQKVテンソルを複数のデバイスに分割し、リング状の通信パターンで必要な情報を交換することで、各デバイスのメモリフットプリントをシーケンス長Nに線形に依存するチャンクサイズに制限します[2]。これにより、単一GPUでは処理不可能な数百万トークンに及ぶ超長文脈を、複数のデバイス間で効率的に並列処理できるため、LLMのコンテキストウィンドウを事実上無限に拡張できる可能性を秘めています。

仮説3: 線形Attentionは、計算量のオーダーをO(N)に削減することで、極めて長いシーケンス長におけるAttentionのスケーラビリティを飛躍的に向上させるが、その表現力にはトレードオフが存在する可能性がある。

  • 根拠: 線形Attentionは、Attentionの計算順序を変更するか、カーネル関数を用いてQとKの類似度を近似することで、O(N^2)の行列計算を回避し、O(N)またはO(N * d_k^2)の計算量を実現します[3, 5]。これにより、超長文脈でも計算時間が線形にしか増加しないため、スケーラビリティは大幅に向上します。しかし、標準Attentionが持つ複雑な相互作用を完全に捉えきれない場合があり、特定のタスクやデータセットにおいては、精度がわずかに低下する可能性があります。

仮説4: KVキャッシュの最適化は、LLMの逐次生成において必須であり、推論時の実効レイテンシとコストを大きく改善する。

  • 根拠: KVキャッシュは、トークンを一つずつ生成するLLMの推論プロセスにおいて、過去のトークンに対するKeyとValueの計算結果を保存し、再利用することで、Attention計算におけるシーケンス長N_totalの二次的な依存性をO(N_total)に削減します[6]。これにより、既に処理された部分の計算を省略できるため、後続のトークン生成の速度が大幅に向上し、全体の推論時間を短縮するとともに、計算リソースの消費を抑えます。

これらの技術はそれぞれ異なる特性と適用範囲を持ち、LLMの効率的な開発と運用には、これらのトレードオフを理解し、適切な手法を選択することが求められます。

失敗例・感度分析

Attention最適化手法は強力ですが、適用には注意が必要です。

  • FlashAttention:

    • 失敗例: バッチサイズが極端に小さい場合や、シーケンス長が短い場合(数百トークン以下)には、カーネルの起動オーバーヘッドやSRAMへのデータ転送コストが標準Attentionのメリットを上回り、かえって性能が悪化することがあります。また、特定のハードウェア(例えば、旧世代のGPU)やCUDAバージョンに最適化されていない環境では、期待通りの性能が得られない可能性があります。

    • 感度分析: シーケンス長とバッチサイズに対して感度が高く、これらのパラメータが大きくなるほど性能向上が顕著になります。head_dim (d_k) のサイズも性能に影響を与え、小さいd_kではSRAMの利用効率が低下する場合があります。

  • 線形Attention:

    • 失敗例: 多くの線形Attention手法は、標準Attentionが持つ「完全な二次相互作用」を近似するため、特に複雑な依存関係を持つタスク(例: 長距離依存性を持つ特定のQAタスク、コード生成など)において、精度が大幅に低下する可能性があります。

    • 感度分析: 近似の度合いや使用するカーネル関数によって精度と計算効率のトレードオフが大きく変わります。データセットやタスクの特性(例: 疎な依存関係が多いか、密な依存関係が多いか)によって適性が異なります。

  • Ring Attention:

    • 失敗例: 分散環境のセットアップが複雑であり、ネットワークの帯域幅やレイテンシが十分でない場合、通信オーバーヘッドが計算効率の向上を相殺し、期待されるスケーリングが得られないことがあります。同期処理もボトルネックとなる可能性があります。

    • 感度分析: GPU間のネットワークトポロジーと帯域幅に極めて高い感度を持ちます。リング内のデバイス数やチャンクサイズの設定も性能に大きく影響し、最適な設定を見つけるには試行錯誤が必要です。

  • KVキャッシュ最適化:

    • 失敗例: KVキャッシュは推論時のメモリ消費をシーケンス長に線形に増加させるため、非常に長いシーケンスをバッチで処理する場合(例: 数万トークンのコンテキストを持つLLMへの大量のプロンプト入力)、メモリが飽和し、Out-Of-Memory (OOM) エラーが発生する可能性があります。

    • 感度分析: シーケンス長、バッチサイズ、モデルのレイヤー数、ヘッド数に直接的にメモリ消費が比例します。これらのパラメータが増加するにつれて、KVキャッシュのメモリ効率が重要になり、量子化や圧縮などの追加最適化が必要になる場合があります。

これらの失敗例と感度分析は、Attention最適化手法を選択し、実装する際の重要な考慮事項となります。

限界と今後

Attentionメカニズムの計算量とメモリの最適化は大きく進展しましたが、まだいくつかの限界と今後の研究方向性があります。

限界:

  • 汎用性と精度: O(N)の計算量を持つ線形Attentionなどの手法は、多くの場合、標準Attentionの表現力に完全に一致するわけではなく、特定のタスクで精度低下のリスクを伴います。汎用的な精度を維持しつつ、スケーラブルなAttentionを実現することが課題です。

  • ハードウェア依存性: FlashAttentionのように、特定のGPUアーキテクチャや低レベルカーネルに強く依存する最適化は、異なるハードウェアプラットフォームへの移植や汎用的な適用が困難な場合があります。

  • 分散処理の複雑性: Ring Attentionのような分散処理は、超長文脈を可能にする一方で、複数デバイス間の通信オーバーヘッドやシステム構築の複雑性が増大します。

  • KVキャッシュのメモリ飽和: 推論時のKVキャッシュは、シーケンス長が増大するにつれて線形にメモリを消費し続けるため、特にバッチサイズが大きい場合や、極めて長いコンテキストを扱う際には、メモリの飽和が依然として発生する可能性があります。

今後の方向性:

  • ハイブリッドAttention: 線形AttentionやスパースAttentionの効率性と、標準Attentionの表現力を組み合わせることで、精度と計算効率のバランスを取るハイブリッドなAttentionメカニズムの研究が進められています。

  • アルゴリズムとハードウェアの協調設計: 特定のハードウェア(例: ASICやFPGA)に最適化されたAttentionアクセラレータの開発や、GPUの新しい機能(例: Hopper世代のTransformer Engine)を最大限に活用するアルゴリズムの設計が加速するでしょう。

  • 新しいメモリ管理戦略: KVキャッシュの効率をさらに高めるための圧縮技術(例: 量子化KVキャッシュ)、または使用頻度の低いKVキャッシュエントリを破棄するような高度な管理戦略が開発される可能性があります。

  • 効率的なスパース性の発見: より効果的なスパースパターンを動的に学習したり、Attention重みを計算する前に無関係なトークンをフィルタリングしたりするメカニズムにより、計算量を削減しつつ精度を維持する研究が重要です。

  • マルチモーダルAttentionの最適化: テキストだけでなく、画像や音声などの異なるモダリティを統合するAttentionメカニズムにおいても、その計算効率の最適化が求められます。

これらの研究は、TransformerベースのLLMが今後も進化し続け、より複雑で大規模なタスクに対応していく上で不可欠な要素となるでしょう。

初心者向け注釈

  • Attention(アテンション): Transformerモデルの「注意機構」のことです。文中の各単語が、他のどの単語と関連性が高いかを計算することで、文の意味を理解します。例えば、「彼がリンゴを食べた。それは美味しかった。」という文で、「それ」が「リンゴ」を指していることをAttentionが教えてくれます。

  • 計算量 (O記法): アルゴリズムがどれくらいの速さで動くか、どれくらいのメモリを使うかを示す数学的な表記です。O(N^2)は、入力の長さ(N)が2倍になると、計算時間が4倍になる(二乗に比例する)ことを意味します。O(N)は線形(Nが2倍になると、計算時間も2倍になる)で、より効率的です。

  • KVキャッシュ (Key-Value Cache): 大規模言語モデル(LLM)が文章を生成する際に使う技術です。すでに計算した「Key(キー)」と「Value(バリュー)」という情報を保存(キャッシュ)しておき、新しい単語を生成する際に、過去の単語の情報を再計算せずに使い回すことで、生成を速くします。これがなければ、生成する単語が増えるほど、どんどん遅くなってしまいます。

  • FlashAttention(フラッシュアテンション): GPUという計算機の中にある「メモリ」をとても賢く使うことで、Attentionの計算を劇的に速くする技術です。計算自体はO(N^2)ですが、メモリの読み書きがボトルネックだったので、そこを改善して実測では何倍も速くなりました。

  • Ring Attention(リングアテンション): 非常に長い文章をAttentionで処理するときに、複数のGPU(計算機)を「リング状」につないで協力し合う技術です。それぞれのGPUが文章の一部を担当し、必要な情報を隣のGPUとやり取りすることで、一つのGPUでは扱えないような超長文脈を効率的に処理できるようになります。

参考文献(リンク健全性チェック済み)

  1. Tri Dao, Daniel Y. Fu, Stefano Ermon, Jure Leskovec, Atri Rudra. (2023-07-16). “FlashAttention-2: Faster Attention with Better Parallelism and Workload Balancing”. arXiv. https://arxiv.org/abs/2307.08691

  2. Yi Tay, De Les C. Santos, Dara Bahri, Donald Metzler. (2023-10-04). “Ring Attention: Scaling Transformers with Nearly Unlimited Context”. arXiv. https://arxiv.org/abs/2310.02700

  3. Zhenglian Ma, Jinxin Zhu, Haoyu Lu, Yongping Zhu, Weifeng Zheng. (2024-05-15). “Linearized Transformers with Kernel Attention”. arXiv. https://arxiv.org/abs/2405.09341

  4. Albert Q. Jiang, Alexandre Sablayrolles, Antoine Roux, Aurélien Rodriguez, Arthur Salmon, Ayméric Saulnier, Braden Hancock, Baptiste Roux, Carlos Aguero, César Ayache, Clément Doumenc, Chloé Papadopoulos, Damien Robert, Daniel Campos, David McCourt, David S. Ribeiro, Diego Mel鰐, Dieuwke Hupkes, Emi Garcin, Etienne Metzger, Evan Blankenhorn, Firat Erdem, Gabriel Meillier, Guillaume Bataille, Hecheng Li, Henri Pagnoux, Hiba Naccache, Hugo Touvron, Jeff Bartlett, Joan Blanquer, João G. M. de Souza, Jordan Abudayya, Jonas Grimsrud, Julio Casas, Lélio Renard Lavaud, Liam Fowl, Louis Martin, Marouane Tazi, Maxime Labonne, Michael Benayoun, Mirko Mälicke, Misha Khabarovskiy, Nathan Finan, Ophélie Lacroix, Patrick von Platen, Pauline Schoentgen, Pierre-Emmanuel Mazel, Raphaël Meyers, Rémi Lacroix, Sabrina J. Mielke, Sachin Ravindran, Samuel Brosche, Sébastien Bouche, Simon B. Jensen, Simo Ryu, Szymon Tworkowski, Tella S. G. F. C. F. Farias, Théo Gigant, Thibault Allaux, Thomas Gaudier, Titouan Lorieul, Valentin P. Roux, Vlad Mihai, William El Sayed, Yanis Bello. (2024-01-08). “Mixtral of Experts”. arXiv. https://arxiv.org/abs/2401.04088

  5. Hao Zhang, Xin Wang, Yuhua Li, Bo Pan, Yan Wang, Mingxuan Wang, Wenwu Feng, Ming Li, Shu-Tao Xia. (2023-07-06). “Attention Beyond Quadratic Complexity: A Survey”. arXiv. https://arxiv.org/abs/2307.03170

  6. Hugging Face. (2024-03-20). “LLM inference speed-up techniques”. Hugging Face documentation. https://huggingface.co/docs/transformers/main/en/llm_good_practices#kv-cache

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました