Transformers documentation
生成
生成
各フレームワークには、テキスト生成用の generate メソッドが、それぞれの GenerationMixin クラスに実装されています:
- PyTorch の generate() は GenerationMixin に実装されています。
generate メソッドには、GenerationConfig クラスのインスタンスを引数として渡すことができます。生成メソッドの動作を制御する生成パラメータの完全なリストについては、このクラスを参照してください。
モデルの生成設定の検査方法、デフォルト値、パラメータのアドホックな変更方法、およびカスタマイズされた生成設定の作成と保存方法については、テキスト生成戦略ガイドを参照してください。このガイドでは、トークンストリーミングなどの関連機能の使用方法についても説明しています。
GenerationConfig
class transformers.GenerationConfig
< source >( **kwargs )
出力の長さを制御するパラメータ
- max_length (
int, 任意) —max_new_tokensを使用して、モデルが生成するトークン数を制御することをお勧めします。max_lengthは後方互換性のために残されています。 - max_new_tokens (
int, 省略可) — プロンプト内のトークン数を無視して、生成するトークンの最大数です。 - min_length (
int, 任意) — 生成されるシーケンスの最小長です。入力プロンプトの長さにmin_new_tokensを加えた長さに相当します。min_new_tokensも設定されている場合は、その効果が優先されます。 - min_new_tokens (
int, 省略可) — プロンプト内のトークン数を無視して、生成するトークンの最小数です。 - early_stopping (
boolまたはstr、省略可) — ビームベースの手法(ビームサーチなど)の停止条件を制御します。以下の値を受け取ります:True、num_beams個の完全な候補が揃った時点で生成を停止します;False、ヒューリスティックが適用され、より良い候補が見つかる可能性が極めて低いと判断された時点で生成を停止します;"never"、より良い候補が存在しなくなった時点でビームサーチの手順が停止するのみです(正規のビームサーチアルゴリズム)。 - max_time (
float, 任意) — 計算を許可する最大時間(秒)です。割り当てられた時間が経過しても、generation は現在のパスを完了します。 - stop_strings (
strまたはlist[str]、省略可) — モデルが出力した場合に生成を終了させる文字列、または文字列のリスト。
使用される生成戦略を制御するパラメータ
- do_sample (
bool) — サンプリングを使用するかどうか。使用しない場合は、グリーディーデコーディングを行います。 - num_beams (
int, 任意) — ビームサーチに使用するビームの数です。1 を指定すると、ビームサーチを行いません。 - use_mtp — (
bool): モデルがサポートしている場合、Multi-Token Prediction (MTP) を使用するかどうか。
キャッシュを制御するパラメータ
- use_cache (
bool) — モデルが、デコーディングを高速化するために、過去のキー/バリューの注意機構(モデルが対応している場合)を利用すべきかどうかを指定します。 - cache_implementation (
str, 省略可) — generate でインスタンス化されるキャッシュクラスの名称。デコードを高速化するために使用されます。指定可能な値は以下の通りです:generate, 指定がない場合、モデルのデフォルトのキャッシュ(多くの場合 DynamicCache)が使用されます。詳細については、キャッシュのドキュメントを参照してください。"dynamic": DynamicCache"static": StaticCache"offloaded":DynamicCache(offloaded=True)"offloaded_static":StaticCache(offloaded=True)"quantized": QuantizedCache
指定がない場合、モデルのデフォルトキャッシュ(多くの場合、DynamicCache)が使用されます。詳細については、キャッシュのドキュメントを参照してください。
- cache_config (
dict、任意、デフォルトはNone) — キーバリューキャッシュクラスで使用する引数は、cache_configに渡すことができます。 - max_cache_len (
int, 省略可) — 静的キャッシュ(cache_implementationが"static"または"offloaded_static"に設定されている場合)でのみ使用されます。 現在の呼び出しのmax_lengthではなく、この長さにキャッシュを事前サイズ設定します。 想定される最大の呼び出しに対して一度だけ設定しておくと、より長いプロンプトやより大きなmax_new_tokens(この上限まで)を伴う繰り返しgenerate()呼び出しにおいて、再割り当てやtorch.compileの再コンパイルをトリガーする代わりに、同じキャッシュを再利用できます。
モデル出力の logits を操作するためのパラメータ
- temperature (
float, 任意) — 次のトークンの確率を調整するために使用される値。この値はモデルのgeneration_config.jsonファイルに設定されます。設定されていない場合、デフォルト値は1.0です。 - top_k (
int, 任意) — トップkフィルタリングのために保持する、確率の高い語彙トークンの数です。この値はモデルのgeneration_config.jsonファイルで設定されます。設定されていない場合、デフォルト値は50です。 - top_p (
float, 任意) — 1 未満の float に設定した場合、生成に保持されるのは、確率の合計がtop_p以上になる最も確率の高いトークンの最小集合のみです。この値はモデルのgeneration_config.jsonファイルで設定されます。設定されていない場合、デフォルト値は 1.0 です。 - min_p (
float, 省略可) — トークンの最小確率です。最も確率の高いトークンの確率でスケーリングされます。0 から 1 までの値である必要があります。典型的な値は 0.01〜0.2 の範囲で、top_pを 0.99〜0.8 の範囲に設定した場合と同程度の選択性を持ちます(通常のtop_pの値とは逆の方向に設定します)。 - top_h (
float, 任意) — サンプリング時に分布のエントロピーのどの程度を保持するかを制御するエントロピー予算のスケーリング係数です。 0 から 1 までの値である必要があります。各ステップで、トークンは確率順にソートされ、正規化されたエントロピーが完全な分布のエントロピーのtop_h倍以下となる最小のトークンプレフィックスが保持されます。 小さい値(例: 0.2–0.5)はより焦点が絞られた決定的な出力を導き、1.0 に近い値はより多くのランダム性と多様性を許容します。典型的な値は 0.3–0.6 の範囲です。 - typical_p (
float, 任意) — Local typicality は、すでに生成された部分テキストが与えられた条件下で、次のターゲットトークンを予測する条件付き確率が、次のランダムなトークンを予測する期待される条件付き確率とどれだけ類似しているかを測定します。float < 1 に設定した場合、確率の合計がtypical_p以上になる最も局所的に典型的なトークンの最小集合が生成のために保持されます。詳細は この論文を参照してください。 - epsilon_cutoff (
float, 任意) — 0 より大きく 1 より小さい float に設定した場合、条件付き確率がepsilon_cutoffより大きいトークンのみがサンプリングされます。論文では、モデルサイズに応じて推奨値は 3e-4 から 9e-4 の範囲とされています。詳細は Truncation Sampling as Language Model Desmoothing を参照してください。 - eta_cutoff (
float, 任意) — Eta サンプリングは、ローカル・ティピカル・サンプリングとエプシロン・サンプリングのハイブリッドです。0 より大きく 1 より小さい float に設定した場合、トークンはeta_cutoffまたはsqrt(eta_cutoff) * exp(-entropy(softmax(next_token_logits)))のいずれかを超えている場合のみ考慮されます。後者の項は、直感的にはsqrt(eta_cutoff)でスケーリングされた次のトークンの期待確率です。論文では、モデルのサイズに応じて、推奨値は 3e-4 から 2e-3 の範囲とされています。詳細については、Truncation Sampling as Language Model Desmoothing を参照してください。 - repetition_penalty (
float、任意) — 反復ペナルティのパラメータです。1.0 はペナルティなしを意味します。詳細はこの論文を参照してください。 - encoder_repetition_penalty (
float、省略可) — encoder_repetition_penalty のパラメータです。元の入力に存在しないシーケンスに対して指数関数的なペナルティを適用します。1.0 はペナルティなしを意味します。 - length_penalty (
float, 任意) — ビームベース生成で使用する、長さに対する指数ペナルティです。シーケンスの長さに指数として適用され、その結果がシーケンスのスコアを割るために使用されます。スコアはシーケンスの対数尤度(つまり負の値)であるため、length_penalty> 0.0 の場合は長いシーケンスが促進され、length_penalty< 0.0 の場合は短いシーケンスが促進されます。 - no_repeat_ngram_size (
int、任意) — 0 より大きい int に設定した場合、そのサイズの ngram は 1 回しか出現できません。 - bad_words_ids (
list[list[int]]、任意) — 生成が許可されないトークン ID のリストのリストです。詳細なドキュメントと例については、NoBadWordsLogitsProcessorを参照してください。 - renormalize_logits (
bool) — すべての logits プロセッサ(カスタムなものを含む)を適用した後、logits を再正規化するかどうか。検索アルゴリズムはスコア logits が正規化されていることを前提としていますが、一部の logits プロセッサが正規化を崩すため、このフラグをTrueに設定することを強く推奨します。 - forced_bos_token_id (
int、任意、デフォルトはmodel.config.forced_bos_token_id) —decoder_start_token_idの後に強制的に最初の生成トークンとして使用するトークンの ID です。mBART のような多言語モデルでは、最初の生成トークンがターゲット言語のトークンである必要があるため、有用です。 - forced_eos_token_id (
intor list[int], *optional*, defaults tomodel.config.forced_eos_token_id) -- The id of the token to force as the last generated token whenmax_length` is reached. Optionally, use a list to set multiple end-of-sequence tokens. - remove_invalid_values (
bool) — モデルの出力に含まれる可能性のある nan および inf を除去し、生成メソッドのクラッシュを防ぐかどうかを指定します。remove_invalid_valuesを使用すると、生成が遅くなる可能性があることに注意してください。 - exponential_decay_length_penalty (
tuple(int, float)、省略可) — この Tuple は、一定数のトークンが生成された後、指数関数的に増加する長さペナルティを追加します。この Tuple は(start_index, decay_factor)で構成され、start_indexはペナルティの開始位置を示し、decay_factorは指数減衰の係数を表します。 - suppress_tokens (
list[int]、任意) — 生成時に抑制されるトークンのリストです。SuppressTokenslogit プロセッサは、これらのトークンの log probs を-infに設定し、サンプリングされないようにします。 - begin_suppress_tokens (
list[int], 省略可) — 生成の開始時に抑制されるトークンのリストです。SuppressBeginTokenslogit プロセッサは、これらがサンプリングされないよう、その log probs を-infに設定します。 - sequence_bias (
dict[tuple[int], float]、省略可) — トークンのシーケンスをそのバイアス項にマッピングする辞書です。正のバイアスはそのシーケンスが選択される確率を高め、負のバイアスは逆に確率を下げます。詳細なドキュメントと例については、SequenceBiasLogitsProcessorを参照してください。 - token_healing (
bool) — プロンプトの末尾トークンを、適切な拡張トークンに置き換えることで修復します。これにより、貪欲なトークナイズのバイアスによって影響を受けたプロンプトの補完品質が向上します。 - guidance_scale (
float, 任意) — Classifier Free Guidance (CFG) のガイダンススケールです。guidance_scale > 1を設定することで CFG が有効になります。 ガイダンススケールを高くすると、入力プロンプトとより強く関連するサンプルを生成するようモデルが促されますが、通常は品質の低下を伴います。 - watermarking_config (
BaseWatermarkingConfigまたはdict、省略可) — 「グリーン」トークンと呼ばれるランダムに選択されたトークンセットに小さなバイアスを加えることで、モデルの出力にウォーターマークを付与するために使用される引数です。詳細については、SynthIDTextWatermarkingConfig および WatermarkingConfig のドキュメントを参照してください。Dictとして渡された場合、内部でWatermarkingConfigに変換されます。
generate の出力変数を定義するパラメータ
- num_return_sequences (
int, 省略可) — バッチ内の各要素に対して、独立して計算して返されるシーケンスの数。 - output_attentions (
bool) — すべてのアテンション層のアテンションテンソルを返すかどうか。詳細は、返されるテンソルのattentionsを参照してください。 - output_hidden_states (
bool) — すべての層の隠れ状態を返すかどうか。詳細は、返されるテンソルのhidden_statesを参照してください。 - output_scores (
bool) — 予測スコアを返すかどうかを指定します。詳細は、返されるテンソルのscoresを参照してください。 - output_logits (
bool) — 未処理の予測ロジットスコアを返すかどうかを指定します。詳細は、返されるテンソルのlogitsを参照してください。 - return_dict_in_generate (
bool) — 生成シーケンスのみを返すのではなく、ModelOutput を返すかどうかを指定します。生成キャッシュを返すには(use_cacheがTrueの場合)、またはオプションの出力を返すには(output_で始まるフラグを参照)、このフラグをTrueに設定する必要があります。
生成時に使用できる特殊トークン
- pad_token_id (
int, 任意) — padding トークンの ID。 - bos_token_id (
int, 任意) — シーケンスの開始トークンの ID。 - eos_token_id (
Union[int, list[int]], 任意) — シーケンス終了トークンのIDです。必要に応じて、リストを指定して複数のシーケンス終了トークンを設定できます。
エンコーダーデコーダーモデルに固有の生成パラメータ
- encoder_no_repeat_ngram_size (
int、任意) — int > 0 に設定した場合、encoder_input_idsに出現するそのサイズのすべての ngram は、decoder_input_idsに出現できません。 - decoder_start_token_id (
intまたはlist[int]、省略可) — エンコーダー・デコーダーモデルが bos とは異なるトークンでデコーディングを開始する場合、そのトークンの id または長さbatch_sizeのリストを指定します。リストを指定すると、バッチ内の各要素に対して異なる開始 id を設定できます(例: 1 つのバッチ内で異なる対象言語を持つ多言語モデル)。
アシスタント生成に固有の生成パラメータ
- is_assistant (
bool) — モデルがアシスタント(ドラフト)モデルかどうかを示します。 - num_assistant_tokens (
int, 省略可) — 各イテレーションにおいて、ターゲットモデルによる検証が行われる前に、アシスタントモデルが生成する投機的トークンの数を定義します。num_assistant_tokensの値を大きくすると、生成はより投機的になります。アシスタントモデルの性能が高い場合はより大きな高速化効果が得られますが、アシスタントモデルに多くの修正が必要になる場合は、高速化効果が小さくなります。 - num_assistant_tokens_schedule (
str, 省略可能) — 推論中に最大アシスタントトークン数をどのように変更するかを定義するスケジュールを指定します。"heuristic": 投機的トークンがすべて正解の場合、num_assistant_tokensを 2 増やし、それ以外の場合は 1 減らします。同じアシスタントモデルでの複数回の生成呼び出しにわたって、num_assistant_tokensの値は保持されます。"heuristic_transient":"heuristic"と同じですが、num_assistant_tokensが各生成呼び出し後に初期値にリセットされます。"constant": 生成中、num_assistant_tokensは変更されません
- assistant_confidence_threshold (
float, 任意) — アシスタントモデルの信頼度閾値です。現在のトークンに対するアシスタントモデルの予測信頼度がこの閾値を下回る場合、投機的トークン(num_assistant_tokensで定義される)の数がまだ達していない場合でも、アシスタントモデルは現在のトークン生成イテレーションを停止します。アシスタントの信頼度閾値は、不要な draft と target の forward pass の回数を減らすために、投機的イテレーションを通じて調整され、偽陰性(false negative)を避ける方向にバイアスがかかっています。assistant_confidence_thresholdの値は、同じアシスタントモデルでの複数の生成呼び出しにわたって保持されます。 これは、Dynamic Speculation Lookahead Accelerates Speculative Decoding of Large Language Models https://huggingface.co/papers/2405.04304 に記載されている dynamic speculation lookahead の教師なし(unsupervised)バージョンです。 - prompt_lookup_num_tokens (
int, 省略可) — 候補トークンとして出力するトークン数。 - max_matching_ngram_size (
int, 省略可) — プロンプト内のマッチングで考慮される最大 ngram サイズです。指定されない場合、デフォルトで 2 になります。 - assistant_early_exit(
int, optional) — 正の整数に設定すると、モデルの早期終了(early exit)をアシスタントとして使用します。早期終了をサポートするモデル(中間層の logits を LM head で解釈できるモデル)でのみ使用できます。 - assistant_lookbehind(
int, optional) — 正の整数に設定すると、再エンコード処理において、トークンの正しいアラインメントのために、直前のassistant_lookbehind個の assistant トークンも考慮されます。speculative decoding で異なる tokenizer を使用する場合にのみ利用できます。詳細は、このブログを参照してください。 - target_lookbehind(
int, optional) — 正の整数に設定すると、再エンコード処理において、トークンの正しいアラインメントのために、直前のtarget_lookbehind個のターゲットトークンも考慮されます。このオプションは、speculative decoding で異なるトークナイザを使用する場合にのみ利用できます。詳細は、このブログを参照してください。 - assistant_ensemble_weight (
float, 省略可) — speculative decoding における静的アンサンブル検証を有効にします。(0.0, 1.0)の範囲の値が設定されている場合、verifier はp_targetではなく、混合分布w * p_target + (1 - w) * q_draftに対してトークンを受理します。これにより、制御された分布のバイアスを引き換えに、より高い受理率を得ることができます。デフォルトはNoneで、この場合、デコーディングはロスレスのまま維持されます。assistant モデルが logits を返す必要があるため、prompt lookup decoding とは互換性がありません。 - speculation_type (
str, 任意) — 要求される speculation type です。受け入れられる値はdflashです。
パフォーマンスとコンパイルに関連するパラメータ
生成タスクの設定を保持するクラス。generate の呼び出しは、テキストデコーダー、テキストtoテキスト、音声toテキスト、およびビジョンtoテキストモデルにおいて、以下の生成メソッドをサポートします。
num_beams=1かつdo_sample=Falseの場合、greedy decodingnum_beams=1かつdo_sample=Trueの場合、多項分布サンプリングnum_beams>1かつdo_sample=Falseの場合、ビームサーチデコーディングnum_beams>1かつdo_sample=Trueの場合、ビームサーチによる多項分布サンプリング.generate()にassistant_modelまたはprompt_lookup_num_tokensが渡された場合の支援デコーディング
デコーディング戦略の詳細については、テキスト生成戦略ガイドを参照してください。
これらのフラグの多くは、生成における logits や停止条件を制御します。可能な操作の詳細や使用例については、generate 関連のクラスを参照してください。
注: 生成ループ中に、まだNoneである設定フィールドはGenerationConfig._get_default_generation_params()によって上書きされます。これらのフィールドに別の値を使用する場合は、生成設定で明示的に設定してください。
from_pretrained
< source >( pretrained_model_name: str | os.PathLikeconfig_file_name: str | os.PathLike | None = Nonecache_dir: str | os.PathLike | None = Noneforce_download: bool = Falselocal_files_only: bool = Falsetoken: str | bool | None = Nonerevision: str = 'main'**kwargs ) → GenerationConfig
パラメータ
- pretrained_model_name (
strまたはos.PathLike) — 次のいずれかです:- 文字列、huggingface.co上のモデルリポジトリにホストされている事前学習済みモデル設定のmodel id。
- save_pretrained() メソッドを使用して設定ファイルを保存した ディレクトリ へのパス。例:
./my_model_directory/
- config_file_name (
strまたはos.PathLike、任意、デフォルトは"generation_config.json") —pretrained_model_nameから読み込む生成設定 JSON ファイルの名前。 - cache_dir (
strまたはos.PathLike、省略可) — 標準のキャッシュを使用しない場合、ダウンロードした事前学習済みモデルの設定をキャッシュするディレクトリのパス。 - force_download (
bool、任意、デフォルトはFalse) — 設定ファイルを(再)ダウンロードを強制し、キャッシュされたバージョンが存在する場合にそれを上書きするかどうか。 - proxies (
dict[str, str]、省略可) — プロトコルまたはエンドポイントごとに使用するプロキシサーバーの辞書です。例:{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}.各リクエストでこれらのプロキシが使用されます。 - token (
strまたはbool、省略可) — リモートファイルの HTTP ベアラ認証に使用するトークンです。Trueの場合、または指定されていない場合は、hf auth loginを実行した際に生成されたトークン(~/.huggingfaceに保存)が使用されます。 - revision (
str, 省略可, デフォルトは"main") — 使用する特定のモデルのバージョンです。huggingface.co ではモデルやその他の成果物を保存するために git ベースのシステムを使用しているため、ブランチ名、タグ名、またはコミット ID を指定できます。したがって、revisionには git で許可される任意の識別子を指定できます。Hub で作成した pull request をテストするには、
revision="refs/pr/<pr_number>"を渡すことができます。 - return_unused_kwargs (
bool, 省略可, デフォルトはFalse) — がFalse, の場合、この関数は最終的な設定オブジェクトのみを返します。Trueの場合、この関数はTuple(config, unused_kwargs)を返します。unused_kwargsは、キーが設定属性でないキー/値のペアで構成される辞書です。つまり、configの更新に使用されず、それ以外は無視されるkwargsの部分です。 - subfolder (
str、任意、デフォルトは"") — huggingface.co 上のモデルリポジトリのサブフォルダ内に該当するファイルが配置されている場合、ここにフォルダ名を指定できます。 - kwargs (
dict[str, Any], 省略可) — kwargs の値のうち、キーが設定属性であるものは、読み込まれた値の上書きに使用されます。キーが設定属性ではないキー/値ペアの動作は、return_unused_kwargsキーワード引数によって制御されます。
戻り値
この事前学習モデルからインスタンス化された設定オブジェクト。
生成設定ファイルからGenerationConfigをインスタンス化します。
例:
>>> from transformers import GenerationConfig
>>> # Download configuration from huggingface.co and cache.
>>> generation_config = GenerationConfig.from_pretrained("openai-community/gpt2")
>>> # E.g. config was saved using *save_pretrained('./test/saved_model/')*
>>> generation_config.save_pretrained("./test/saved_model/")
>>> generation_config = GenerationConfig.from_pretrained("./test/saved_model/")
>>> # You can also specify configuration names to your generation configuration file
>>> generation_config.save_pretrained("./test/saved_model/", config_file_name="my_configuration.json")
>>> generation_config = GenerationConfig.from_pretrained("./test/saved_model/", "my_configuration.json")
>>> # If you'd like to try a minor variation to an existing configuration, you can also pass generation
>>> # arguments to `.from_pretrained()`. Be mindful that typos and unused arguments will be ignored
>>> generation_config, unused_kwargs = GenerationConfig.from_pretrained(
... "openai-community/gpt2", top_k=1, foo=False, do_sample=True, return_unused_kwargs=True
... )
>>> generation_config.top_k
1
>>> unused_kwargs
{'foo': False}from_model_config
< source >( model_config: typing.Union[ForwardRef('PreTrainedConfig'), dict] ) → GenerationConfig
パラメータ
戻り値
これらのパラメータからインスタンス化された設定オブジェクト。
PreTrainedConfig から GenerationConfig をインスタンス化します。この関数は、生成パラメータを含む可能性があるレガシーの PreTrainedConfig オブジェクトを、独立した GenerationConfig に変換する際に便利です。
save_pretrained
< source >( save_directory: str | os.PathLikeconfig_file_name: str | os.PathLike | None = Nonepush_to_hub: bool = False**kwargs )
パラメータ
- save_directory (
strまたはos.PathLike) — 設定 JSON ファイルを保存するディレクトリ(存在しない場合は作成されます)。 - config_file_name (
strまたはos.PathLike、省略可能、デフォルトは"generation_config.json") —save_directoryに保存される生成設定 JSON ファイルの名前。 - push_to_hub (
bool、省略可、デフォルトはFalse) — モデルを保存した後、Hugging Face モデルハブにプッシュするかどうかを指定します。プッシュ先のリポジトリはrepo_idで指定できます(指定しない場合、save_directoryの名前があなたのネームスペース内でデフォルトとして使用されます)。 - kwargs (
dict[str, Any]、省略可) — push_to_hub() メソッドに渡される追加のキーワード引数。
生成設定オブジェクトをディレクトリ save_directory に保存し、from_pretrained() クラスメソッドを使って再読み込みできるようにします。
update
< source >( defaults_only = Falseallow_custom_entries = False**kwargs ) → dict[str, Any]
パラメータ
- defaults_only (
bool、任意、デフォルトはFalse) —kwargsで config のすべてのキーを更新するか、None(つまりデフォルト値)に設定されているキーのみを更新するかを指定します。 - allow_custom_entries (
bool、任意、デフォルトはFalse) — 現在の設定に存在しない場合、kwargsを使用してカスタムエントリを設定に更新することを許可するかどうか。 - kwargs (
dict[str, Any]) — このクラスを一時的に更新するための属性の辞書。
戻り値
dict[str, Any]
インスタンスの更新に使用されなかったすべてのキーと値のペアを含む辞書。
kwargs に既存の属性と一致するものがある場合、このクラスのインスタンスの属性を更新し、使用されなかったすべての kwargs を返します。
validate
< source >( strict = Falseuser_set_attributes: set[str] | None = None )
パラメータ
- strict (bool) — True の場合、検出された問題に対して例外を発生させます。False の場合、問題をログに記録するだけです。
- user_set_attributes (set[str], 任意) — 呼び出し元が明示的に指定した属性の名前。指定された場合、競合するフラグの組み合わせに関する「軽微な問題」の警告(例:
do_sample=Falseの状態でサンプリング専用のフラグが設定されている場合)は、競合するフラグがこのセットに含まれている場合のみ発火します。これにより、値がモデルのデフォルトであるgeneration_config.jsonから継承された場合に、ノイズの多い警告が出るのを防ぎます。Noneの場合、設定されたすべての属性がユーザー設定とみなされます(validate()を直接呼び出す場合の、後方互換性のある動作)。
GenerationConfig インスタンスの属性の値を検証します。設定インスタンス単体から誤りと判定できるパラメータ化が存在する場合、例外を発生させます。
ここで検証されない一部の引数は、生成の長さに関連する引数など、他の入力やモデルに依存する可能性があるため、generate 実行時に検証するのが望ましいことに注意してください。
get_generation_mode
< source >( assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None ) → GenerationMode
GenerationConfig インスタンスによってトリガーされる生成モードを返します。
GenerationMixin
モデルクラスでミックスインとして使用される、自動回帰テキスト生成のためのすべての関数を含むクラスです。
このクラスを継承すると、モデルに生成関連の特別な動作が付与されます。例えば、初期化時にGenerationConfigを読み込むことや、transformersのCIでgenerate関連のテストが実行されることを保証することなどが挙げられます。
モデルクラスは、generate のようなメソッドを呼び出すことを可能にするために、または、GenerationMixin に直接または間接的に依存するカスタムの generate メソッドを定義している場合に、GenerationMixin を継承する必要があります。この場合、generate のような公開メソッドに対して、ほぼ同じインターフェースを共有します。3つの例を示します:
LlamaForCausalLMはGenerationMixinを継承し、ミックスイン内のgenerateなどの公開メソッドを呼び出せるようにする必要があります。BlipForQuestionAnsweringは、GenerationMixin.generateとほぼ同じインターフェースを持つ独自のgenerateメソッドを備えています(引数がいくつか追加されていますが、出力は同じです)。この関数は、内部モデルを介して間接的にGenerationMixin.generateを呼び出します。そのため、BlipForQuestionAnsweringは、コードベース内の生成関連の自動化機能の恩恵を受けるために、GenerationMixinを継承すべきです。BarkModelには独自のgenerateメソッドがあり、その内部モデルの一つがGenerationMixin.generateを呼び出します。 しかし、そのgenerateはGenerationMixin.generateと同じインターフェースを共有していません。この場合、BarkModelはGenerationMixinを継承すべきではありません。そうするとgenerateのインターフェースが壊れてしまうためです。
このクラスは、generate()を公開しており、以下に使用できます:
num_beams=1かつdo_sample=Falseの場合、greedy decodingnum_beams=1かつdo_sample=Trueの場合、多項分布サンプリングnum_beams>1かつdo_sample=Falseの場合、ビームサーチデコーディングnum_beams>1かつdo_sample=Trueの場合、ビームサーチによる多項分布サンプリング.generate()にassistant_modelまたはprompt_lookup_num_tokensが渡された場合の支援デコーディング
デコーディング戦略の詳細については、テキスト生成戦略ガイドを参照してください。
generate
< source >( inputs: typing.Optional[torch.Tensor] = Nonegeneration_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonelogits_processor: transformers.generation.logits_process.LogitsProcessorList | None = Nonestopping_criteria: transformers.generation.stopping_criteria.StoppingCriteriaList | None = Noneprefix_allowed_tokens_fn: collections.abc.Callable[[int, torch.Tensor], list[int]] | None = Nonesynced_gpus: bool | None = Noneassistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = Nonestreamer: typing.Optional[ForwardRef('BaseStreamer')] = Nonenegative_prompt_ids: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Nonecustom_generate: str | collections.abc.Callable | None = None**kwargs ) → ModelOutput or torch.LongTensor
パラメータ
- inputs(
torch.Tensor、モダリティによって形状が異なり、省略可) — 生成のプロンプトとして使用されるシーケンス、またはエンコーダーへのモデル入力です。Noneの場合、bos_token_idとバッチサイズ 1 で初期化されます。デコーダー専用モデルでは、inputsはinput_idsの形式である必要があります。エンコーダーデコーダーモデルでは、inputs はinput_ids、input_values、input_features、またはpixel_valuesのいずれかを表すことができます。 - generation_config (GenerationConfig、任意) —
生成呼び出しのベースパラメータ化として使用される生成設定です。
**kwargsで generate に渡され、generation_configの属性と一致するものは、それらをオーバーライドします。generation_configが指定されない場合、デフォルトが使用されます。その読み込み優先順位は以下の通りです: 1) 存在する場合、generation_config.jsonモデルファイルから; 2) モデル設定から。未指定のパラメータは GenerationConfig のデフォルト値を継承することに注意してください。生成をパラメータ化するには、そのドキュメントを確認する必要があります。 - logits_processor (
LogitsProcessorList、省略可) — 引数や生成設定から構築されるデフォルトの logits プロセッサを補完する、カスタムの logits プロセッサです。引数や生成設定によってすでに作成済みの logits プロセッサが渡された場合、エラーが発生します。この機能は上級ユーザー向けに設計されています。 - stopping_criteria (
StoppingCriteriaList、省略可) — 引数と生成設定から構築されるデフォルトの停止条件を補完する、カスタムの停止条件です。引数や生成設定からすでに作成された停止条件が渡された場合、エラーが発生します。停止条件がscores入力を参照する場合、generateにreturn_dict_in_generate=True, output_scores=Trueを渡すことを確認してください。この機能は上級ユーザー向けです。 - prefix_allowed_tokens_fn (
Callable[[int, torch.Tensor], list[int]], 省略可) — 指定された場合、この関数は各ステップにおいてビームサーチを許可されたトークンのみに制限します。指定されない場合、制限は適用されません。この関数は 2 つの引数を受け取ります: バッチ IDbatch_idとinput_idsです。バッチ IDbatch_idと以前に生成されたトークンinputs_idsに基づいて、次の生成ステップで許可されるトークンのリストを返す必要があります。この引数は、Autoregressive Entity Retrieval に記載されているような、プレフィックスに条件付けられた制約付き生成に有用です。 - synced_gpus (
bool, 省略可) — max_length まで while ループの実行を継続するかどうか。上書きされない場合、FullyShardedDataParallelまたは DeepSpeed ZeRO Stage 3 を複数の GPU で使用している場合は、ある GPU が他の GPU より先に生成を終了した場合のデッドロックを回避するために、このフラグはTrueに設定されます。それ以外の場合は、デフォルトでFalseになります。 - assistant_model (
PreTrainedModel, 任意) — 生成を高速化するために使用できるアシスタントモデルです。アシスタントモデルは、呼び出し元のモデルと完全に同一のトークナイザーを持つ必要があります。アシスタントモデルによる候補トークンの予測が、呼び出し元のモデルで generate を実行するよりもはるかに高速な場合に、高速化が実現されます。そのため、アシスタントモデルは呼び出し元のモデルよりもはるかに小さいものである必要があります。 - streamer (
BaseStreamer、任意) — 生成されたシーケンスをストリーミングするために使用される Streamer オブジェクトです。生成されたトークンはstreamer.put(token_ids)を介して渡され、その後の処理はすべて streamer が担当します。 - negative_prompt_ids (
torch.LongTensor、形状(batch_size, sequence_length)、任意) — CFG などの一部のプロセッサに必要となるネガティブプロンプトです。バッチサイズは、入力バッチサイズと一致する必要があります。これは実験的な機能であり、将来のバージョンで API が破壊的に変更される可能性があります。 - negative_prompt_attention_mask (
torch.LongTensor、形状(batch_size, sequence_length)、任意) —negative_prompt_ids用の Attention_mask です。 - custom_generate (
strまたはCallable, 省略可) — 次のいずれか:str(Hugging Face Hub リポジトリ名): 標準のgenerateメソッドではなく、そのリポジトリ内のcustom_generate/generate.pyで定義されたカスタムのgenerate関数を実行します。リポジトリが生成ロジックを完全に置き換え、戻り値の型が異なる場合があります。str(ローカルリポジトリのパス):上記と同様ですが、ローカルパスから読み込みます。ローカルディレクトリの場合も、ローカルのcustom_generate/generate.pyが実行されるため、trust_remote_code=Trueが必要です。Callable:generateは通常の入力準備手順を実行し、その後、デコーディングループを実行するために指定された callable を呼び出します。詳細については、ドキュメントを参照してください。
- kwargs (
dict[str, Any]、省略可) —generation_configのアドホックなパラメータ化、およびモデルのforward関数に転送されるモデル固有の追加 kwargs です。モデルがエンコーダー・デコーダーモデルの場合、エンコーダー固有の kwargs にはプレフィックスを付与せず、デコーダー固有の kwargs には decoder_ をプレフィックスとして付与してください。
戻り値
ModelOutput または torch.LongTensor
return_dict_in_generate=True の場合、または config.return_dict_in_generate=True の場合は ModelOutput、それ以外は torch.LongTensor。
モデルがエンコーダー・デコーダーモデルでない場合(model.config.is_encoder_decoder=False)、考えられるModelOutputの型は以下の通りです:
モデルがエンコーダー・デコーダーモデル(model.config.is_encoder_decoder=True)の場合、考えられるModelOutputの型は以下の通りです:
言語モデリングヘッドを持つモデルに対して、トークンIDのシーケンスを生成します。
生成を制御するほとんどのパラメータは
generation_configで設定されます。この引数が渡されない場合、モデルのデフォルトの生成設定が使用されます。generation_configの任意の値は、generate() に対応するパラメータを渡すことで上書きできます。例えば、.generate(inputs, num_beams=4, do_sample=True)のように指定します。生成戦略の概要とコード例については、次のガイドを参照してください。
compute_transition_scores
< source >( sequences: Tensorscores: tuple[torch.Tensor]beam_indices: typing.Optional[torch.Tensor] = Nonenormalize_logits: bool = False ) → torch.Tensor
パラメータ
- sequences (
torch.LongTensor) — 生成されたシーケンスです。2 次元目 (sequence_length) はmax_lengthと等しいか、eos_token_idによりすべてのバッチが早期に終了した場合にそれより短くなります。 - scores (
tuple(torch.Tensor)) — 各生成ステップにおける語彙の各トークンの遷移スコア。このビーム内で、以前に生成されたトークンの log softmax に条件付けられたトークンの対数確率からなるビーム遷移スコアです。torch.Tensorのタプルで、要素数は最大max_new_tokens個(生成された各トークンに対応する1要素)です。各テンソルの形状は(batch_size*num_beams, config.vocab_size)です。 - beam_indices (
torch.LongTensor, 任意) — 各生成ステップにおける生成トークン ID のビームインデックスです。torch.LongTensorで、形状は(batch_size*num_return_sequences, sequence_length)です。num_beams>1で generate する際にのみ必要です。 - normalize_logits (
bool、省略可、デフォルトはFalse) — logits を正規化するか否かを指定します(レガシーな理由により、正規化されていない場合があります)。
戻り値
torch.Tensor
形状が(batch_size*num_return_sequences, sequence_length)のtorch.Tensorで、遷移スコア(logits)が含まれています
生成スコア(ビームサーチを使用した場合、ビームインデックスも)が与えられたシーケンスの遷移スコアを計算します。これは、生成時に選択されたトークンのスコアを素早く取得するための便利なメソッドです。
例:
>>> from transformers import GPT2Tokenizer, AutoModelForCausalLM
>>> import numpy as np
>>> tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer.pad_token_id = tokenizer.eos_token_id
>>> inputs = tokenizer(["Today is"], return_tensors="pt")
>>> # Example 1: Print the scores for each token generated with Greedy Search
>>> outputs = model.generate(**inputs, max_new_tokens=5, return_dict_in_generate=True, output_scores=True)
>>> transition_scores = model.compute_transition_scores(
... outputs.sequences, outputs.scores, normalize_logits=True
... )
>>> # input_length is the length of the input prompt for decoder-only models, like the GPT family, and 1 for
>>> # encoder-decoder models, like BART or T5.
>>> input_length = 1 if model.config.is_encoder_decoder else inputs.input_ids.shape[1]
>>> generated_tokens = outputs.sequences[:, input_length:]
>>> for tok, score in zip(generated_tokens[0], transition_scores[0]):
... # | token | token string | log probability | probability
... print(f"| {tok:5d} | {tokenizer.decode(tok):8s} | {score.numpy():.3f} | {np.exp(score.numpy()):.2%}")
| 262 | the | -1.414 | 24.33%
| 1110 | day | -2.609 | 7.36%
| 618 | when | -2.010 | 13.40%
| 356 | we | -1.859 | 15.58%
| 460 | can | -2.508 | 8.14%
>>> # Example 2: Reconstruct the sequence scores from Beam Search
>>> outputs = model.generate(
... **inputs,
... max_new_tokens=5,
... num_beams=4,
... num_return_sequences=4,
... return_dict_in_generate=True,
... output_scores=True,
... )
>>> transition_scores = model.compute_transition_scores(
... outputs.sequences, outputs.scores, outputs.beam_indices, normalize_logits=False
... )
>>> # If you sum the generated tokens' scores and apply the length penalty, you'll get the sequence scores.
>>> # Tip 1: recomputing the scores is only guaranteed to match with `normalize_logits=False`. Depending on the
>>> # use case, you might want to recompute it with `normalize_logits=True`.
>>> # Tip 2: the output length does NOT include the input length
>>> output_length = np.sum(transition_scores.numpy() < 0, axis=1)
>>> length_penalty = model.generation_config.length_penalty
>>> reconstructed_scores = transition_scores.sum(axis=1) / (output_length**length_penalty)
>>> print(np.allclose(outputs.sequences_scores, reconstructed_scores))
TrueContinuousMixin
モデルに連続バッチ処理機能を追加するためのミックスインクラスです。連続バッチ処理には3つのエントリポイントがあります:
init_continuous_batchingは、continuous batchingの実際のエントリポイントですcontinuous_batching_context_managerは、init_continuous_batchingをラップするもの自体です。- 実際には
continuous_batching_context_managerをラップしているgenerate_batch
これらはこの順序で定義されています。これらの3つのエントリポイントのいずれかに変更を加えた場合、その変更は残りの2つにも反映される必要があります。
continuous_batching_context_manager
< source >( generation_config: transformers.generation.configuration_utils.GenerationConfig | None = Noneblock: bool = Truetimeout: float | None = Nonecontinuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = Nonepersistent_manager: bool = Falsewarmup: bool = Trueworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None )
連続バッチングマネージャーを安全に使用するコンテキストマネージャーです。引数はinit_continuous_batchingのものと似ていますが、以下の点を除きます:
- block: マネージャーを停止する際にスレッドをブロックするかどうか。デフォルトはTrueです。
- timeout: スレッドの停止を待機する最大時間。デフォルトは None(タイムアウトなし)です。
- warmup: 実行前に最大サイズで CUDA グラフを事前キャプチャするかどうか。デフォルトは True です。
キャッシュされた連続バッチングマネージャーを破棄し、GPUリソースを解放します。
generate_batch
< source >( inputs: list[list[int]]generation_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonecontinuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = Nonerecord_timestamps: bool = Falseprogress_bar: bool = Falsepersistent_manager: bool = Falsewarmup: bool = True**kwargs ) → dict[str, GenerationOutput]
パラメータ
- inputs — 入力トークンシーケンス(プロンプト)のリスト
- generation_config — 任意の生成設定
- continuous_batching_config — 任意の連続バッチ処理設定
- record_timestamps — true に設定すると、生成された各トークンにタイムスタンプが記録されます
- progress_bar — true に設定すると、プログレスバーが表示されます
- persistent_manager — 生成が完了した後もマネージャーを保持するかどうか。デフォルトは False です。
- warmup — リクエストの処理前に CUDA グラフを事前キャプチャするかどうか。デフォルトは True です。
戻り値
dict[str, GenerationOutput]
リクエストIDからGenerationOutputオブジェクトへの辞書
連続バッチ処理を使用して、プロンプトのバッチに対してシーケンスを生成します。
init_continuous_batching
< source >( generation_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonecontinuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = Noneworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None ) → ContinuousBatchingManager
連続バッチ推論用のマネージャーを初期化します。
ContinuousBatchingManager
class transformers.ContinuousBatchingManager
< source >( model: ProtoPretrainedModelgeneration_config: GenerationConfigcontinuous_batching_config: ContinuousBatchingConfigworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None )
生成リクエストの連続バッチ処理を管理するマネージャーです。生成リクエストの送信、結果の取得、バックグラウンド生成スレッドの管理を行うユーザーインターフェースを提供します。このクラスは直接作成せず、以下のいずれかのエントリポイント(ContinuousMixinミックスインのすべてのメソッド)を通じて作成してください。
init_continuous_batchingcontinuous_batching_context_managergenerate_batch
add_request
< source >( input_ids: list[int]request_id: str | None = Nonemax_new_tokens: int | None = Nonestreaming: bool = Falserecord_timestamps: bool = Falseeos_token_id: int | list[int] | None = None**logit_processor_kwargs: Any ) → str | None
パラメータ
- input_ids — プロンプトとして使用する入力トークンID
- request_id — 任意のカスタムリクエストID(None の場合は自動生成されます)
- max_new_tokens — 生成する新しいトークンの最大数
- streaming — トークンが生成されるにつれてストリーミングで出力するかどうか
- record_timestamps — 生成された各トークンについてタイムスタンプを記録するかどうか
- eos_token_id — シーケンス終了トークンID
- logit_processor_kwargs — logits プロセッサ用のキーワード引数。
戻り値
str | None
プロセスがTPドライバーである場合はリクエストID、それ以外の場合はNone。
キューに新しい生成リクエストを追加します。プロセスが TP ドライバーでない場合、この操作は何もしません。
add_requests
< source >( inputs: list[list[int]]max_new_tokens: int | None = Nonestreaming: bool = Falserecord_timestamps: bool = False**logit_processor_kwargs: Any )
add_request をバッチ処理してその ID を返すユーティリティ関数です。詳細はドキュメントを参照してください。
IDを指定してリクエストをキャンセルします。このメソッドがTPドライバー以外のプロセスから呼び出された場合、何もしません。マネージャーとやり取りするのはTPドライバーのプロセスのみです。
マネージャーを終了し、分散リソースを解放します。複数回呼び出しても安全です。このメソッドを呼び出した後、マネージャーを再起動することはできません。
出力キューから1つの結果を取得します。IDが指定されている場合、最初に一致するリクエストを返します。タイムアウトが指定されている場合、タイムアウト(秒)後にNoneを返します。
バックグラウンド生成スレッドが開始され、かつまだ生存している場合は True を返します。
バックグラウンドスレッドの完了を待機します。waitは、timeout引数(秒)で上限を設定できます。
…生成ループを一時停止するコンテキストマネージャーです。これにより、呼び出し元スレッドがモデルを使用でき、通常はインプレースでモデルを更新できます。スレッドはループが一時停止した後にのみこのコンテキストに入ります。コンテキストを抜けた時点でループが再開され、キャッシュと進行中のリクエストは保持されます。何も排空されず、リクエストが失われることもありません。複数のスレッドが同時に一時停止を保持でき、最後のスレッドが抜けた時点でループが再開されます。TPが有効な場合、すべてのランクがこのコンテキストに入らなければなりません。そうでない場合、他のランクが永久にハングします。
register_result_handler
< source >( request_id: strcallback: Callable )
結果の配信(ストリーミングまたは非ストリーミング)用のコールバックを登録します。
このコールバックは、このリクエストの結果が生成されるたびに、イベントループ上でcall_soon_threadsafeを介して呼び出されます。ストリーミングリクエストの場合はトークンごとに、非ストリーミングの場合は完了時のみ呼び出されます。リクエストが完了すると、ハンドラーは自動的にクリーンアップされます。
特定のrequest idに一致する結果を反復処理します(ブロッキング)。
再キューイングを伴う共有出力キューを使用します。高並行度でのサービングには、代わりにregister_result_handlerを使用してください。
バックグラウンド生成スレッドを開始します。
stop
< source >( block: bool = Truetimeout: float | None = Nonekeep_for_next_session: bool = Falsehard_stop: bool = False )
バックグラウンド生成スレッドを停止します。block フラグが True に設定されている場合、このメソッドはスレッドの停止を最大 timeout 秒間待機します(None はタイムアウトなしを意味します)。keep_for_next_session フラグが True に設定されている場合、マネージャーは将来の使用のためにモデル上でキャッシュされます。hard_stop フラグが設定されている場合、バックグラウンド生成スレッドは即座に停止され、保留中のリクエストは失敗します。
switch_to_cb_friendly_attn
< source >( model: ProtoPretrainedModelauto_switch_to_flash: bool = True )
attnの実装を、CB互換のものに切り替えます。auto_switch_to_flashがTrueの場合、かつattn実装がSDPAまたはeagerの場合、サポートおよび利用可能な場合はflashに切り替えます。
ダミーバッチを実行して、varlenパスおよびデコードパスのCUDAグラフを事前キャプチャします。バッチプロセッサがまだ初期化されていない場合は、初期化します。
スケジューラー
クラス transformers.generation.Scheduler
< source >( cache: PagedAttentionCachesafety_margin: floatmax_requests_per_batch: int )
連続バッチプロセッサ内でリクエストをスケジューリングするための抽象基底クラスです。スケジューラは、リクエストが待機キューに追加されてから処理のためにスケジューリングされるまでのライフサイクルを管理します。異なるスケジューラは、リクエストの優先順位付けとバッチ処理を行うための異なる戦略を実装しています。
待機リストにリクエストを追加します。
キャンセルされたすべてのリクエストを、アクティブキューと待機キューから削除します。
リクエストの処理を完了し、割り当てられたキャッシュブロックを解放します。このメソッドは、リクエストが生成を終了した場合、またはエラーが発生した場合に呼び出されます。
アクティブなリクエストの生成トークンを取得します。
処理が可能なリクエストがあるかどうかを確認します。
リクエストがキャンセルまたは削除されたかどうかを確認します。
新しい生成ループのためにスケジューラの状態をリセットします。
利用可能なトークンおよびキャッシュの予算に基づいて、次のバッチのリクエストをスケジュールします。このメソッドは、予算とスケジューラーの優先順位付けルールを考慮して、現在のバッチで処理すべきリクエストを選択します。token_budgetはバッチ内で処理できる最大トークン数、cache_budgetはバッチ内で読み取れるKVキャッシュエントリの最大数を表します。 FutureRequestState形式のスケジュール済みリクエストのリスト、デコードの高速パスを使用できるかどうかを示すブール値、クエリトークンの総数、および読み取られたKVトークンの最大数を返します。
キャンセルのリクエストをマークします。
FIFOScheduler
class transformers.generation.FIFOScheduler
< source >( cache: PagedAttentionCachesafety_margin: float | Nonemax_requests_per_batch: int )
このスケジューラーは、リクエストが到着した順序で処理を行います。つまり、デコーディングのリクエストはプリフィリングのリクエストよりも優先されます。
PrefillFirstScheduler
class transformers.generation.PrefillFirstScheduler
< source >( cache: PagedAttentionCachesafety_margin: float | Nonemax_requests_per_batch: int )
分割プリフィルリクエストをデコーディングリクエストより優先的に処理するスケジューラーです。このスケジューラーは、分割プリフィルリクエスト(部分的に処理されたプロンプトの継続部分)が、新しいデコーディングリクエストの処理を開始する前に完了することを保証します。