Transformers documentation

DeepSeek-V4

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

تمت مساهمة هذا النموذج في Hugging Face Transformers في 2026-05-02.

DeepSeek-V4

DeepSeek-V4 هو نموذج اللغة من الجيل التالي من نوع MoE من DeepSeek (الورقة البحثية). تستبدل البنية المعمارية آلية Multi-head Latent Attention (MLA) المستخدمة في DeepSeek-V3 بتصميم هجين يجمع بين الانتباه المحلي والانتباه طويل المدى، وتُبدّل الاتصالات المتبقية (residual connections) باتصالات مفرطة مقيدة بالمفردات (Manifold-Constrained Hyper-Connections - mHC)، وتُهيّئ أول طبقات MoE القليلة باستخدام جدول تجزئة ثابت يربط بين معرّف الرمز (token-id) ومعرّف الخبير (expert-id).

تغطي هذه التنفيذ DeepSeek-V4-Flash وDeepSeek-V4-Pro وإصداريهما -Base المُدرَّبين مسبقًا. تشترك النماذج الأربعة جميعها في نفس البنية المعمارية، وتختلف فقط في العرض / العمق / عدد الخبراء والأوزان.

اضبط use_kernels=True في from_pretrained() لاستبدال الطبقات المدعومة بنوى مُحسَّنة من Hub. راجع تحميل النوى لمعرفة المزيد.

البنية (الورقة §2)

الانتباه الهجين (§2.3)

