マルチクエリアテンションの解説
マルチクエリアテンションの解説'を美容とファッションの専門家が解説
マルチクエリアテンション(MQA)は、モデルのパフォーマンスを確保しながら、デコーダーでトークンを生成する速度を高めるためのアテンションメカニズムの一種です。
これは大規模言語モデルの時代に広く使用されており、多くのLLM(Large Language Models)がMQAを採用しています。例えば、Falcon、PaLM、StarCoderなどです。
マルチヘッドアテンション(MHA)
MQAの紹介に入る前に、まずはトランスフォーマーのデフォルトのアテンションメカニズムについて repviewします。
マルチヘッドアテンションはトランスフォーマーモデルのデフォルトのアテンションメカニズムであり、以下の図1に示されています。
- mPLUG-Owl2をご紹介しますこれは、モダリティの協力によってマルチモーダルな大規模言語モデル(MLLMs)を変換するマルチモーダルファウンデーションモデルです
- AIキャリアのトレンド:人工知能の世界で注目されているものは何ですか?
- CV2(OpenCV)は、コンピュータビジョンのためのオープンソースのライブラリですこのライブラリは、画像処理やコンピュータビジョンの応用を開発するために広く使用されています CV2を使用すると、さまざまな画像処理タスクを実行できますその中の一つが、イメージ上のパターンを見つけることです パターン検出は、コンピュータビジョンの重要な分野です例えば、顔検出や文字認識などのアプリケーションでは、パターン検出が一般的に使用されます
ただし、テキストの生成に関しては、トランスフォーマーデコーダーベースの自己回帰言語モデルには問題があります。
トレーニング中は、真のターゲットシーケンスにアクセスし、効率的に並列処理を行うことができます。
しかし、推論中には各位置のクエリが、その位置の前または前のすべてのキー値ペアに関連付けられます。つまり、特定の位置の自己アテンション層の出力は、次のトークンの生成に影響を与えます。並列計算を行うことができないため、デコーディングは遅くなります。
以下は、トランスフォーマーデコーダーベースの自己回帰言語モデルの自己アテンション層のデコーディングプロセスです。
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に示されています:
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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- このAI論文は、実世界の網膜OCTスキャンを使用して、年齢に関連した黄斑変性の段階を分類するためのディープラーニングモデルを紹介しています
- 「ネットイース・ヨウダオがEmotiVoiceをオープンソース化:強力でモダンなテキスト読み上げエンジン」というタイトルの記事です
- このAIの論文は「ミスからの学習(LeMa):エラー駆動学習を通じた大規模言語モデルにおける数学的推論の強化」という題目です
- フィリップスは、Amazon SageMakerをベースにしたMLOpsプラットフォームでAI対応のヘルスケアソリューションの開発を加速しています
- 「LoRAを使用してAmazon SageMakerでWhisperモデルを微調整する」
- 『Generative AIがサイバーセキュリティを強化する3つの方法』
- 「リトリーバル増強生成によるジェネラティブAIの最適化:アーキテクチャ、アルゴリズム、およびアプリケーションの概要」