Serving爆速に向けた色んなメモ
1,001番目のトークンを生成するには、モデルは 101 番目のトークンを生成する場合よりも 100 倍多くの FLOP を実行する必要があります
「is 」のクエリ、キー、値を計算します。
キャッシュから「What」、「color」、「is」、「the」、「sky」、「?」、「The」、および「sky」のキーと値のベクトルを取得し、先ほど計算した「is」のキーと値と連結します。
「is 」クエリとすべてのキーを使用して注目度スコアを計算します。
注目スコアとすべての値を使用して、「is 」の出力ベクトルを計算します。
バッチ内の各シーケンスの各トークンについて、d_head各アテンション レイヤーの各アテンション ヘッドのサイズのベクトル テンソルを 2 つ (キー テンソル 1 つと値テンソル 1 つ) 保存する必要があります。各テンソル パラメータに必要なスペースは精度によって異なります。完全精度 (FP32) ではパラメータ 1 つにつき 4 バイト、半精度 (BF16、FP16) ではパラメータ 1 つにつき 2 バイト、8 ビット データ型 (INT8、FP8) ではパラメータ 1 つにつき 1 バイトなどです。
https://scrapbox.io/files/672cdf9384d1a9d42d2ee2d6.png
ここにも書いてる
影響の少ない一部を捨てる
https://scrapbox.io/files/672d5e99df8181988f40e8e1.png
PagedAttention でカバーされていないもう 1 つの最適化は、リクエスト間でキーと値のキャッシュを再利用することです。これは、プロンプトが共通のプレフィックスを共有する場合に適用されます。 vLLM は、オンラインとオフラインの 2 つのモードで動作 両方のモードは基盤となる推論エンジンは同じ
vLLM は各 GPU を管理するワーカーを割り当てる
各ワーカーには独自のキャッシュ エンジンがある
使用可能なメモリは、合計 GPU メモリからモデルの重みのサイズ、中間アクティベーション サイズ、およびバッファー (通常は合計メモリの 10%) を引いた値に等しくなります。モデル サイズはすでにわかっていますが、中間アクティベーション サイズ (つまり、推論中に中間アクティベーションによって使用される最大メモリ) はわかっていません。vLLM は、ダミー データを実行してメモリ消費をプロファイリングすることでこの数値を決定します。ダミー データのサイズは、構成内のパラメータによって決定され、デフォルトではモデルがサポートする最大コンテキスト長に設定されます
言語モデルの処理において大きなボトルネックとなっている「プリフィリング」段階を大幅に高速化するもので、100万トークン(約700ページ分のテキスト)の入力に対して、処理時間を最大90%削減することができるという
KVキャッシュとメモリ管理、LLM計算最適化、クラウドLLM、新たな研究分野 分かりやすい図
https://scrapbox.io/files/672cea7d4a03d6434f9ca21a.png
結構引用されてる。Google DeepMindのひと
ネガティブからポジティブへの感情制御を実現したいとします(Li et al.、2018; ダサトリら、2020)。これを実現するために、ActAdd はまず、「好き」と「嫌い」などの対照的なプロンプトのペアに対するモデルのアクティベーションを比較します。それ以外は類似したプロンプトは、感情のターゲット次元に沿って異なります。次にActAdd は、ステアリング ベクトルを計算するためにこれらのアクティベーションの差を計算します。ActAddは推論時にステアリング ベクトルをフォワード パスに 直接追加するため、これらのベクトルは「仮想バイアス項」のように機能します。ステアリング ベクトルの方向に沿って推論時のアクティベーションをシフトすることにより、ActAdd はモデルを操縦して肯定的な感情の補完を生成します
画像内を笑顔に変えるベクトル等のアプローチに近い
様々な前例はあるがActAddにはサンプル2つだけでOKなのがアツい https://scrapbox.io/files/672cee4a63ae65950732c595.png
関連のないテキストのパフォーマンスは維持されます。
6層あたりが良さそう
なんでうまくいくかのまとめ:
モデルの内部には「意味の方向」がある。
その方向に沿って値を加えると、モデルの出力がその意味に関連する内容になる。
つまり、LLMは内部空間に意味の方向を持っており、それを利用することで出力を調整できる、ということです。
上記で引用されてた
★システムプロンプトによる介入よりも良かった
Representation Engineering (aka Activation Steering/Engineering)
嘘発見器とか脱獄攻撃の検出に使われる
表現を解釈することは、機械的解釈可能性 (MI) で人気のある回路レベルの分析よりも、LLM を理解し調整するためのより効果的なパラダイムであると主張
実際にこの記事でも引用されている
関連分野
Writing style and role-playing
ロールプレイ性能でも良い感じ
https://scrapbox.io/files/672cfef0dc07f9b5496e620c.png
https://scrapbox.io/files/672d0441b77583d262fc6d63.png
高レベルの概念はモデルの表現空間内で線形に表現される
https://scrapbox.io/files/672d049cad4037943e703946.png
LRH の 3 つの解釈:
サブスペース: 概念はサブスペースとして表現される
測定: 与えられた入力に対する概念の価値/存在は、中間表現上の線形プローブを使用して測定できます。
介入:与えられた入力に対する概念の価値/存在は、適切な線形代数演算によって調整できる。
https://scrapbox.io/files/672d62850e131af4094ec85b.png
https://scrapbox.io/files/672d62fa5bf8f5669fd4c9ed.png
表現を読み取る手法
表現を制御する手法
Reading Vector
Low-Rank Representation Adaptation (LoRRA)
https://scrapbox.io/files/672d6c7ff82dbe7d3eff8cb7.png
この可視化良いね
https://scrapbox.io/files/672d9ddbb8169857d68ffd9b.png
which was originally introduced by Zou et al. (2023)
「私は知識の追求に動機づけられています」「私は知的誠実さを重視しています」等のペルソナプレフィックスを付けた上で質問すると危ない回答等も許してしまうLLM。ペルソナプレフィックスをSteering Vectorでも検証 https://scrapbox.io/files/672dba8ae1d95e739a0120e9.png
フォワードパス計算して、アクティベーション平均取って差を取る
一番カンタンなのは対照的なプロンプトペアのデータセット作る
最後のトークン予測の各レイヤーの非表示状態を収集する
正の例と負の例の隠し状態の差を取って、相対的な隠し状態のセットを取得
これらの相対的な隠し状態に単一コンポーネントPCA を使用して、各レイヤーの制御ベクトルを取得
このプロセスでは、データセットを生成するために約 10 行のコードが必要で、さらにレイヤー PCA を適合させるのに約 1 分かかります。その後、すぐに推論を開始できます 具体的な実装書いてるのが非常にアツい
プロンプト エンジニアリングでは、要求を弱めたり強めたりする方法を考えるのは簡単ではありません
確かにこの違いはあるな
やっぱこの論文大正義やな
感情分離みたいにデモグラもPCAできんだろうか
論文を読んだとき、最初に思い浮かんだのは、個性を中心に設計された制御ベクトルが、特定のシミュラークラを形成するために混合および結合されるということでした。たとえば、みんなのお気に入りの GLaDOS を作るために、生意気さを少し、悪意を少し、科学へのこだわりを少し加えるのでしょうか?
そうですね、論文がいくつか出ています。それらは、2023年10月にAI Safetyセンターが発表した「表現エンジニアリング、AIの透明性へのトップダウンアプローチ」を参照
対照的なものを入れ込むことで概念を抽出している。善とか
なのでプロンプトの文言に対するロバスト性がありそう
ICLを学習させるのはある意味プロンプトエンジニアリングの効果をそこに押し込んでいるイメージを覚えた
これアクティベーションミックスしたりする実装でWrapper書いてて分かりやすいので見る
Steering Vector生成する生実装もアリ
Inspired by human lie detectors, we explore establishing a lie detector for LLMs.
嘘発見器
https://scrapbox.io/files/672e2ec26a67fab0271a9ea7.png
思考過程の前半で手短かつ大まかに結論を出したあと(Early Exit)、思考過程の後半でその結論を精査していく(Speculative Decoding)という流れで、迷いのない回答生成が実現しています。
https://scrapbox.io/files/672e377d2636f9f9c365df45.png
訓練時よりも長い系列を推論時に扱える性質が好ましいことから、外挿可能なPEの手法が提案されている。
Positional Encodingとは
端的に言うと、Self-Attentionではトークンの位置情報がないので、ベクトルを足して位置情報を表現しようというものです。
Transformerの中間のレイヤのactivationにclassifierを適用して後続のレイヤの伝播を省略し、推論時の高速化を図る手法。 Residual接続により、Boostモデルのように「レイヤが深くなるにつれて漸近的に正確な予測を生成している」という仮説に基づく LayerSkipでも使ってる
https://scrapbox.io/files/672e3ff2e6341f4ac217e4de.png
本当にいっぱい文章入れてその平均を取る
コントラストを際立たせるためポジティブなのであればポジティブ以外を引く
1. Training-based Style Vectors(3.1)
• 概要: スタイルベクトルを学習するために、各ターゲット文に対して個別に「ステアリングベクトル」を学習します。
• 手法: 特定のスタイルに属するターゲット文(例: 感情表現「ポジティブ」)に対して、ステアリングベクトル \mathbf{z}_x を計算し、モデルがその文に沿ったスタイルの出力を生成するように調整します。
• 学習プロセス: 各ステアリングベクトルは、指定された出力を得るために、勾配降下法(例: Adamオプティマイザー)を用いてトレーニングされます。
• トレーニングが完了するまでに、最大で400エポック程度かかるため、計算コストが高くなります。
• メリット: 精度の高いスタイルベクトルが得られるため、個別のターゲット文に合わせた詳細なスタイル制御が可能です。
• デメリット: 各ターゲット文ごとにステアリングベクトルを学習する必要があるため、リアルタイムの入力に対応するには計算コストが高すぎる。また、事前に元のスタイルを知る必要があり、複数のスタイルを切り替える場合は各組み合わせごとに学習が必要となります。
2. Activation-based Style Vectors(3.2)
• 概要: モデルにサンプルを入力して得られるアクティベーションから、スタイルカテゴリに特化したスタイルベクトルを直接算出します。
• 手法: 各スタイルカテゴリ(例: ポジティブ、ネガティブ)に属する文をモデルに通し、アクティベーションの平均をとってスタイルベクトルを計算します。学習は不要で、層ごとのアクティベーションの差分を直接利用します。
• 計算プロセス: スタイルカテゴリに属する文のアクティベーションの平均 \bar{\mathbf{a}}s^{(i)} から、他のスタイルの平均アクティベーション \bar{\mathbf{a}}{S \setminus s}^{(i)} を差し引いてスタイルベクトル \mathbf{v}_s^{(i)} を得ます。
• メリット: 学習が不要なため、計算コストが低く、リアルタイムでのスタイル制御に適しています。また、元のスタイル情報を事前に知る必要がなく、柔軟なスタイル切り替えが可能です。
• デメリット: 精度は3.1のアプローチよりもやや低く、ターゲット文ごとのきめ細かい制御には適しません。カテゴリ全体のスタイルのみを反映するため、より一般的なスタイルシフトには向いていますが、細かいニュアンスの調整には向かない場合もあります。
https://scrapbox.io/files/672e43650c0b369dd1d7b369.png