Transformers documentation
Switch Transformers
このモデルは2021年1月11日にHF papersで公開され、2022年11月15日にHugging Face Transformersに貢献されました。
Switch Transformers
Switch Transformersは、MLP層がMixture-of-Experts (MoE)に置き換えられたスパースなT5モデルです。ルーティング機構によって各トークンが特定のエキスパートに関連付けられ、各エキスパートはデンスなMLPです。スパース性によりスケーリングが向上し、ルーティング機構によりモデルが実行時に関連する重みを動的に選択できるため、モデルの容量が増大します。
すべてのオリジナルのSwitch Transformersチェックポイントは、Switch Transformerコレクション内で確認できます。
このモデルは、ybelkada と ArthurZ によって提供されました。
右側のサイドバーにあるSwitch Transformersモデルをクリックすると、Switch Transformersをさまざまな自然言語タスクに適用する方法の例をさらに確認できます。
以下の例では、Pipeline、AutoModel、およびコマンドラインからマスクされたトークンを予測する方法を示しています。
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("google/switch-base-8")
model = AutoModelForSeq2SeqLM.from_pretrained("google/switch-base-8", device_map="auto")
input_text = "The capital of France is <extra_id_0>."
input_ids = tokenizer(input_text, return_tensors="pt").input_ids.to(0)
outputs = model.generate(input_ids)
print(tokenizer.decode(outputs[0]))Quantization は、重みを低精度で表現することで、大規模モデルのメモリ負荷を軽減します。利用可能な Quantization バックエンドの詳細については、Quantization の概要を参照してください。
以下の例では、bitsandbytes を使用して、重みを 8 ビットにのみ量子化しています。
# pip install bitsandbytes
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, BitsAndBytesConfig
tokenizer = AutoTokenizer.from_pretrained("google/switch-base-8")
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForSeq2SeqLM.from_pretrained("google/switch-base-8", device_map="auto", quantization_config=quantization_config)
input_text = "The capital of France is <extra_id_0>."
input_ids = tokenizer(input_text, return_tensors="pt").input_ids.to(0)
outputs = model.generate(input_ids)
print(tokenizer.decode(outputs[0]))SwitchTransformersConfig
class transformers.SwitchTransformersConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0id2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneis_encoder_decoder: bool = Truevocab_size: int = 32128d_model: int = 768d_kv: int = 64d_ff: int = 2048expert_capacity: int = 64num_layers: int = 12num_sparse_encoder_layers: int = 3num_decoder_layers: int | None = 12num_sparse_decoder_layers: int = 3num_heads: int = 12num_experts: int = 8router_bias: bool = Falserouter_jitter_noise: int | float = 0.01router_dtype: typing.Literal['float32', 'float16', 'bfloat16'] = 'float32'router_ignore_padding_tokens: bool = Falserelative_attention_num_buckets: int = 32relative_attention_max_distance: int = 128dropout_rate: float | int = 0.1layer_norm_epsilon: float = 1e-06router_z_loss_coef: float = 0.001router_aux_loss_coef: float = 0.001initializer_factor: float = 1.0dense_act_fn: str = 'relu'add_router_probs: bool = Falseuse_cache: bool = Truepad_token_id: int | None = 0eos_token_id: int | list[int] | None = 1bos_token_id: int | None = Nonetie_word_embeddings: bool = Trueis_decoder: bool = Falseadd_cross_attention: bool = False )
パラメータ
- is_encoder_decoder (
bool、任意、デフォルトはTrue) — モデルがエンコーダー/デコーダーとして使用されるかどうかを示します。 - vocab_size (
int、任意、デフォルトは32128) — モデルの語彙サイズ。input_idsで表現できるトークンの種類数を定義します。 - d_model (
int、任意、デフォルトは768) — エンコーダ層とプーラ層のサイズ。 - d_kv (
int、任意、デフォルトは64) — 各アテンションヘッドにおけるキー、クエリ、バリューの射影サイズ。射影層のinner_dimはnum_heads * d_kvとして定義されます。 - d_ff (
int、任意、デフォルトは2048) — MLP 表現の次元数。 - expert_capacity (
int、任意、デフォルトは64) — 各エキスパートが処理できるトークン数です。Noneの場合、expert_capacityは(sequence_length / num_experts) * capacity_factorに設定されます。 - num_layers (
int、任意、デフォルトは12) — Transformer デコーダーにおける隠れ層の数。 - num_sparse_encoder_layers (
int、任意、デフォルトは 3) — Transformer エンコーダー層におけるスパース(MoE)な dense hidden 層の数。 注:num_layers=1とともに 0 に設定した場合、スパースステップの計算により、現在の実装ではスパース層が作成される可能性があります。このエッジケースは、既存のチェックポイントでは発生しません。 - num_decoder_layers (
int、任意、デフォルトは12) — Transformer デコーダーの隠れ層の数。設定されていない場合、num_layersと同じ値が使用されます。 - num_sparse_decoder_layers (
int、任意、デフォルト値は 3)— Transformer デコーダー層におけるスパース(MoE)な dense hidden 層の数です。 注:num_decoder_layers=1とともに 0 に設定した場合、スパースステップの計算により、現在の実装ではスパース層が作成される可能性があります。このエッジケースは、既存のチェックポイントでは発生しません。 - num_heads (
int、任意、デフォルトは12) — Transformer デコーダーの各アテンション層におけるアテンションヘッドの数。 - num_experts (
int、任意、デフォルトは8) — MoE レイヤーにおけるルーティング対象のエキスパートの数。 - router_bias (
bool、任意、デフォルトはFalse) — ルーターにバイアスを追加するかどうか。 - router_jitter_noise (
Union[int, float]、任意、デフォルト値は0.01) — トレーニング中にルーターのロジットに追加するノイズの量です。より良いロードバランスのために使用します。 - router_dtype (
str、省略可、デフォルトは"float32") — ルーターに使用されるdtypeです。論文の 選択的精度に関する議論で指定されている通り、dtypeは"float32"のままにしておくことが望ましいです。 - router_ignore_padding_tokens (
bool、任意、デフォルトはFalse) — ルーティング時にパディングトークンを無視するかどうか。 - relative_attention_num_buckets (
int、任意、デフォルトは 32) — 各アテンション層で使用するバケット数。 - relative_attention_max_distance (
int、任意、デフォルトは 128) — バケット分離における、より長いシーケンスの最大距離です。 - dropout_rate (
Union[float, int]、任意、デフォルトは0.1) — すべての dropout レイヤーの比率です。 - layer_norm_epsilon (
float、任意、デフォルトは1e-06) — レイヤーノーマル層で使用する epsilon です。 - router_z_loss_coef (
float、任意、デフォルトは0.001) — ルーターの z-loss の係数です。大きなルーターの logits をペナルティすることで、トレーニングの安定性を高めます。 - router_aux_loss_coef (
float、任意、デフォルト値は0.001) — 補助的なロードバランシング損失の係数です。MoEモデルにおける不均一なエキスパートルーティングをペナルティするために使用されます。 - initializer_factor (
float、任意、デフォルトは1.0) — すべての重み行列を初期化する際に用いる係数です(1 に保つ必要があります。初期化のテスト用に内部で使用されます)。 - dense_act_fn (
string、任意、デフォルトは"relu") — 使用するフィードフォワード層の種類です。"relu"または"gated-gelu"のいずれかである必要があります。SwitchTransformersv1.1 は"gated-gelu"フィードフォワード投影を使用しています。元の SwitchTransformers は"relu"を使用しています。 - add_router_probs (
bool、省略可、デフォルトはFalse) — ルーターの補助損失を計算するために、ルーターの確率を出力するかどうかを指定します。 - use_cache (
bool、任意、デフォルトはTrue) — モデルが最後のキー/バリューの注意を返すかどうか(すべてのモデルで利用されるわけではありません)。config.is_decoder=Trueの場合、またはモデルがデコーダー専用の生成モデルである場合にのみ関連します。 - pad_token_id (
int、任意、デフォルトは0) — 語彙内でパディングに使用されるトークン ID。 - eos_token_id (
Union[int, list[int]]、任意、デフォルトは1) — 語彙内でストリーム終了に使用されるトークン ID。 - bos_token_id (
int, 省略可) — 語彙におけるストリーム開始に使用されるトークン ID。 - tie_word_embeddings (
bool、任意、デフォルトはTrue) — モデルのtied_weights_keysマッピングに従って重み埋め込みを共有するかどうかを指定します。 - is_decoder (
bool、任意、デフォルトはFalse) — モデルがデコーダーとして使用されるかどうかを示します。Falseの場合、モデルはエンコーダーとして使用されます。 - add_cross_attention (
bool、任意、デフォルトはFalse) — モデルにクロスアテンション層を追加するかどうか。
これは、SwitchTransformersModel の設定を保存するための設定クラスです。指定された引数に基づいて Switch Transformers モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、google/switch-base-8 と同様の設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
SwitchTransformersTop1Router
トークンを用いたルーターは、トップ1のエキスパート割り当てを選択します。
このルーターは、Switch Transformer(https://huggingface.co/papers/2101.03961)および V-MoE(https://huggingface.co/papers/2106.05974)と同じメカニズムを使用しています。トークンは上位のエキスパートを選択します。アイテムは router_probs でソートされた後、エキスパートの expert_capacity に達するまで、選択したエキスパートにルーティングされます。各トークンがエキスパートによって処理される保証はありません。また、各エキスパートが少なくとも1つのトークンを受け取ることも保証されていません。
forward
< source >( hidden_states: Tensor ) → expert_index (torch.Tensor)
パラメータ
- hidden_states (
torch.Tensor) — ルーターの確率が計算される (batch_size, sequence_length, hidden_dim) のテンソル。
戻り値
expert_index (torch.Tensor)
形状が (batch_size, sequence_length, num_experts) の one-hot dispatch マスク。容量を超えてある expert にルーティングされたトークンはマスクされます。
router_probs (torch.Tensor):
形状が (batch_size, sequence_length, 1) のテンソル。各トークンについて選択された expert の確率を保持します。expert の出力をスケーリングするために使用されます。
router_logits (torch.Tensor):
形状が (batch_size, sequence_length, num_experts) の logits テンソル。生の router logits に対応します。後で router z-loss を計算するために使用されます。
入力された隠れ状態からルーターの確率を計算します。
SwitchTransformersSparseMLP
SwitchTransformersModel
class transformers.SwitchTransformersModel
< source >( config: SwitchTransformersConfig )
パラメータ
- config (SwitchTransformersConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
特定のヘッドを付加せずに生の隠れ状態を出力する、素のSwitch Transformers Model。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.FloatTensor] = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.BoolTensor] = Noneencoder_outputs: tuple[tuple[torch.FloatTensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Seq2SeqMoEModelOutput or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- attention_mask (
torch.FloatTensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- decoder_input_ids (
torch.LongTensorの形状(batch_size, target_sequence_length), 、任意) — 語彙におけるデコーダー入力シーケンスのトークンインデックスです。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- decoder_attention_mask (
torch.BoolTensor、shape(batch_size, target_sequence_length)、任意) — 特定のトークンインデックスに対するアテンションの計算を回避するためのマスクです。デフォルトでは、モデルが未来を予測する際に過去の入力のみを参照できるようにするため、causal mask が使用されます。 - encoder_outputs (
tuple[tuple[torch.FloatTensor]], 任意) — (last_hidden_state, 任意:hidden_states, 任意:attentions) のタプルlast_hidden_stateは形状(batch_size, sequence_length, hidden_size)、任意) で、エンコーダーの最終層の出力における隠れ状態のシーケンスです。デコーダーのクロスアテンションで使用されます。 - past_key_values (
~cache_utils.Cache, 省略可) — 逐次デコードを高速化するために使用できる、事前計算された隠れ状態(自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー)。通常、これはデコードの以前の段階でモデルが返したpast_key_valuesであり、use_cache=Trueまたはconfig.use_cache=True.入力として許可されるのは Cache インスタンスのみです。kv cache ガイドを参照してください。
past_key_valuesが渡されない場合、デフォルトで DynamicCache が初期化されます。モデルは、入力として与えられたのと同じキャッシュ形式を出力します。
past_key_valuesを使用する場合、すべてのinput_ids(形状(batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理のinput_ids(形状(batch_size, unprocessed_length))のみを入力することになります。 - inputs_embeds (
torch.Tensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込み参照行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - decoder_inputs_embeds (
torch.Tensorの形状(batch_size, target_sequence_length, hidden_size), 、任意) — 、任意で、decoder_input_idsの代わりに、埋め込み表現を直接渡すこともできます。past_key_valuesが使用されている場合、最後のdecoder_inputs_embedsのみを入力すれば十分です(past_key_values). 、decoder_input_idsのインデックスを関連するベクトルに変換する方法を、モデル内部の埋め込みルックアップ行列よりも細かく制御したい場合に便利です。decoder_input_idsとdecoder_inputs_embedsの両方が設定されていない場合、decoder_inputs_embedsはinputs_embedsの値を採ります。
戻り値
Seq2SeqMoEModelOutput または tuple(torch.FloatTensor)
Seq2SeqMoEModelOutput、またはtorch.FloatTensorのタプル(return_dict=Falseが渡された場合、またはconfig.return_dict=Falseの場合)。設定(None)と入力に応じて、さまざまな要素で構成されます。
SwitchTransformersModel の forward メソッドは、__call__ という特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)) — モデルのデコーダーの最終層の出力における、隠れ状態のシーケンス。past_key_valuesが使用されている場合、出力されるのは、形状(batch_size, 1, hidden_size)のシーケンスの最後の隠れ状態のみです。past_key_values (
EncoderDecoderCache、任意、use_cache=Trueが渡された場合またはconfig.use_cache=Trueの場合に返されます) — EncoderDecoderCache のインスタンスです。詳細については、kv cache ガイドを参照してください。自己注意ブロックおよび相互注意ブロック内のキーとバリューの事前計算済み隠れ状態(hidden-states)を保持しており、シーケンシャルデコーディングを高速化するために使用できます(
past_key_values入力参照)。decoder_hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返される) —torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力用が 1 つ、各層の出力用が 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力におけるデコーダーのHidden-states、および任意の初期埋め込み出力。
decoder_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。自己アテンションヘッドにおける加重平均を計算するために使用される、アテンションのsoftmax後のデコーダーのアテンション重み。
decoder_router_logits (
tuple(torch.FloatTensor)、optional、output_router_logits=Trueが渡された場合またはconfig.add_router_probs=Trueの場合に返されます) — 各層に対応するtorch.FloatTensorのタプルで、形状は(batch_size, sequence_length, num_experts)です。デコーダーモデルのルーターロジット。Mixture of Expertsモデルの補助損失を計算するために使用されます。
cross_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返される) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。クロスアテンション層のアテンション重みは、アテンションのsoftmax適用後に計算され、クロスアテンションヘッドにおける加重平均の計算に使用されます。
encoder_last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)、optional) — モデルのエンコーダーの最終層の出力における、隠れ状態のシーケンス。encoder_hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返される) —torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力におけるエンコーダーのHidden-states、および任意の初期埋め込み出力。
encoder_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返される) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンションのsoftmaxを適用した後のエンコーダーのアテンション重み。自己アテンションヘッドにおける加重平均の計算に使用されます。
encoder_router_logits (
tuple(torch.FloatTensor)、optional、output_router_logits=Trueが渡された場合またはconfig.add_router_probs=Trueの場合に返されます)— 各層に対応するtorch.FloatTensorのタプルで、形状は(batch_size, sequence_length, num_experts)です。エンコーダーモデルのルーターロジット。スパースモジュールの補助損失およびz_lossの計算に使用します。
SwitchTransformersForConditionalGeneration
class transformers.SwitchTransformersForConditionalGeneration
< source >( config: SwitchTransformersConfig )
パラメータ
- config (SwitchTransformersConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
language modelingヘッドを上部に備えたSWITCH_TRANSFORMERSモデル。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.FloatTensor] = Nonedecoder_input_ids: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.BoolTensor] = Noneencoder_outputs: tuple[tuple[torch.Tensor]] | None = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.FloatTensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneoutput_router_logits: bool | None = False**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → Seq2SeqMoEOutput or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- attention_mask (
torch.FloatTensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- decoder_input_ids (
torch.LongTensorの形状(batch_size, target_sequence_length), 、任意) — 語彙におけるデコーダー入力シーケンスのトークンインデックスです。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- decoder_attention_mask (
torch.BoolTensor、shape(batch_size, target_sequence_length)、任意) — 特定のトークンインデックスに対するアテンションの計算を回避するためのマスクです。デフォルトでは、モデルが未来を予測する際に過去の入力のみを参照できるようにするため、causal mask が使用されます。 - encoder_outputs (
tuple[tuple[torch.Tensor]]、任意) — (last_hidden_state、任意:hidden_states、任意:attentions) のタプルlast_hidden_stateは形状(batch_size, sequence_length, hidden_size)、任意) で、エンコーダーの最終層の出力における隠れ状態のシーケンスです。デコーダーのクロスアテンションで使用されます。 - past_key_values (
~cache_utils.Cache, 省略可) — 逐次デコードを高速化するために使用できる、事前計算された隠れ状態(自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー)。通常、これはデコードの以前の段階でモデルが返したpast_key_valuesであり、use_cache=Trueまたはconfig.use_cache=True.入力として許可されるのは Cache インスタンスのみです。kv cache ガイドを参照してください。
past_key_valuesが渡されない場合、デフォルトで DynamicCache が初期化されます。モデルは、入力として与えられたのと同じキャッシュ形式を出力します。
past_key_valuesを使用する場合、すべてのinput_ids(形状(batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理のinput_ids(形状(batch_size, unprocessed_length))のみを入力することになります。 - inputs_embeds (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - decoder_inputs_embeds (
torch.FloatTensorの形状(batch_size, target_sequence_length, hidden_size), 、任意) — 、任意で、decoder_input_idsの代わりに、埋め込み表現を直接渡すこともできます。past_key_valuesを使用する場合、最後のdecoder_inputs_embedsのみを入力すればよい場合があります(past_key_values). 。これは、モデル内部の埋め込みルックアップマトリックスよりも、decoder_input_idsインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に便利です。decoder_input_idsとdecoder_inputs_embedsの両方が設定されていない場合、decoder_inputs_embedsはinputs_embedsの値を採ります。 - labels (
torch.LongTensor、shape(batch_size, sequence_length)、任意) — マスク言語モデリング損失を計算するためのラベルです。インデックスは[0, ..., config.vocab_size]の範囲内であるか、-100 である必要があります(input_idsの docstring を参照)。インデックスが-100に設定されたトークンは無視(マスク)され、損失は[0, ..., config.vocab_size]の範囲内のラベルを持つトークンに対してのみ計算されます。 - output_router_logits (
bool、省略可、デフォルトはFalse) — すべてのルーターの logits を返すかどうかを指定します。ルーター損失の計算に有用ですが、推論時には返すべきではありません。
戻り値
Seq2SeqMoEOutput または tuple(torch.FloatTensor)
Seq2SeqMoEOutput、またはtorch.FloatTensorのタプル(return_dict=Falseが渡された場合、またはconfig.return_dict=Falseの場合)。設定(None)や入力に応じて、さまざまな要素で構成されます。
SwitchTransformersForConditionalGeneration の forward メソッドは、__call__ という特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
loss (
torch.FloatTensor、shape(1,)、optional、labelsが指定された場合に返されます)— 言語モデリングの損失。logits (
torch.FloatTensor、shape(batch_size, sequence_length, config.vocab_size)) — 言語モデリングヘッドの予測スコア(SoftMax 適用前の各語彙トークンのスコア)。past_key_values (
EncoderDecoderCache、任意、use_cache=Trueが渡された場合またはconfig.use_cache=Trueの場合に返されます) — EncoderDecoderCache のインスタンスです。詳細については、kv cache ガイドを参照してください。自己注意ブロックおよび相互注意ブロック内のキーとバリューの事前計算済み隠れ状態(hidden-states)を保持しており、シーケンシャルデコーディングを高速化するために使用できます(
past_key_values入力参照)。decoder_hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返される) —torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力用が 1 つ、各層の出力用が 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力および初期埋め込み出力における、デコーダーの隠れ状態。
decoder_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。自己アテンションヘッドにおける加重平均を計算するために使用される、アテンションのsoftmax後のデコーダーのアテンション重み。
decoder_router_logits (
tuple(torch.FloatTensor)、optional、output_router_logits=Trueが渡された場合またはconfig.add_router_probs=Trueの場合に返されます) — 各層に対応するtorch.FloatTensorのタプルで、形状は(batch_size, sequence_length, num_experts)です。デコーダーモデルのルーターロジット。Mixture of Expertsモデルの補助損失を計算するために使用されます。
cross_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返される) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。クロスアテンション層のアテンション重みは、アテンションのsoftmax適用後に計算され、クロスアテンションヘッドにおける加重平均の計算に使用されます。
encoder_last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)、optional) — モデルのエンコーダーの最終層の出力における、隠れ状態のシーケンス。encoder_hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返される) —torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力および初期埋め込み出力におけるエンコーダーの隠れ状態。
encoder_attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返される) —torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンションのsoftmaxを適用した後のエンコーダーのアテンション重み。自己アテンションヘッドにおける加重平均の計算に使用されます。
encoder_router_logits (
tuple(torch.FloatTensor)、optional、output_router_logits=Trueが渡された場合またはconfig.add_router_probs=Trueの場合に返されます)— 各層に対応するtorch.FloatTensorのタプルで、形状は(batch_size, sequence_length, num_experts)です。エンコーダーモデルのRouter logits。Mixture of Expertsモデルにおいて、補助損失およびz_lossを計算するために使用されます。
SwitchTransformersEncoderModel
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.FloatTensor] = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MoEModelOutput or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- attention_mask (
torch.FloatTensorの形状(batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。[0, 1]:- マスクされていないトークンに対して1
- マスクされたトークンに対しては 0 です。
- inputs_embeds (
torch.FloatTensor、形状(batch_size, sequence_length, hidden_size)、任意) —input_idsを渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_idsのインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。 - use_cache (
bool、任意) —Trueに設定すると、past_key_valuesのキーバリュー状態が返され、デコーディングの高速化に利用できます(past_key_valuesを参照)。
戻り値
MoEModelOutput または tuple(torch.FloatTensor)
MoEModelOutput、またはtorch.FloatTensorのタプル(return_dict=Falseが渡された場合、またはconfig.return_dict=Falseの場合)。設定(None)や入力に応じて、さまざまな要素で構成されます。
SwitchTransformersEncoderModel の forward メソッドは、__call__ という特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。hidden_states (
tuple(torch.FloatTensor)、optional、output_hidden_states=Trueが渡された場合またはconfig.output_hidden_states=Trueの場合に返されます)—torch.FloatTensorのタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は(batch_size, sequence_length, hidden_size)です。各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。
attentions (
tuple(torch.FloatTensor)、optional、output_attentions=Trueが渡された場合またはconfig.output_attentions=Trueの場合に返されます)—torch.FloatTensorのタプル(各レイヤーごとに1つ)、形状は(batch_size, num_heads, sequence_length, sequence_length)。アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
router_probs (
tuple(torch.FloatTensor)、optional、output_router_probs=Trueが渡された場合、またはconfig.add_router_probs=Trueが設定されている場合、あるいはconfig.output_router_probs=Trueの場合に返されます) — 各層に対応するtorch.FloatTensorのタプルで、形状は(batch_size, sequence_length, num_experts)です。Raw router probabilities that are computed by MoE routers, these terms are used to compute the auxiliary loss and the z_loss for Mixture of Experts models.