Transformers documentation

DeepSeek-V4

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

このモデルは2026年5月2日にHugging Face Transformersに貢献されました。

DeepSeek-V4

DeepSeek-V4は、DeepSeekによる次世代MoE言語モデルです(論文)。このアーキテクチャでは、DeepSeek-V3のMulti-head Latent Attention (MLA)をローカルと長距離のハイブリッド設計に置き換え、残差接続をManifold-Constrained Hyper-Connections (mHC)に変更し、最初の数層のMoE層には静的なtoken-id → expert-idハッシュテーブルでブートストラップを行います。

この実装は、DeepSeek-V4-Flash、DeepSeek-V4-Pro、およびそれらの-Base事前学習モデルをカバーしています。4モデルはいずれも同じアーキテクチャを共有しており、幅 / 深さ / エキスパート数と重みのみ異なります。

use_kernels=True を from_pretrained() に設定すると、対応するレイヤーが Hub からの最適化されたカーネルに置き換えられます。詳細は カーネルの読み込み を参照してください。

アーキテクチャ(論文 §2)

ハイブリッドアテンション(§2.3)

各デコーダーブロックは3つのアテンションタイプのいずれかであり、config.layer_types[i]によってディスパッチされます。

  • スライディングウィンドウによるフルアテンション("sliding_attention"): sliding_windowトークンのローカルウィンドウのみを対象とし、長距離ブランチは使用しません。ブートストラップレイヤーにおいて、V3の「Full Attention」スタイルと一致します。
  • Compressed Sparse Attention("compressed_sparse_attention"、CSA — 論文 §2.3.1): 重複するウィンドウを持つ低圧縮プール(compress_rate_csa、デフォルトは m=4)と、クエリをプールに対してスコアリングし、コアアテンションに到達する前にクエリごとに上位 index_topk ブロックを集める Lightning Indexer(式 13–17)から構成されます。
  • Heavily Compressed Attention("heavily_compressed_attention"、HCA — 論文 §2.3.2): 重複しないウィンドウを用いた高圧縮プール(compress_rate_hca、デフォルトは m'=128)。インデクサーは不要であり、プールされたすべてのエントリがアテンションに寄与します。

3つのタイプはすべて同じバックボーンを共有しています:

  • 共有 K=V マルチクエリアテンション: num_key_value_heads = 1; kv_proj は単一の KV ヘッドを生成し、同じテンソルがキーとバリューの両方として読み取られます。
  • Partial RoPE(interleaved-pair、論文 §2.3.3 “Partial Rotary Positional Embedding”)は、各ヘッドの末尾の qk_rope_head_dim = head_dim * partial_rotary_factor チャネルに適用されます。同じ回転が、位置 -i を用いてアテンション出力の rope スライス(式 26)にも適用されるため、各 KV エントリの寄与はクエリからの相対距離の関数として保持されます。
  • ヘッドごとの学習可能なアテンションシンク(式 27)。
  • グループ化された低ランク出力投影(§2.3.1 “Grouped Output Projection”): o_groups 個のヘッドグループ → グループごとに o_lora_rank → hidden_size。まず DeepseekV4GroupedLinear(o_a_proj)で計算し、続いて o_b_proj を適用します。表現力を損なうことなく、広いアテンション出力のトークンごとのコストを削減します。
  • サイズ sliding_window の共有スライディングウィンドウ K=V ブランチ(「Additional Branch of Sliding Window Attention」、§2.3.1)は、局所的な細粒度の依存関係を保持します。長距離コンプレッサーの出力は、コアアテンションの前にこのブランチの KV と連結されます。

Manifold-Constrained Hyper-Connections(§2.2)

残差接続は mHC (Xie et al., 2026) に置き換えられます:hc_mult 本の並列残差ストリームが、各ブロック全体を通じて [B, S, hc_mult, D] の形状で保持されます。2 つの DeepseekV4HyperConnection モジュール、すなわち attn_hc と ffn_hc が、attention / MLP サブレイヤーの前後で (pre, post, comb) の 3 点セットを用いてストリームを混合し、入出力を行います。comb 行列は、マンifold 上で hc_sinkhorn_iters 回の Sinkhorn–Knopp 反復によって生成される二重確率的射影であり、深いスタック全体でのシグナル伝播が非拡張的(non-expansive)になるようにします。最後に DeepseekV4HyperHead が、モデル正規化の前に hc_mult 本のストリームを単一のシーケンスに収束させます。

MoEスケジュール(§2.1)

ルーティングはconfig.mlp_layer_typesによってレイヤーごとに設定され、{"hash_moe", "moe"}のいずれかの値が指定されます。

  • "hash_moe": エキスパートのインデックスは、V4 チェックポイントから設定された凍結済みのtid2eid[input_ids]ルックアップから取得されます。学習されたゲートのweightは、選択されたエキスパートを重み付けするためのエキスパートごとのスコアを依然として生成します。静的なのはどのエキスパートを選択するかのみです。最初の数層のブートストラップ層に使用されます(デフォルトは 3 層、レガシーのnum_hash_layersで上書き可能)。
  • "moe": 標準的な top-k ルーティング MoE。エキスパートのアフィニティには、V3 の Sigmoid の代わりに Sqrt(Softplus(·)) が使用されます(「アフィニティスコアを計算する活性化関数を Sigmoid(·) から Sqrt(Softplus(·)) に変更する」、論文 §2.1)。また、V3 の n_group / topk_group 制約は廃止されています。DeepSeek の noaux_tc による補助損失なし戦略は、e_score_correction_bias バッファを介して維持されており、このバッファは勾配を伝播させることなく top-k argmax にバイアスを付与します。

Routed experts は、標準的な Mixtral の [num_experts, 2 * moe_intermediate_size, hidden_size] 形式のエキスパート重みレイアウトの上に、clamped SwiGLU(gate.clamp(max=swiglu_limit)、up.clamp(min=-swiglu_limit, max=swiglu_limit)、その後 act_fn(gate) * up)を使用します。単一の共有エキスパート(幅が moe_intermediate_size の通常の SwiGLU MLP)は、すべてのトークンに対して並列に実行されます。

アテンションマスクのレイアウト

各 DeepseekV4Attention レイヤーは、キー軸に沿って標準的なスライディングウィンドウ因果マスクを、そのコンプレッサーが返す block_bias で拡張し、その後、連結されたマスクを eager_attention_forward に渡します。スライディングセクション(左、[S, S])はすべてのレイヤータイプで同一ですが、コンプレッサーセクション(右)はレイヤータイプによって異なり、V4 で導入された実際の「新規」部分です。

以下の図は、16トークンの入力に対して、各レイヤータイプのマスク全体を画面に収めるために、非常に小さな設定(sliding_window=8、CSA m=4、HCA m'=8、index_topk=2)で生成されました。緑 = スライディングセクションにおけるクエリ/キーの対角線、濃い色 = 可視の標準KV位置、薄い色 = マスク済み、アンバー = クエリがアテンションを許可されるコンプレッサー/インデクサーのスロットです。破線より右の列は、コンプレッサーによってcat([sliding_causal_mask, block_bias], dim=-1)で追加されます。

スライディング専用レイヤー("sliding_attention")。コンプレッサーも右パディングもありません。マスクは、[S, S] の形状を持つ通常のスライディングウィンドウ因果マスク(ウィンドウ = 8)です。i ≥ window の場合、左下の三角形が切り取られ、ローカル専用のアテンションパターンが復元されます。

DeepSeek-V4 sliding attention mask

CSA レイヤー("compressed_sparse_attention")。コンプレッサーは、クエリごとに集約した出力を [B, 1, S·k, D] にフラット化し、マスクを S·k 列だけ右パディングします。クエリ t に対しては、[S + t·k, S + (t+1)·k) の列にある k スロットにのみインデクサーの選択結果が格納され、それ以外のコンプレッサーの列はすべて -inf になります。最初のウィンドウが閉じる前のクエリ(t < m − 1)には何も与えられず、インデクサーの -1 センチネル値がそのままマスクに伝播します。t が大きくなるにつれて、利用可能な圧縮エントリが増え、インデクサーは k 個のスロットすべてを埋めることができます。

DeepSeek-V4 CSA attention mask

HCA レイヤー("heavily_compressed_attention")。インデクサーはありません。キャッシュされた圧縮エントリはすべて、潜在的に可視化されます。T_total = entry_count["compressor"] 列分だけ右パディングされます。クエリ t がエントリ w を参照できるのは、そのソースウィンドウがクローズした後のみです。つまり、w < (t + 1) // m の場合です。ここでは m=8 であるため、エントリ 0(位置 0..7 をカバー)とエントリ 1(8..15 をカバー)は、それぞれ t ≥ 7 および t ≥ 15 で初めて可視化されます。

DeepSeek-V4 HCA attention mask

これらの図は、以下を通じてエンドツーエンドで再現できます:

python docs/source/en/imgs/deepseek_v4/visualize_attention_masks.py \
    --svg docs/source/en/imgs/deepseek_v4

このスクリプトは、この小さな設定に対してフォワードパスを実行し、各アテンション層をラップして、cat([attention_mask, block_bias]) 適用後の正確なマスクをキャプチャします。次に、CSA の [S, S·k] フラットスロットマスクを [S, T_entries] エントリ可視性ビューに再マッピングします(これにより、各 C_w 列は集約スロットではなく、圧縮されたエントリになります)。最後に、上記の 3 つの SVG を書き出します。また、ターミナルでの素早い確認のために ANSI グリッドを標準出力に出力し、インデクサーのクエリごとのトップ k 選択をダンプして、ウォームアップのセンチネルと選択内容が監査可能になります。

キャッシュレイヤー

各非スライディングアテンションブロックは、フォワード呼び出し間でコンプレッサー / インデクサーの状態をスレッドする必要があります。V4には、LAYER_TYPE_CACHE_MAPPINGに自動登録される2つのキャッシュレイヤータイプが同梱されています:

  • DeepseekV4HCACache: スライディングウィンドウ K=V + HCA コンプレッサバッファ / プール / カウント(重複なし、インデクサなし)。
  • DeepseekV4CSACache: スライディングウィンドウ K=V + CSA コンプレッサー(オーバーラップ状態付き)+ 並列インデクサー index_head_dim でのバッファ / プール / カウント / オーバーラップ

DynamicCache(config=…) は、config.layer_types[i] ごとに適切なキャッシュレイヤーを構築します。

DeepseekV4Config

クラス transformers.DeepseekV4Config

< >

( 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 = 0is_encoder_decoder: bool = Falseid2label: 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 = Nonevocab_size: int = 129280hidden_size: int = 4096moe_intermediate_size: int = 2048num_hidden_layers: int = 43num_attention_heads: int = 64num_key_value_heads: int = 1head_dim: int = 512q_lora_rank: int = 1024num_experts_per_tok: int = 6n_routed_experts: int = 256n_shared_experts: int = 1scoring_func: str = 'sqrtsoftplus'norm_topk_prob: bool = Truerouted_scaling_factor: float = 1.5max_position_embeddings: int = 1048576rope_theta: float | int = 10000.0layer_types: list[str] | None = Nonecompress_rates: dict | None = Nonecompress_rope_theta: float | int = 160000.0hc_mult: int = 4hc_sinkhorn_iters: int = 20hc_eps: float = 1e-06mlp_layer_types: list[str] | None = Noneswiglu_limit: float = 10.0sliding_window: int = 128o_groups: int = 8o_lora_rank: int = 1024index_n_heads: int = 64index_head_dim: int = 128index_topk: int = 512num_nextn_predict_layers: int = 1output_router_logits: bool = Falserouter_aux_loss_coef: float = 0.001router_jitter_noise: float = 0.0hidden_act: str = 'silu'initializer_range: float = 0.02rms_norm_eps: float = 1e-06use_cache: bool = Truepad_token_id: int | None = Nonebos_token_id: int | None = 0eos_token_id: int | list[int] | None = 1tie_word_embeddings: bool = Falserope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Nonepartial_rotary_factor: float | None = Noneattention_bias: bool = Falsemlp_bias: bool = Falseattention_dropout: float = 0.0 )

パラメータ

  • vocab_size (int、任意、デフォルトは 129280) — モデルの語彙サイズです。input_ids で表現できるトークンの種類数を定義します。
  • hidden_size (int、任意、デフォルトは 4096) — 隠れ表現の次元数。
  • moe_intermediate_size (int、任意、デフォルトは2048) — ルーティングされたエキスパートのMLPの中間サイズ。
  • num_hidden_layers (int、任意、デフォルトは 43) — Transformer デコーダーの隠れ層の数。
  • num_attention_heads (int、任意、デフォルトは 64) — Transformer デコーダーの各アテンション層におけるアテンションヘッドの数。
  • num_key_value_heads (int、任意、デフォルトは 1) — Grouped Query Attention を実装するために使用する key_value ヘッドの数です。 num_key_value_heads=num_attention_heads の場合、モデルは Multi Head Attention (MHA) を使用し、 num_key_value_heads=1 の場合は Multi Query Attention (MQA) を使用し、それ以外の場合は GQA が使用されます。 マルチヘッドのチェックポイントを GQA のチェックポイントに変換する際は、各グループの key ヘッドと value ヘッドを、そのグループ内の元のすべてのヘッドの平均プーリングによって構築する必要があります。詳細については、この論文を参照してください。指定されない場合、デフォルトで num_attention_heads が使用されます。
  • head_dim (int、任意、デフォルトは512) — アテンションヘッドの次元です。None の場合、hidden_size // num_attention_heads がデフォルトとして使用されます。
  • q_lora_rank (int、任意、デフォルトは 1024) — クエリ投影用の LoRA 行列のランク。
  • num_experts_per_tok (int、任意、デフォルトは6) — 各トークンをルーティングするエキスパートの数です。これは、トークン選択ルーティングにおける top-k の値です。
  • n_routed_experts (int、任意、デフォルトは 256) — ルーティング対象のエクスパートの数です。
  • n_shared_experts (int、任意、デフォルトは 1) — 共有エキスパートの数。
  • scoring_func (str、任意、デフォルトは sqrtsoftplus) — ルーターの活性化関数 — sqrtsoftplus、softmax、または sigmoid。
  • norm_topk_prob (bool、任意、デフォルトは True) — ルーティングされたエキスパートの重みを正規化するかどうかを指定します。
  • routed_scaling_factor (float、任意、デフォルトは 1.5) — ルーティングされたエキスパートのスケール係数。
  • max_position_embeddings (int、任意、デフォルトは 1048576) — このモデルが使用される可能性のある最大シーケンス長です。
  • rope_theta (Union[float, int]、任意、デフォルトは 10000.0) — メインの自己注意回転に使用される RoPE のベース値です。
  • layer_types (list[str]、省略可) — {"compressed_sparse_attention", "heavily_compressed_attention"} の値からなる、レイヤーごとのアテンションスケジュール。 V4-Pro のデフォルト: 2× HCA bootstrap + CSA / HCA の交互配置。
  • compress_rates (dict[str, int]) — レイヤータイプごとの圧縮率。デフォルトは {"compressed_sparse_attention": 4, "heavily_compressed_attention": 128} (CSA は m=4、HCA は m’=128、論文 §2.3.1 / §2.3.2 参照)。BC: トップレベルの kwarg として compress_rate_csa / compress_rate_hca を同梱する設定は、__post_init__ のタイミングで取り込まれます。
  • compress_rope_theta (Union[float, int]、任意、デフォルトは 160000.0) — 圧縮されたブランチ用の RoPE base(YaRN では rope_scaling と組み合わせて使用します)。
  • hc_mult (int、任意、デフォルトは 4) — Manifold-Constrained Hyper-Connection (mHC) の拡張係数 n_hc (常に有効; セクション 2.2)。
  • hc_sinkhorn_iters (int、任意、デフォルトは 20) — mHC 残差マッピングを doubly-stochastic 行列へ射影するための Sinkhorn-Knopp 反復回数 t_max。
  • hc_eps (float、任意、デフォルトは 1e-06) — Sinkhorn-Knopp 正規化における数値的な下限値。
  • mlp_layer_types (list[str]、省略可) — 各層の MoE スケジュールを、{"hash_moe", "moe"} の値で指定します。hash_moe は、凍結された tid2eid[input_ids] の参照によってルーティングを行います(論文 §2.1「Hash-MoE bootstrap」)。moe は、標準的な top-k ルーティング MoE です。デフォルトでは、最初の 3 層が hash_moe、残りの層が moe になります。BC: トップレベルの kwarg として num_hash_layers を持つレガシー設定は、__post_init__ のタイミングで統合されます。
  • swiglu_limit (float、任意、デフォルトは 10.0) — ルーティングされたエキスパートの gate/up 事前活性化をクリップします。
  • sliding_window (int、任意、デフォルトは 128) — すべてのアテンションブロックのスライディングウィンドウブランチで使用するローカルウィンドウサイズ n_win です。
  • o_groups (int、任意、デフォルトは 8) — グループ化出力射影におけるヘッドグループ数 g(論文 §2.3.1「Grouped Output Projection」)
  • o_lora_rank (int、任意、デフォルトは 1024) — グループ化された出力射影における、グループごとの中間次元 d_g。
  • index_n_heads (int、任意、デフォルトは 64) — インデクサーのクエリヘッド数 n_h^I(論文 §2.3.1、式 14)。
  • index_head_dim (int、任意、デフォルトは 128) — インデクサーのヘッド次元 c^I(論文 §2.3.1)。
  • index_topk (int、任意、デフォルト値は 512) — Lightning Indexer が top-k によって各クエリごとに保持する圧縮エントリの数(論文 §2.3.1、式 17)。
  • num_nextn_predict_layers (int、任意、デフォルトは1) — アップストリームのチェックポイントにおける MTP レイヤー数(ここではインスタンス化されません)。
  • output_router_logits (bool、任意、デフォルトはFalse) — モデルがルーターのロジツを返すかどうかを指定します。これを有効にすると、モデルは補助損失(ロードバランシング損失とルーターのz損失を含む)を出力できるようになります。
  • router_aux_loss_coef (float、任意、デフォルト値は0.001) — 補助的なロードバランシング損失の係数です。MoEモデルにおける不均一なエキスパートルーティングをペナルティするために使用されます。
  • router_jitter_noise (float、任意、デフォルト値は0.0) — トレーニング中にルーターのロジットに追加するノイズの量。負荷分散を改善するために使用します。
  • hidden_act (str、任意、デフォルトは silu) — デコーダーで使用する非線形活性化関数(関数または文字列)。例えば、"gelu"、 "relu"、"silu" など。
  • initializer_range (float、任意、デフォルトは 0.02) — すべての重み行列を初期化するための truncated_normal_initializer の標準偏差です。
  • rms_norm_eps (float、任意、デフォルトは 1e-06) — RMS 正規化レイヤーで使用する epsilon。
  • use_cache (bool、任意、デフォルトは True) — モデルが最後のキー/バリューの注意を返すかどうか(すべてのモデルで利用されるわけではありません)。config.is_decoder=True の場合、またはモデルがデコーダー専用の生成モデルである場合にのみ関連します。
  • pad_token_id (int, 任意) — 語彙内でパディングに使用されるトークン ID。
  • bos_token_id (int、任意、デフォルトは 0) — 語彙におけるストリーム開始に使用されるトークン ID。
  • eos_token_id (Union[int, list[int]]、任意、デフォルトは 1) — 語彙内でストリーム終了に使用されるトークン ID。
  • tie_word_embeddings (bool、任意、デフォルトは False) — モデルの tied_weights_keys マッピングに従って重み埋め込みを共有するかどうかを指定します。
  • rope_parameters (Union[~modeling_rope_utils.RopeParameters, dict], 省略可) — RoPE 埋め込みの設定パラメータを含む辞書です。この辞書には rope_theta の値が含まれており、より長い max_position_embeddings で RoPE を使用する場合にスケーリングに使用されるパラメータが任意で含まれます。
  • partial_rotary_factor (float, 任意) — head_dim のうち RoPE が適用される割合。 デフォルトでは qk_rope_head_dim / head_dim となり、cos/sin のサイズは qk_rope_head_dim になります。
  • attention_bias (bool、任意、デフォルトはFalse) — 自己注意機構において、クエリ、キー、バリュー、出力の投影層にバイアスを使用するかどうかを指定します。
  • mlp_bias (bool、任意、デフォルトはFalse) — MLP層のup_proj、down_proj、gate_proj層でバイアスを使用するかどうかを指定します。
  • attention_dropout (float、任意、デフォルトは 0.0) — アテンション確率のドロップアウト率です。

これは DeepseekV4Model の設定を保存するための設定クラスです。指定された引数に基づいて Deepseek V4 モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、deepseek-ai/DeepSeek-V4-Flash-Base と同様の設定が得られます。

設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。

validate_layer_type

< >

( )

V4では、標準的な長さおよび型メンバーシップのチェックに加えて、実際に提供されている3つのアテンションブロック型と2つのMLPブロック型に、グローバルなALLOWED_LAYER_TYPESを絞り込んでいます。

DeepseekV4Model

クラス transformers.DeepseekV4Model

< >

( config: DeepseekV4Config )

パラメータ

  • config (DeepseekV4Config) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。

Deepseek V4の素のモデルで、特定のヘッドを上に載せず、生のhidden-statesを出力します。

このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MoeModelOutputWithPast or tuple(torch.Tensor)

パラメータ

  • input_ids (torch.LongTensor の形状 (batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。

    インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。

    入力IDとは何ですか?

  • attention_mask (torch.Tensor の形状 (batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。 [0, 1]:
    • マスクされていないトークンに対して1
    • マスクされたトークンに対しては 0 です。

    アテンションマスクとは?

  • position_ids (torch.LongTensor の形状 (batch_size, sequence_length), 、任意) — 各入力シーケンスのトークンが位置埋め込み内で占める位置のインデックス。範囲 [0, config.n_positions - 1].

    ポジションIDとは?

  • 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 のインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。
  • use_cache (bool、任意) — True に設定すると、past_key_values のキーバリュー状態が返され、デコーディングの高速化に利用できます(past_key_values を参照)。

戻り値

MoeModelOutputWithPast または tuple(torch.Tensor)

MoeModelOutputWithPast または、torch.Tensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)。設定(DeepseekV4Config)や入力に応じて、さまざまな要素で構成されます。

DeepseekV4Modelのforwardメソッドは、__call__特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなくModuleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。

  • last_hidden_state (torch.Tensor、形状 (batch_size, sequence_length, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。

  • past_key_values (Cache、任意、use_cache=True が渡された場合または config.use_cache=True の場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。

    自己アテンションブロック(および config.is_encoder_decoder=True の場合、クロスカレンションブロック)の事前計算済みヒドゥンステート(キーとバリュー)を保持します。これらは逐次デコーディングを高速化するために使用できます(past_key_values 入力参照)。

  • hidden_states (tuple(torch.Tensor)、optional、output_hidden_states=True が渡された場合または config.output_hidden_states=True の場合に返されます) — torch.Tensor のタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は (batch_size, sequence_length, hidden_size) です。

    各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。

  • attentions (tuple(torch.Tensor)、optional、output_attentions=True が渡された場合または config.output_attentions=True の場合に返されます) — torch.Tensor のタプル(各レイヤーごとに1つ)、形状は (batch_size, num_heads, sequence_length, sequence_length)。

    アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。

  • router_logits (tuple(torch.Tensor)、optional、output_router_probs=True と config.add_router_probs=True が渡された場合、または config.output_router_probs=True の場合に返されます) — 各層に対応する torch.Tensor のタプルで、形状は (batch_size, sequence_length, num_experts) です。

    MoE ルーターによって計算される生(raw)のルーター logits(softmax 適用後)であり、Mixture of Experts モデルの補助損失を計算するためにこれらの用語が使用されます。

DeepseekV4ForCausalLM

クラス transformers.DeepseekV4ForCausalLM

< >

( config: DeepseekV4Config )

パラメータ

  • config (DeepseekV4Config) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。

因果言語モデリング用の Deepseek V4 モデル。

このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = Noneoutput_router_logits: bool | None = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → MoeCausalLMOutputWithPast or tuple(torch.Tensor)

パラメータ

  • input_ids (torch.LongTensor の形状 (batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。

    インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。

    入力IDとは何ですか?

  • attention_mask (torch.Tensor の形状 (batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。 [0, 1]:
    • マスクされていないトークンに対して1
    • マスクされたトークンに対しては 0 です。

    アテンションマスクとは?

  • position_ids (torch.LongTensor の形状 (batch_size, sequence_length), 、任意) — 各入力シーケンスのトークンが位置埋め込み内で占める位置のインデックス。範囲 [0, config.n_positions - 1].

    ポジションIDとは?

  • 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 のインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。
  • labels (torch.LongTensor 形状 (batch_size, sequence_length), 任意) — 因果言語モデリングの損失を計算するためのラベル。インデックスは [-100, 0, ..., config.vocab_size] (参照 input_ids のドキュメント文字列を参照)。インデックスが -100 に設定されたトークンは無視(マスク)され、損失はラベルが [0, ..., config.vocab_size].

    ラベルは内部でシフトされるため、labels[..., 1:]を使用してlogits[..., :-1, :]を予測します。 input_idsと一致するシフトされていないラベル(つまりlabels = input_ids)を渡してください。ラベルを渡す前に、ご自身でシフトしないでください。

    ラベルがすでにシフトされている場合(シーケンス並列化など)、shift_labels キーワード引数として渡すと、そのまま使用されます。損失を計算するには、labels も引き続き渡す必要があります。

  • use_cache (bool、任意) — True に設定すると、past_key_values のキーバリュー状態が返され、デコーディングの高速化に利用できます(past_key_values を参照)。
  • output_router_logits (bool, 省略可) — すべてのルーターの logits を返すかどうか。ルーター損失の計算に有用ですが、推論時には返すべきではありません。
  • logits_to_keep (Union[int, torch.Tensor]、省略可、デフォルトは 0) — int の場合、最後の logits_to_keep トークンについて logits を計算します。0 の場合、すべての input_ids について logits を計算します(特殊ケース)。生成には最後のトークンの logits だけで十分であり、そのトークンのみについて計算することでメモリを節約できます。これは、長いシーケンスや大規模な語彙サイズの場合に特に顕著な効果があります。 torch.Tensor の場合、シーケンス長次元で保持するインデックスに対応する 1 次元テンソルである必要があります。これは、パックされたテンソル形式(バッチとシーケンス長を単一の次元にまとめた形式)を使用する場合に有用です。

戻り値

MoeCausalLMOutputWithPast または tuple(torch.Tensor)

MoeCausalLMOutputWithPast、またはtorch.Tensorのタプル(return_dict=Falseが渡された場合、またはconfig.return_dict=Falseの場合)。設定(DeepseekV4Config)や入力に応じて、さまざまな要素で構成されます。

DeepseekV4ForCausalLMのforwardメソッドは、__call__特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなくModuleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。

  • loss (torch.Tensor、形状 (1,)、任意、labels が指定された場合に返されます) — 言語モデリングの損失(次のトークンの予測用)。

  • logits (torch.Tensor、形状 (batch_size, sequence_length, config.vocab_size)) — 言語モデリングヘッドの予測スコア(SoftMax 適用前の各語彙トークンのスコア)。

  • aux_loss (torch.Tensor、任意、output_router_logits=True が渡された場合、または config.output_router_logits=True かつモデルがロードバランシング損失でルーターを学習する場合に返されます) — スパースモジュールのロードバランシング補助損失。ルーターバイアスでエキスパートをバランスさせるモデル(DeepSeek-V3 とそこから派生したアーキテクチャ)は、router_logits を返しながらも、ここでは None を返します。

  • router_logits (tuple(torch.Tensor)、optional、output_router_logits=True が渡された場合または config.output_router_logits=True の場合に返されます) — torch.Tensor のタプル(スパース層ごとに1つ)、形状は (batch_size * sequence_length, num_experts)。

    MoEルーターによって計算される生のルーターロジットです。ロードバランシング損失の計算や、トークンがどのようにエキスパートにディスパッチされるかの確認に使用できます。

  • past_key_values (Cache、任意、use_cache=True が渡された場合または config.use_cache=True の場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。

    逐次デコーディングを高速化するために使用できる(past_key_values 入力参照)、事前計算済みの隠れ状態(自己注意ブロックのキーとバリュー)が含まれます。

  • hidden_states (tuple(torch.Tensor)、optional、output_hidden_states=True が渡された場合または config.output_hidden_states=True の場合に返されます) — torch.Tensor のタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は (batch_size, sequence_length, hidden_size) です。

    各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。

  • attentions (tuple(torch.Tensor)、optional、output_attentions=True が渡された場合または config.output_attentions=True の場合に返されます) — torch.Tensor のタプル(各レイヤーごとに1つ)、形状は (batch_size, num_heads, sequence_length, sequence_length)。

    アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。

例:

>>> from transformers import AutoTokenizer, DeepseekV4ForCausalLM

>>> model = DeepseekV4ForCausalLM.from_pretrained("mistralai/DeepseekV4-8x7B-v0.1")
>>> tokenizer = AutoTokenizer.from_pretrained("mistralai/DeepseekV4-8x7B-v0.1")

>>> prompt = "Hey, are you conscious? Can you talk to me?"
>>> inputs = tokenizer(prompt, return_tensors="pt")

>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
Update on GitHub