كل كتلة مُفكِّك (decoder) تنتمي إلى أحد أنواع الانتباه الثلاثة، وتُوجَّه بواسطة config.layer_types[i]:

  • انتباه كامل بنافذة منزلقة ("sliding_attention"): النافذة المحلية المكوّنة من sliding_window رمزًا فقط، دون فرع بعيد المدى. يتطابق مع أسلوب "Full Attention" في V3 لطبقات الإقلاع.
  • انتباه متناثر مضغوط ("compressed_sparse_attention"، CSA — الورقة §2.3.1): حوض ضغط منخفض (compress_rate_csa، الافتراضي m=4) مع نوافذ متداخلة، بالإضافة إلى Lightning Indexer (المعادلات 13–17) الذي يقيّم الاستعلامات مقابل الحوض ويجمع أفضل index_topk كتل لكل استعلام قبل وصولها إلى الانتباه الأساسي.
  • انتباه مضغوط بشدة ("heavily_compressed_attention"، HCA — الورقة §2.3.2): تجمع عالي الضغط (compress_rate_hca، الافتراضي m'=128) مع نوافذ غير متداخلة. لا يوجد فهرس — كل عنصر مجمّع يساهم في الانتباه.

تشارك جميع الأنواع الثلاثة نفس العمود الفقري:

  • انتباه الاستعلام متعدد الرؤوس المشترك K=V: num_key_value_heads = 1؛ ينتج kv_proj رأس KV واحدًا، ويُقرأ الموتر نفسه كل مفتاح وقيمة.
  • RoPE الجزئي (توزيع أزواج متداخلة، القسم 2.3.3 من الورقة البحثية «التموضع الدوراني الجزئي») على القنوات الأخيرة qk_rope_head_dim = head_dim * partial_rotary_factor لكل رأس. يُطبَّق الدوران نفسه مع الموضع -i على شريحة rope الخاصة بمخرج الانتباه (المعادلة 26) بحيث تبقى مساهمة كل عنصر KV دالةً على المسافة النسبية إلى الاستعلام.
  • مغصّ انتباه قابل للتعلم لكل رأس (المعادلة 27).
  • إسقاط المخرجات منخفض الرتبة المجمّع (القسم 2.3.1 «إسقاط المخرجات المجمّع»): o_groups مجموعات رؤوس → o_lora_rank لكل مجموعة → hidden_size، ويُحسب بواسطة DeepseekV4GroupedLinear (o_a_proj) يليه o_b_proj. يقلّل تكلفة مخرجات الانتباه الواسعة لكل رمز دون فقدان القدرة التمثيلية.
  • فرع K=V المشترك بنافذة المنزلقة بحجم sliding_window («فرع إضافي لانتباه النافذة المنزلقة»، §2.3.1) يحافظ على التبعيات الدقيقة المحلية؛ يتم دمج مخرجات ضاغط المدى الطويل مع قيم KVs لهذا الفرع قبل الانتباه الأساسي.

اتصالات فائقة مقيدة بمشعب (§2.2)

تُستبدل الاتصالات المتبقية بـ mHC (Xie et al., 2026): hc_mult من التدفقات المتبقية المتوازية تُحافظ على شكل [B, S, hc_mult, D] طوال كل كتلة. تختلط التدفقات داخل وخارج طبقات الانتباه / MLP الفرعية عبر وحدتي DeepseekV4HyperConnection — attn_hc وffn_hc — بواسطة ثلاثية (pre, post, comb). مصفوفة comb هي إسقاط مزدوج الاحتمالية يُنتج عبر تكرارات hc_sinkhorn_iters من خوارزمية Sinkhorn–Knopp على المتشعب، مما يجعل انتشار الإشارة غير موسِّعة عبر المكدسات العميقة. أخيرًا، تُقلّص DeepseekV4HyperHead التدفقات الـhc_mult إلى تسلسل واحد قبل تطبيع النموذج.

جدول MoE (§2.1)

يتم تكوين التوجيه لكل طبقة بواسطة config.mlp_layer_types، مع قيم من {"hash_moe", "moe"}:

  • "hash_moe": تأتي فهارس الخبراء من بحث مجمّد tid2eid[input_ids] مُعبّأ من نقطة التفتيش V4. لا يزال الوزن المتعلّم weight ينتج درجات لكل خبير تُوزّن الخبراء المختارين؛ فـ أيّ خبراء هو الثابت فقط. يُستخدم في طبقات الإقلاع الأولى (الافتراضي 3، ويمكن تجاوز ذلك عبر num_hash_layers القديم).
  • "moe": نموذج MoE القياسي مع توجيه top-k. يستخدم التقارب بين الخبراء Sqrt(Softplus(·)) بدلاً من Sigmoid المستخدم في V3 («نغيّر دالة التنشيط التي تحسب درجات التقارب من Sigmoid(·) إلى Sqrt(Softplus(·))»، الورقة §2.1)، ويُستغنى عن قيد n_group / topk_group الخاص بـ V3. كما يُحافظ على استراتيجية الخسارة المساعدة الخالية من الخسارة (noaux_tc من DeepSeek) عبر مخزن e_score_correction_bias الذي يميل argmax الخاص بـ top-k دون تدفق التدرجات.

تستخدم الخبراء الموجَّهون SwiGLU المقيد (gate.clamp(max=swiglu_limit)، up.clamp(min=-swiglu_limit, max=swiglu_limit)، ثم act_fn(gate) * up) فوق تخطيط أوزان الخبراء القياسي في Mixtral [num_experts, 2 * moe_intermediate_size, hidden_size]. يعمل خبير مشترك واحد (وهو شبكة MLP بسيطة من نوع SwiGLU بعرض moe_intermediate_size) بالتوازي على كل رمز.

تخطيط قناع الانتباه

تمتد كل طبقة من طبقات DeepseekV4Attention على محور المفاتيح عبر قناع الانزلاق السببي القياسي باستخدام block_bias الذي يعيده ضاغطها، ثم تُمرر القناع المُدمج إلى eager_attention_forward. الجزء المتحرك (يسار، [S, S]) هو نفسه لجميع أنواع الطبقات؛ بينما يختلف الجزء الخاص بالضاغط (يمين) حسب نوع الطبقة، وهو الجزء «الجديد» الفعلي الذي قدمته V4.

أُنشئت المخططات أدناه باستخدام إعداد صغير (sliding_window=8، وCSA m=4، وHCA m'=8، index_topk=2) على مدخل من 16 رمزًا، بحيث يتسع قناع كامل لكل نوع طبقة على الشاشة. الأخضر = القطر الخاص بالاستعلام/المفتاح في القسم المنزلق، الداكن = موضع 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، فإن الخانات k فقط الموجودة في الأعمدة [S + t·k, S + (t+1)·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]) الدقيق بعد الدمج، ويعيد تعيين قناع الفتحات المسطحة [S, S·k] الخاص بـ CSA إلى عرض [S, T_entries] لظهور الإدخالات (بحيث يكون كل عمود C_w هو إدخال مضغوط، وليس فتحة جمع)، ويكتب ملفات SVG الثلاثة المذكورة أعلاه. كما يطبع شبكة ANSI إلى stdout لفحص سريع في الطرفية، ويخرج اختيارات أعلى k لكل استعلام من الفهرس بحيث يمكن تدقيق حراس التسخين واختيارات الاختيار.

طبقات التخزين المؤقت

يتطلب كل كتلة انتباه غير منزلقة تمرير حالة ضاغط / فهرس عبر استدعاءات الأمامية. يأتي إصدار V4 بطبقتي تخزين ذاتيتين تسجلان تلقائيًا مع LAYER_TYPE_CACHE_MAPPING:

  • 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) — هذا هو عدد رؤوس key_value التي يجب استخدامها لتنفيذ Grouped Query Attention. إذا كان num_key_value_heads=num_attention_heads، فسيستخدم النموذج Multi Head Attention (MHA)، وإذا كان num_key_value_heads=1 فسيستخدم النموذج Multi Query Attention (MQA)، وإلا فسيتم استخدام GQA. عند تحويل نقطة تفتيش متعددة الرؤوس إلى نقطة تفتيش GQA، يجب بناء كل رأس key و value للمجموعة عن طريق meanpooling جميع الرؤوس الأصلية داخل تلك المجموعة. لمزيد من التفاصيل، راجع هذا الورقة. إذا لم يتم تحديد القيمة، فستكون القيمة الافتراضية هي 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} (حيث m=4 لـ CSA، و m’=128 لـ HCA، وفقاً للقسم 2.3.1 / 2.3.2 من الورقة البحثية). ملاحظة: يتم دمج الإعدادات التي تتضمن compress_rate_csa / compress_rate_hca كـ kwargs على مستوى أعلى في وقت __post_init__.
  • compress_rope_theta (Union[float, int]، اختياري، القيمة الافتراضية 160000.0) — القيمة الأساسية لـ RoPE في الفروع المضغوطة (تُستخدم مع rope_scaling لتقنية YaRN).
  • hc_mult (int، اختياري، القيمة الافتراضية 4) — معامل التوسيع n_hc لـ Manifold-Constrained Hyper-Connection (mHC) (نشط دائمًا؛ القسم 2.2).
  • hc_sinkhorn_iters (int, اختياري، القيمة الافتراضية 20) — عدد تكرارات Sinkhorn-Knopp t_max لإسقاط إسقاط خرائط المتبقي mHC على المصفوفات ذات الاحتمالية المزدوجة.
  • 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")؛ moe هو MoE القياسي الموجّه عبر top-k. الافتراضي: 3× hash_moe ثم moe للطبقات المتبقية. ملاحظة توافق: الإعدادات القديمة التي تتضمن num_hash_layers كمعامل علوي تُدمج عند __post_init__.
  • swiglu_limit (float، اختياري، القيمة الافتراضية 10.0) — يقوم بقصّ التفعيلات المسبقة لبوابات/مسارات الخبراء الموجَّهين.
  • 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) — ما إذا كان يجب على النموذج إرجاع قيم اللوجيتس الخاصة بالموجِّه (router). تمكين هذا الخيار سيتيح أيضًا للنموذج إخراج الخسارة المساعدة، بما في ذلك خسارة موازنة الحمل وخسارة z الخاصة بالموجِّه.
  • router_aux_loss_coef (float، اختياري، القيمة الافتراضية 0.001) — معامل خسارة موازنة الحمل المساعدة. يُستخدم لعقابلة التوجيه غير المتساوي للخبراء في نماذج MoE.
  • router_jitter_noise (float، اختياري، القيمة الافتراضية 0.0) — كمية الضوضاء المضافة إلى قيم التوجيه (logits) أثناء التدريب لتحسين توازن الحمل.
  • hidden_act (str، اختياري، القيمة الافتراضية silu) — دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال، "gelu"، "relu"، "silu"، وغيرها.
  • initializer_range (float، اختياري، القيمة الافتراضية 0.02) — الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.
  • rms_norm_eps (float، اختياري، القيمة الافتراضية 1e-06) — قيمة الإيبسلون المستخدمة في طبقات تطبيع rms.
  • use_cache (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب على النموذج إرجاع قيم المفاتيح/القيم الأخيرة للانتباه (لا تستخدمها جميع النماذج). لا ينطبق إلا إذا كان config.is_decoder=True أو إذا كان النموذج نموذجًا توليديًا يعتمد على المُفكِّك فقط.
  • pad_token_id (int, اختياري) — معرّف الرمز المستخدم للتعبئة في المفردات.
  • bos_token_id (int, اختياري، القيمة الافتراضية 0) — معرّف الرمز المستخدم لبدء البث في المفردات.
  • eos_token_id (Union[int, list[int]]، اختياري، القيمة الافتراضية 1) — معرّف الرمز المستخدم لنهاية التدفق في المفردات.
  • tie_word_embeddings (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم ربط ترميزات الأوزان وفقاً لخريطة tied_weights_keys الخاصة بالنموذج.
  • rope_parameters (Union[~modeling_rope_utils.RopeParameters, dict], اختياري) — قائمة تحتوي على معاملات التهيئة الخاصة بتضمينات RoPE. يجب أن تحتوي القائمة على قيمة لـ rope_theta، ومعاملات اختيارية تُستخدم للتوسيع في حال رغبتَ في استخدام RoPE مع max_position_embeddings أطول.
  • 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) — ما إذا كان سيتم استخدام انحياز في طبقات up_proj وdown_proj وgate_proj ضمن طبقات MLP.
  • attention_dropout (float، اختياري، القيمة الافتراضية 0.0) — نسبة الإسقاط (dropout) لاحتمالات الانتباه.

هذه فئة الإعدادات المخزنة لإعدادات نموذج DeepseekV4Model. تُستخدم لتوليد نموذج Deepseek V4 وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن إنشاء إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ deepseek-ai/DeepSeek-V4-Flash-Base

ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.

validate_layer_type

< >

( )

يضيّق الإصدار V4 النطاق العام لـ ALLOWED_LAYER_TYPES ليقتصر على أنواع كتل الانتباه الثلاثة وأنواع كتل MLP الاثنتين اللتين يوفرهما فعلياً، وذلك إلى جانب فحوصات الطول والعضوية في النوع القياسية.

DeepseekV4Model

فئة transformers.DeepseekV4Model

< >

( config: DeepseekV4Config )

المعاملات

  • config (DeepseekV4Config) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.

نموذج Deepseek V4 الأساسي الذي يُخرج حالات مخفية خام دون أي رأس محدد في الأعلى.

يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق 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() للتفاصيل.

    ما هي معرّفات الإدخال؟

  • 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].

    ما هي معرّفات المواقع؟

  • past_key_values (~cache_utils.Cache, اختياري) — حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها لتسريع فك الترميز التسلسلي. يتكون هذا عادةً من past_key_values الذي يعيده النموذج في مرحلة سابقة من فك الترميز، عندما use_cache=True أو config.use_cache=True.

    يُسمح فقط بمرجع Cache كمدخل، راجع دليل ذاكرة kv لدينا. إذا لم يتم تمرير past_key_values، فسيتم تهيئة DynamicCache افتراضياً.

    سيُخرج النموذج نفس صيغة الكاش التي تُمرَّر كمدخل.

    عند استخدام past_key_values، يُتوقَّع من المستخدم إدخال input_ids غير المعالجة فقط (تلك التي لم تُقدَّم حالات مفاتيحها وقيمها السابقة إلى هذا النموذج) بأبعاد (batch_size, unprocessed_length) بدلاً من جميع input_ids بأبعاد (batch_size, sequence_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 أو مجموعة (tuple) من 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.

    تحتوي على حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي، وفي كتل الانتباه المتقاطع اختياريًا إذا كان config.is_encoder_decoder=True) يمكن استخدامها (انظر مدخل past_key_values) لتسريع فك الترميز التسلسلي.

  • hidden_states (tuple(torch.Tensor)، اختياري، يُعاد عند تمرير output_hidden_states=True أو عند تعيين config.output_hidden_states=True) — مجموعة من torch.Tensor (واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) من الشكل (batch_size, sequence_length, hidden_size).

    حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.

  • attentions (tuple(torch.Tensor)، اختياري، يُعاد عند تمرير output_attentions=True أو عند تعيين config.output_attentions=True) — مجموعة من torch.Tensor (واحدة لكل طبقة) بأبعاد (batch_size, num_heads, sequence_length, sequence_length).

    أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

  • router_logits (tuple(torch.Tensor)، اختياري، يُعاد عند تمرير output_router_probs=True وconfig.add_router_probs=True أو عند config.output_router_probs=True) — مجموعة من torch.Tensor (واحدة لكل طبقة) بأبعاد (batch_size, sequence_length, num_experts).

    قيمات logits الخام (بعد تطبيق دالة softmax) التي يحسبها موجّهو MoE، وتُستخدم هذه القيم لحساب الخسارة المساعدة في نماذج مزيج الخبراء.

