oobabooga の tips
AIのべりすとのようにプロンプトを編集しながらテキストを生成する
Default タブでできる。
テキスト生成のショートカットは Shift + Enter。
CPU のスレッド数を制限する
CPU で処理する場合4スレッドあたりで性能の限界が来る。E コアや Hyperthreading がスレッドをつかむと遅くなるので、Model タブで実行スレッドを制限する。
一部の処理を GPU にオフロードする
GGML や GGUF のモデルは一部の処理を GPU にオフロードして高速化できる。VRAM8GB の場合は、Model タブで以下のように設定する。
- n-gpu-layers:35
- low-vram:チェック
ベンチ
500 トークン出力した場合、実行時間を 79 秒短縮できた(27%高速)。
環境
- Ryzen 5 2600
- 4 thread
- DDR4@2666MHz 32GB
- RTX3050 VRAM8GB
- Model:nous-hermes-13b.ggmlv3.q4_0.bin
CPU
- prompt:460ms/token(2.17 token/sec)
- text generation:538ms/token(1.86 token/sec)
- total 295 sec
GPU 35 layer
- prompt:193ms/token(5.18 token/sec)
- text generation:400ms/token(2.5 token/sec)
- total 216 sec
Parameters タブの Generation タブ
Generation タブでは文の長さや、出力するトークンのサンプリングアルゴリズムが設定できる。
サンプリングアルゴリズムは大きく分けて2種類ある。確率の大きいものを選択する(Top_p, Top_k, Top_a)ものと、確率の小さいものを捨てる(typical_p, tfs)ものだ。
max_new_token
出力テキストの最大長さ。短くすると出力が速くなる。
Temperature
解答のランダムさ。0にするとほぼ毎回同じ解答になる。小さい Temperature は確率の差を大きくし、大きい Temperature は確率の差を小さくする。
Temerature は出力層のソフトマックス関数に作用する。実行順は Temperature -> Top_k -> Top_p。
Top_p
Top_p のアルゴリズムは以下のようなものだ。
- 次のトークンの確率を降順にソートする
- 確率の大きい順から選択肢に加える。このとき累積確率を計算し、累積確率が Top_p で指定した確率を超えるまでこれを繰り返す
- 選択肢に加えたトークンの確率を正規化して、確率的にトークンを選択して出力する
実行順は Temperature -> Top_k -> Top_p。1にすると無効になる。
min_p
(min_p) * (最高確率のトークン) 未満の確率のトークンを切捨て。Top_a の2乗をなくしたもの。
Top_k
Top_k のアルゴリズムは以下のようなものだ。
- 次のトークンの確率を降順にソートする
- 確率の大きい順から、Top_k で指定した個数だけ選択肢に加える
- 選択肢に加えたトークンの確率を正規化して、確率的にトークンを選択して出力する
実行順は Temperature -> Top_k -> Top_p。Top_k と Top_p を両方行う場合、Top_k のトークンピックは行われない。
repetition_penalty
フレーズの繰り返しを抑制する。1にすると無効になる。値が大きいと繰り返しが少なくなる。
1.0 - 1.25:推奨値
1.25 - 1.75:ストーリーの作成やアイデア出しではこの値も使える
1.75 - 2.0:記事の要約やユニークな商品説明をさせる場合に使える
repetition_penalty_range
何トークン前までペナルティを適用するかを決める。0にすると全出力が対象になる。
typical_p
確率の足切り。typical_p に満たない確率のトークンは選択されない。1にすると無効になる。
presence_penalty(additive_repetition_penalty)
repetition_penalty に似ているが、こちらはオフセットがついている。
0:ペナルティなし
低い数値:繰り返しが多い
大きい数値:繰り返しが少ない
frequency_penalty
コンテキスト内にトークンが現れた回数に応じてペナルティを追加する。ペナルティ量に上限がないので注意する必要がある。
epsilon_cutoff
1e-4 単位で設定する。推奨値は3。トークンがサンプリングから除外される確率の下限を設定する。top_p、top_k、および eta_cutoff を 0 に設定すると使える。
eta_cutoff
1e-4 単位で設定する。推奨値は3。top_p、top_k、および epsilon_cutoff を 0 に設定すると使える。
tfs(Tail Free Sampling)
次のトークンの確率を降順にソートして、2回微分値の絶対値を計算する。2回微分値の絶対値を正規化して、しきい値を上回ったトークンから確率的にトークンを選択する。
要は選択確率の小さい後ろの方のトークンは2回微分値が小さいので、しきい値を適切に設定すればロングテールを切り捨てられるというアルゴリズム。
top_a
ソースを読むと、top_a * (max(probs))2 を下回るトークンを除外している。
encoder_repetition_penalty
Hallucinations filter とも呼ばれる。prior text(学習素材)に含まれていないトークンにペナルティを与える。値を大きくすると、コンテキストから外れることが少なくなる。
no_repeat_ngram_size
慣用句などを抑制する。大きい値は長い慣用句の繰り返しにペナルティを与え、小さい値は語や文字の繰り返しにペナルティを与える。0もしくは大きい値にするのがよい。
min_length
最低出力長さの設定。
guidance_scale
プロンプトを守らせる度合い。大きいほどプロンプトの影響力が大きくなる。
Negative prompt
使ってほしくない語を入れる。guidance_scale が1以外の時に機能する。
mirostat_mode
mirostat は繰り返しと矛盾とを防ぐ目的で導入される。テキスト生成時の perplexity(サンプル候補のトークンの数)を制御する。1で Mirostat、2で Mirostat 2.0 を使う。
mirostat_tau
Mirostat のターゲットエントロピーで、生成されたテキストの望ましい perplexity(サンプル候補のトークンの数)を表している。小さい値にすれば一貫した多様性のない出力になり、大きい値にすれば多様性はあるが一貫性のない出力になる。デフォルトは 5.0。
mirostat_eta
Mirostat の学習率。生成されたテキストからのフィードバックに対する応答性に影響する。デフォルトは 0.1。
Mirostat mode -- Possibly missing parameters or unclear usage #312
penalty_alpha
モデルの予測の信頼性と前のコンテクストに似ているトークンに適用されるペナルティとのバランスを制御する。
0.00 - 1.00:予測の信頼性を重視するので、出力されるテキストは一貫性がある。ただし繰り返しや同じような出力になりやすい。
1.01 - 3.00:繰り返しを避けるようになるが、一貫性が失われがち。
3.01 - 5.00:一貫性をかなぐり捨てて、似たようなテキストの出力を全力で避ける。
num_beams
ビームサーチで使われるパラメータ。ビームサーチは幅優先探索のアルゴリズムで、もっとも高い確率の次のトークンを選択するのではなく、テキスト全体のスコアを見て次のトークンを選択する。1にすると無効になる。
複数の選択肢をメモリに保持する必要があるので、メモリ使用量が増える。また、num_beams をむやみに大きくしても、確率の低いトークンを多く保持するだけなので出力品質が上がるわけでもない。
length_penalty
ビームサーチで使われるパラメータ。
-5.00 to -0.01:一文が短くなる。簡潔な回答が欲しいときに使える。
0.00:デフォルト値。ペナルティなし。
0.01 to 5.00:一文が長くなる。詳細な説明が欲しいときに使える。
early_stopping
ビームサーチで使われるパラメータ。クエスチョンマークやピリオドなど文を終了させるパスを見つけた時に、すぐにそれを確定させる。計算が速くなるが品質は落ちる。
early_stopping を有効にすると文が短くなりがちになる副作用がある。
Grammar
リスト形式や、JSON 形式で出力させたい場合に使える。
詳細は GBNF Guide を参照。
外部リンク
Token selection strategies: Top-K, Top-p, and Temperature
Sample interface, new samplers, #1126
翻訳
Session タブ
google_translate にチェックを入れると、Chat タブの下に Active translation のチェックボックスが現れる。これにチェックを入れると、テキスト出力時に自動的に翻訳される。
ただし翻訳前を残せないので、使いどころが限られる。
Multi translate plugin for oobabooga/text-generation-webui
Extension で翻訳前を残したり翻訳ツールを選択できたりする。