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

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

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

AI研究

『このAI研究は、IFPおよびリポソーム蓄積を予測するための物理ベースの深層学習を発表します』

がん治療の精緻化を追求する中、研究者たちは、腫瘍のダイナミクスを飛躍的に向上させる画期的な解決策を導入しました。この...

AIニュース

「ジェネレーティブAIがビジネス、健康医療、芸術を再構築する方法」

紹介 生成的な人工知能、一般にはGenAIと呼ばれるものは、AI革命の最前線に位置し、ロボットの無限の創造力と問題解決能力を...

データサイエンス

「データ注釈は機械学習の成功において不可欠な役割を果たす」

「自動車から医療まで、AIの成功におけるデータアノテーションの重要な役割を発見しましょう方法、応用、そして将来のトレン...

機械学習

アプリケーションの近代化における生成AIの活用

「生成AIは、極度の自動化の時代において、アプリケーションの近代化プログラムを加速させるための強力なエンエーブラーとな...

機械学習

フィールドからフォークへ:スタートアップが食品業界にAIのスモーガスボードを提供

それは魔法のように機能しました。データセンターで実行されているコンピュータービジョンアルゴリズムが、インドの遠い小麦...

AI研究

「サリー大学の研究者が開発した新しいソフトウェアは、AIが実際にどれだけの情報を知っているかを検証することができます」

ここ数年、人工知能(AI)のドメインでいくつかの技術的なブレークスルーがあり、いくつかの産業やセクターに深い影響を与え...