DeepseekV4ForCausalLM

فئة transformers.DeepseekV4ForCausalLM

< >

( config: DeepseekV4Config )

المعاملات

  • config (DeepseekV4Config) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.

نموذج Deepseek V4 لنمذجة اللغة السببية.

يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق 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() للتفاصيل.

    ما هي معرّفات الإدخال؟

  • 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].

    ما هي معرّفات المواقع؟

  • past_key_values (~cache_utils.Cache, اختياري) — حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها لتسريع فك الترميز التسلسلي. يتكون هذا عادةً من past_key_values الذي يعيده النموذج في مرحلة سابقة من فك الترميز، عندما use_cache=True أو config.use_cache=True.

    يُسمح فقط بمرجع Cache كمدخل، راجع دليل ذاكرة kv لدينا. إذا لم يتم تمرير past_key_values، فسيتم تهيئة DynamicCache افتراضياً.

    سيُخرج النموذج نفس صيغة الكاش التي تُمرَّر كمدخل.

    عند استخدام past_key_values، يُتوقَّع من المستخدم إدخال input_ids غير المعالجة فقط (تلك التي لم تُقدَّم حالات مفاتيحها وقيمها السابقة إلى هذا النموذج) بأبعاد (batch_size, unprocessed_length) بدلاً من جميع input_ids بأبعاد (batch_size, sequence_length).

  • inputs_embeds (torch.Tensor من الشكل (batch_size, sequence_length, hidden_size)، اختياري) — اختياريًا، بدلاً من تمرير input_ids، يمكنك اختيار تمرير تمثيل مضمّن مباشرة. وهذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارس input_ids إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.
  • labels (torch.LongTensor من الشكل (batch_size, sequence_length)، اختياري) — التسميات لحساب خسارة نمذجة اللغة المقنّعة. يجب أن تكون الفهارس ضمن [0, ..., config.vocab_size] أو -100 (انظر input_ids docstring). يتم تجاهل الرموز التي فهارسها مضبوطة على -100 (مقنّعة)، ولا تُحسب الخسارة إلا للرموز التي تسمياتها ضمن [0, ..., config.vocab_size].
  • use_cache (bool، اختياري) — إذا تم تعيينه إلى True، تُعاد حالات المفاتيح والقيم past_key_values ويمكن استخدامها لتسريع فك الترميز (انظر past_key_values).
  • output_router_logits (bool, اختياري) — ما إذا كان يجب إرجاع قيم logits لجميع الموجّهات (routers) أم لا. تُفيد هذه القيم في حساب خسارة الموجّه (router loss)، ولا ينبغي إرجاعها أثناء الاستدلال.
  • logits_to_keep (Union[int, torch.Tensor]، اختياري، القيمة الافتراضية 0) — إذا كان int، يتم حساب logits لآخر logits_to_keep رموز. إذا كانت القيمة 0، يتم حساب logits لجميع input_ids (حالة خاصة). لا يُحتاج إلى logits إلا للرمز الأخير في عملية التوليد، ويمكن أن يوفر حسابها لذلك الرمز وحده ذاكرة كبيرة، وهو أمر مهم بشكل ملحوظ للتسلسلات الطويلة أو حجم المفردات الكبير. إذا كان torch.Tensor، يجب أن يكون بعدًا واحدًا (1D) ويتوافق مع الفهارس التي يجب الاحتفاظ بها في بُعد طول التسلسل. يكون هذا مفيدًا عند استخدام تنسيق المصفوفات المعبأة (packed tensor format) (بعد واحد لكل من الدفعة وطول التسلسل).

