Transformers documentation
DeepSeek-V4
تمت مساهمة هذا النموذج في 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 يتم قطع المثلث السفلي الأيسر، مما يستعيد نمط الانتباه المحلي فقط.
طبقة 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.
طبقة 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 على التوالي.
يمكن إعادة إنتاج هذه المخططات من البداية إلى النهاية عبر:
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
< 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 = 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 لمزيد من المعلومات.
يضيّق الإصدار V4 النطاق العام لـ ALLOWED_LAYER_TYPES ليقتصر على أنواع كتل الانتباه الثلاثة وأنواع كتل MLP الاثنتين اللتين يوفرهما فعلياً، وذلك إلى جانب فحوصات الطول والعضوية في النوع القياسية.
DeepseekV4Model
فئة transformers.DeepseekV4Model
< source >( config: DeepseekV4Config )
المعاملات
- config (DeepseekV4Config) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Deepseek V4 الأساسي الذي يُخرج حالات مخفية خام دون أي رأس محدد في الأعلى.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( 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
< source >( config: DeepseekV4Config )
المعاملات
- config (DeepseekV4Config) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Deepseek V4 لنمذجة اللغة السببية.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( 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_idsdocstring). يتم تجاهل الرموز التي فهارسها مضبوطة على-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.Tensorof 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."