マルチクエリアテンションの解説

マルチクエリアテンションの解説'を美容とファッションの専門家が解説

マルチクエリアテンション(MQA)は、モデルのパフォーマンスを確保しながら、デコーダーでトークンを生成する速度を高めるためのアテンションメカニズムの一種です。

これは大規模言語モデルの時代に広く使用されており、多くのLLM(Large Language Models)がMQAを採用しています。例えば、FalconPaLMStarCoderなどです。

マルチヘッドアテンション(MHA)

MQAの紹介に入る前に、まずはトランスフォーマーのデフォルトのアテンションメカニズムについて repviewします。

マルチヘッドアテンションはトランスフォーマーモデルのデフォルトのアテンションメカニズムであり、以下の図1に示されています。

図1

ただし、テキストの生成に関しては、トランスフォーマーデコーダーベースの自己回帰言語モデルには問題があります。

トレーニング中は、真のターゲットシーケンスにアクセスし、効率的に並列処理を行うことができます。

しかし、推論中には各位置のクエリが、その位置の前または前のすべてのキー値ペアに関連付けられます。つまり、特定の位置の自己アテンション層の出力は、次のトークンの生成に影響を与えます。並列計算を行うことができないため、デコーディングは遅くなります。

以下は、トランスフォーマーデコーダーベースの自己回帰言語モデルの自己アテンション層のデコーディングプロセスです。

def MHAForDecoder(x, prev_K, prev_V, P_q, P_k, P_v, P_o):    q = tf.einsum("bd, hdk−>bhk", x, P_q)    new_K = tf.concat([prev_K, tf.expand_dims(tf.einsum ("bd, hdk−>bhk", x, P_k), axis = 2)], axis = 2)    new_V = tf.concat([prev_V, tf.expand_dims(tf.einsum("bd, hdv−>bhv", x, P_v), axis = 2)], axis = 2)    logits = tf.einsum("bhk, bhmk−>bhm", q, new_K)    weights = tf.softmax(logits)    O = tf.einsum("bhm, bhmv−>bhv", weights, new_V)    Y = tf.einsum("bhv, hdv−>bd", O, P_o)    return Y, new_K, new_V

変数:

  • x: 現在のステップ(m + 1ステップ)の入力テンソル。形状は[b, d]です。
  • P_q, P_k: クエリとキーの射影テンソル。形状は[h, d, k]です。
  • P_v: 値の射影テンソル。形状は[h, d, v]です。
  • P_o: 学習済みの線形射影。形状は[h, d, v]です。
  • Prev_K: 前のステップからのキーテンソル。形状は[b, h, m, k]です。
  • Prev_V: 前のステップからの値テンソル。形状は[b, h, m, v]です。
  • new_K: 現在のステップのキーテンソルの追加を含むテンソル。形状は[b, h, m+1, k]です。
  • new_V: 現在のステップの値テンソルの追加を含むテンソル。形状は[b, h, m+1, v]です。

次元:

  • m: これまでの実行されたステップ数
  • b: バッチサイズ
  • d: 入力と出力の次元
  • h: ヘッド数
  • k: Q, Kテンソルの別の次元
  • v: Vテンソルの別の次元

マルチクエリアテンション(MQA)

マルチクエリアテンションは、マルチヘッドアテンションのバリエーションです。

MQAのアプローチは、Qの元のヘッド数を保持し、KとVには1つのヘッドのみを持つことです。つまり、すべてのQヘッドが同じKヘッドとVヘッドのセットを共有するため、「マルチクエリ」という名前が付けられます。図2に示されています:

Figure 2

MQAのデコーディングプロセスのコードは、MHAのコードと基本的に同じですが、K、V、P_k、およびP_vのtf.einsum方程式から次元を表す文字「h」が削除された点が異なります:

def MQAForDecoder(x, prev_K, prev_V, P_q, P_k, P_v, P_o):    q = tf.einsum("bd, hdk−>bhk", x, P_q)    new_K = tf.concat([prev_K, tf.expand_dims(tf.einsum ("bd, dk−>bk", x, P_k), axis = 2)], axis = 2)    new_V = tf.concat([prev_V, tf.expand_dims(tf.einsum("bd, dv−>bv", x, P_v), axis = 2)], axis = 2)    logits = tf.einsum("bhk, bmk−>bhm", q, new_K)    weights = tf.softmax(logits)    O = tf.einsum("bhm, bmv−>bhv", weights, new_V)    Y = tf.einsum("bhv, hdv−>bd", O, P_o)    return Y, new_K, new_V