يعيد

MoeCausalLMOutputWithPast أو tuple(torch.Tensor)

MoeCausalLMOutputWithPast أو مجموعة (tuple) من torch.Tensor (إذا تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة تعتمد على الإعداد (DeepseekV4Config) والمدخلات.

تتجاوز طريقة DeepseekV4ForCausalLM الخاصة بالتقديم (forward) الطريقة الخاصة __call__.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن Module بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

  • loss (torch.Tensor of shape (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 والهندسات المشتقة منه) تعيد None هنا مع الاستمرار في إعادة router_logits.

  • router_logits (tuple(torch.Tensor)، اختياري، يُعاد عند تمرير output_router_logits=True أو عند تعيين config.output_router_logits=True) — مجموعة من torch.Tensor (واحدة لكل طبقة متناثرة) ذات الشكل (batch_size * sequence_length, num_experts).

    قيمات التوجيه الخام (logits) التي تحسبها وحدات التوجيه في نماذج MoE. يمكن استخدامها لحساب خسارة موازنة الحمل أو لفحص كيفية توزيع الرموز على الخبراء.

  • past_key_values (Cache، اختياري، يُعاد عند تمرير use_cache=True أو عند تعيين config.use_cache=True) — إنه كائن من نوع Cache. لمزيد من التفاصيل، راجع دليل ذاكرة kv.

    تحتوي على حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي) يمكن استخدامها (انظر مدخل past_key_values) لتسريع فك الترميز التسلسلي.

  • hidden_states (tuple(torch.Tensor)، اختياري، يُعاد عند تمرير output_hidden_states=True أو عند تعيين config.output_hidden_states=True) — مجموعة من torch.Tensor (واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) من الشكل (batch_size, sequence_length, hidden_size).

    حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.

  • attentions (tuple(torch.Tensor)، اختياري، يُعاد عند تمرير output_attentions=True أو عند تعيين config.output_attentions=True) — مجموعة من torch.Tensor (واحدة لكل طبقة) بأبعاد (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