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

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

マルチクエリアテンション(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

人工知能

「ディープマインドのアルファコードの力を解き放つ:コードライティングの革命」

導入 プログラミングの常に進化し続ける世界では、先を行くことが成功への鍵です。DeepMindのAlphaCodeは、革新的なAIパワー...

機械学習

「仕事は続けられますが、同じ仕事ではありません」

「AIが私たちのコーディングスキルに迫っている一方で、人間の言語を完全に習得したわけではありませんそれが私たちの競争上...

データサイエンス

「AIとともに音楽生成の世界を探索する」

はじめに AIを利用した音楽生成は、音楽の制作と楽しみ方を変革する貴重な分野として重要性を増しています。このプロジェクト...

人工知能

「ゲームからAIへ:NvidiaのAI革命における重要な役割」

Nvidiaは現在、Facebook、Tesla、Netflixよりも価値が高くなっていますロイターによると、株価は過去8ヶ月で3倍に増加しまし...

データサイエンス

「データサイエンティストが読むべきトップ7のNLP(自然言語処理)の本」

はじめに 自然言語処理(NLP)の最近の進歩は、データサイエンティストが最新の情報を把握するために不可欠です。NLPの書籍は...

データサイエンス

「AIおよび自動化により、2030年に存在しなくなるであろう6つのテクノロジージョブ」

「現在の進行方向に基づいて、バランスを保っているいくつかのテック系の職種をご紹介します」