性能

MQAは実際にどれだけ速度を向上させることができるのでしょうか?元の論文で提供されている結果表を見てみましょう:

上の表から、MQAのエンコーダーにおける速度の改善はそれほど顕著ではないが、デコーダーにおいてはかなり顕著であることが分かります。

また、論文では品質に関する実験も行われており、MQAはベースラインと比較してわずかに性能が低いことが示されています。詳細については、この記事の下部にあるリンク先の論文をご参照ください。

なぜMQAは推論の高速化を実現できるのですか?

よりメモリ効率が高い

MQAでは、キーと値のテンソルのサイズはb * kおよびb * vですが、MHAでは、キーと値のサイズはb * h * kおよびb * h * vであり、ここでhはヘッドの数を表します。

より低い計算量

KVキャッシュを使用することにより、MQAの各ステップでテンソルキーと値を計算するための計算コストは、MHAの1/h分になります。ここでhはヘッドの数を表します。

まとめ

一般的に、MQAは次の方法により推論の高速化を実現しています:

  • キーと値のキャッシュサイズがh(ヘッドの数)の倍だけ減少するため、GPUメモリに格納する必要があるテンソルも減少します。節約されたスペースはバッチサイズを増やすために使用でき、効率が向上します。
  • メモリから読み込むデータ量が減少し、計算ユニットの待ち時間が減少し、計算利用率が向上します。
  • MQAは、キャッシュ(SRAM)に収まる比較的小さなKVキャッシュを持っていますが、MHAはキャッシュに完全に格納できず、GPUメモリ(DRAM)から読み込まなければならないため、時間がかかります。

結論

MQAは2019年に提案され、当時は適用範囲がそれほど広くありませんでした。これは、以前のモデルではこれらの側面を考慮する必要がなかったためです。例えば、LSTMでは状態を1つだけ維持すれば十分であり、キャッシュを保持する必要がありませんでした。

トランスフォーマーは最初に提案されたとき、主にSeq2Seqタスク、特にエンコーダーデコーダーモデルで使用されました。しかし、モデルのスケールは大きくなく、実用的な需要もほとんどなかったため、MQAにはあまり注意が集まりませんでした。

その後、代表的なモデルであるBERTが登場し、トランスフォーマーエンコーダー構造に基づいて直接順方向のパスが実現されました。

最近では、GPTのようなトランスフォーマーデコーダーを基にした大規模言語モデルが広く利用されるようになったことで、推論のボトルネックが発見されました。その結果、数年前のテクニックを再評価し、非常に有用であることがわかりました。言い換えれば、主に大規模なGPTスタイルの生成モデルに対する実用的な需要があるためです。

最後に、このテキストに何かエラーや抜け漏れがある場合は、ご指摘いただければ幸いです。

参考文献

MQA論文:高速トランスフォーマーデコーディング:ワンライトヘッドがすべてを解決する

注意すべきはすべてです

https://paperswithcode.com/method/multi-query-attention

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

データサイエンス

「LangchainなしでPDFチャットボットを構築する方法」

はじめに Chatgptのリリース以来、AI領域では進歩のペースが減速する気配はありません。毎日新しいツールや技術が開発されて...

機械学習

「ステーブル拡散」は実際にどのように機能するのでしょうか?直感的な説明

この短い記事では、初心者に対して安定した拡散(Stable Diffusion)が直感的にどのように機能するかを説明していますこれは...

データサイエンス

「AI戦略にデータ管理を実装する方法」

データはAI戦略の核ですデータの品質、データの統合、データのガバナンスは、データを最も効果的に扱うための3つの主要な要素...

機械学習

中国における大量生産自動運転の課題

自律走行は、世界でも最も困難な運転の一つが既に存在する中国では、特に難しい課題です主に3つの要因が関係しています:動的...

AI研究

この人工知能の研究は、トランスフォーマーベースの大規模言語モデルが外部メモリを追加して計算的に普遍的であることを確認しています

トランスフォーマーベースのモデル(GPT-2やGPT-3など)によって達成された驚くべき結果は、研究コミュニティを大規模な言語...

コンピュータサイエンス

ゼロトラストから安全なアクセスへ:クラウドセキュリティの進化

この記事では、クラウドセキュリティの進化、ゼロトラストの採用、ベストプラクティス、そしてAIの将来的な影響に焦点を当て...