# Ernie 4.5 Moe

## نظرة عامة

أُطلق نموذج Ernie 4.5 Moe ضمن إصدار [عائلة نماذج Ernie 4.5](https://ernie.baidu.com/blog/posts/ernie4.5/) من شركة baidu. تتضمن هذه العائلة من النماذج عدة معماريات وأحجام مختلفة. يستهدف هذا النموذج تحديداً نموذج النص الأساسي مع مزيج من الخبراء (moe) - أحدهما بإجمالي 21 مليار معلمة و3 مليارات معلمة نشطة، والآخر بإجمالي 300 مليار معلمة و47 مليار معلمة نشطة. يستخدم في جوهره [Llama](./llama) القياسي مع مزيج من الخبراء (MoE) متخصص مبني على [Mixtral](./mixtral) مع خبراء مشتركين إضافيين.

يمكن العثور على نماذج أخرى من العائلة في [Ernie 4.5](./ernie4_5) و[Ernie 4.5 VL MoE](./ernie4_5_vl_moe).

    

## نصائح للاستخدام

### توليد النص

```python
from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "baidu/ERNIE-4.5-21B-A3B-PT"

# load the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto",
)

# prepare the model input
inputs = tokenizer("Hey, are you conscious? Can you talk to me?", return_tensors="pt").to(model.device)
prompt = "Hey, are you conscious? Can you talk to me?"
messages = [
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], add_special_tokens=False, return_tensors="pt").to(model.device)

# conduct text completion
generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=32,
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()

# decode the generated ids
generate_text = tokenizer.decode(output_ids, skip_special_tokens=True)
```

### التوليد الموزع باستخدام توازي الموتر

```python
from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "baidu/ERNIE-4.5-21B-A3B-PT"

# load the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto",
    tp_plan="auto",
)

# prepare the model input
inputs = tokenizer("Hey, are you conscious? Can you talk to me?", return_tensors="pt").to(model.device)
prompt = "Hey, are you conscious? Can you talk to me?"
messages = [
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], add_special_tokens=False, return_tensors="pt").to(model.device)

# conduct text completion
generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=32,
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()

# decode the generated ids
generate_text = tokenizer.decode(output_ids, skip_special_tokens=True)
```

### التكميم باستخدام Bitsandbytes

```python
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

model_name = "baidu/ERNIE-4.5-21B-A3B-PT"

# load the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    device_map="auto",
    quantization_config=BitsAndBytesConfig(load_in_4bit=True),
)

# prepare the model input
inputs = tokenizer("Hey, are you conscious? Can you talk to me?", return_tensors="pt").to(model.device)
prompt = "Hey, are you conscious? Can you talk to me?"
messages = [
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], add_special_tokens=False, return_tensors="pt").to(model.device)

# conduct text completion
generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=32,
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()

# decode the generated ids
generate_text = tokenizer.decode(output_ids, skip_special_tokens=True)
```

تمت مساهمة هذا النموذج من قِبل [Anton Vlasjuk](https://huggingface.co/AntonV). يمكن العثور على الكود الأصلي [هنا](https://github.com/PaddlePaddle/ERNIE).

## Ernie4_5_MoeConfig[[transformers.Ernie4_5_MoeConfig]]

#### transformers.Ernie4_5_MoeConfig[[transformers.Ernie4_5_MoeConfig]]

```python
transformers.Ernie4_5_MoeConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, vocab_size: int = 103424, pad_token_id: int | None = 0, bos_token_id: int | None = 1, eos_token_id: int | list[int] | None = 2, hidden_size: int = 2560, intermediate_size: int = 12288, num_hidden_layers: int = 28, num_attention_heads: int = 20, num_key_value_heads: int | None = 4, hidden_act: str = 'silu', max_position_embeddings: int = 131072, initializer_range: float = 0.02, rms_norm_eps: float = 1e-05, use_cache: bool = True, tie_word_embeddings: bool = True, rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None, use_bias: bool | None = False, moe_intermediate_size: int = 1536, moe_k: int | None = 6, moe_num_experts: int | None = 64, moe_num_shared_experts: int | None = 2, moe_layer_start_index: int | None = 1, moe_layer_end_index: int | None = -1, moe_layer_interval: int | None = 1, moe_norm_min: float | None = 1e-12, output_router_logits: bool | None = False, router_aux_loss_coef: float | None = 0.001)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/ernie4_5_moe/configuration_ernie4_5_moe.py#L25)

**المعاملات:**

vocab_size (`int`، *اختياري*، القيمة الافتراضية `103424`) : حجم مفردات النموذج. يحدد عدد الرموز المختلفة التي يمكن تمثيلها بواسطة `input_ids`.

pad_token_id (`int`، *اختياري*، القيمة الافتراضية `0`) : معرّف الرمز المستخدم للتعبئة في المفردات.

bos_token_id (`int`، *اختياري*، القيمة الافتراضية `1`) : معرّف الرمز المستخدم لبدء البث في المفردات.

eos_token_id (`Union[int, list[int]]`، *اختياري*، القيمة الافتراضية `2`) : معرّف الرمز المستخدم لنهاية البث في المفردات.

hidden_size (`int`، *اختياري*، القيمة الافتراضية `2560`) : بُعد التمثيلات المخفية.

intermediate_size (`int`، *اختياري*، القيمة الافتراضية `12288`) : بُعد تمثيلات MLP.

num_hidden_layers (`int`، *اختياري*، القيمة الافتراضية `28`) : عدد الطبقات المخفية في مُفكِّك Transformer.

num_attention_heads (`int`، *اختياري*، القيمة الافتراضية `20`) : عدد رؤوس الانتباه في كل طبقة انتباه داخل مُفكِّك Transformer.

num_key_value_heads (`int`، *اختياري*، القيمة الافتراضية `4`) : هذا هو عدد رؤوس 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 جميع الرؤوس الأصلية داخل تلك المجموعة. لمزيد من التفاصيل، راجع [هذا الورق](https://huggingface.co/papers/2305.13245). إذا لم يتم تحديد القيمة، فستكون القيمة الافتراضية هي `num_attention_heads`.

hidden_act (`str`، *اختياري*، القيمة الافتراضية `silu`) : دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال، `"gelu"`، `"relu"`، `"silu"`، وما إلى ذلك.

max_position_embeddings (`int`، *اختياري*، الافتراضي هو `131072`) : أقصى طول تسلسل قد يُستخدم به هذا النموذج.

initializer_range (`float`، *اختياري*، القيمة الافتراضية `0.02`) : الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.

rms_norm_eps (`float`، *اختياري*، القيمة الافتراضية `1e-05`) : قيمة الإيبسلون المستخدمة في طبقات تطبيع rms.

use_cache (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب على النموذج إرجاع قيم المفاتيح/القيم الأخيرة للانتباه (لا تستخدمها جميع النماذج). لا ينطبق إلا إذا كان `config.is_decoder=True` أو عندما يكون النموذج نموذجًا توليديًا يعتمد على المُفكِّك فقط.

tie_word_embeddings (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب ربط ترميزات الأوزان وفقاً لخريطة `tied_weights_keys` الخاصة بالنموذج.

rope_parameters (`Union[~modeling_rope_utils.RopeParameters, dict]`، *اختياري*) : قاموس يحتوي على معاملات التهيئة الخاصة بتضمينات RoPE. يجب أن يحتوي القاموس على قيمة لـ `rope_theta`، وبشكل اختياري معاملات تُستخدم للتوسيع في حال رغبتَ في استخدام RoPE مع `max_position_embeddings` أطول.

use_bias (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان سيتم استخدام انحياز (bias) في أي من الإسقاطات (projections) بما في ذلك mlp و attention على سبيل المثال.

moe_intermediate_size (`int`، *اختياري*، القيمة الافتراضية `1536`) : الحجم الوسيط لشبكات MLP الخاصة بالخبراء الموجَّهين.

moe_k (`int`، *اختياري*، القيمة الافتراضية 6) : عدد الخبراء المحددين.

moe_num_experts (`int`، *اختياري*، القيمة الافتراضية 64) : عدد الخبراء الموجَّهين.

moe_num_shared_experts (`int`، *اختياري*، القيمة الافتراضية 2) : عدد الخبراء المشتركين في جميع عمليات الأمامية لنماذج MoE.

moe_layer_start_index (`int`، *اختياري*، القيمة الافتراضية 1) : أول فهرس تبدأ فيه طبقات MoE بالظهور.

moe_layer_end_index (`int`، *اختياري*، القيمة الافتراضية -1) : آخر فهرس ممكن لطبقة MoE.

moe_layer_interval (`int`، *اختياري*، القيمة الافتراضية 1) : الفواصل بين طبقات MoE التي تظهر.

moe_norm_min (`float`، *اختياري*، القيمة الافتراضية 1e-12) : الحد الأدنى لقيمة القسمة أثناء تطبيع التوجيه.

output_router_logits (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان يجب على النموذج إرجاع قيم التوجيه (router logits) أم لا. تمكين هذا الخيار سيتيح أيضًا للنموذج إخراج الخسارة المساعدة، بما في ذلك خسارة موازنة الحمل وخسارة توجيه z.

router_aux_loss_coef (`float`، *اختياري*، القيمة الافتراضية `0.001`) : معامل خسارة موازنة الحمل المساعدة. يُستخدم لعقابلة التوجيه غير المتساوي للخبراء في نماذج MoE.

هذه فئة الإعدادات المخزنة لإعدادات نموذج Ernie4_5_MoeModel. تُستخدم لاستحداث نموذج Ernie4 5 Moe وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى إعدادات مشابهة لتلك الخاصة بـ [baidu/ERNIE-4.5-21B-A3B-PT](https://huggingface.co/baidu/ERNIE-4.5-21B-A3B-PT)

ترث كائنات الإعداد من [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) لمزيد من المعلومات.

مثال:

```python
>>> from transformers import Ernie4_5_MoeModel, Ernie4_5_MoEConfig

>>> # Initializing a Ernie4_5_MoE style configuration
>>> configuration = Ernie4_5_MoEConfig()

>>> # Initializing a model from the ERNIE-4.5-21B-A3B style configuration
>>> model = Ernie4_5_MoeModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```

## Ernie4_5_MoeModel[[transformers.Ernie4_5_MoeModel]]

#### transformers.Ernie4_5_MoeModel[[transformers.Ernie4_5_MoeModel]]

```python
transformers.Ernie4_5_MoeModel(config: Ernie4_5_MoeConfig)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/ernie4_5_moe/modeling_ernie4_5_moe.py#L475)

**المعاملات:**

config ([Ernie4_5_MoeConfig](/docs/transformers/main/ar/model_doc/ernie4_5_moe#transformers.Ernie4_5_MoeConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

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

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.Ernie4_5_MoeModel.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, use_cache: bool | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/ernie4_5_moe/modeling_ernie4_5_moe.py#L492)

**المعاملات:**

input_ids (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : فهارس رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا. يمكن الحصول على الفهارس باستخدام [AutoTokenizer](/docs/transformers/main/ar/model_doc/auto#transformers.AutoTokenizer). راجع [PreTrainedTokenizer.encode()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) و [PreTrainedTokenizer.__call__()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) للتفاصيل. [ما هي معرّفات الإدخال؟](../glossary#input-ids)

attention_mask (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. قيم القناع المختارة من `[0, 1]`: - 1 للرموز التي **ليست مقنّعة**، - 0 للرموز التي **مقنّعة**.  [ما هي أقنعة الانتباه؟](../glossary#attention-mask)

position_ids (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : فهارس مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها من النطاق `[0, config.n_positions - 1]`.  [ما هي معرّفات المواضع؟](../glossary#position-ids)

past_key_values (`~cache_utils.Cache`، *اختياري*) : حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها لتسريع فك الترميز التسلسلي. يتكوّن هذا عادةً من `past_key_values` التي يعيدها النموذج في مرحلة سابقة من فك الترميز، عندما يكون `use_cache=True` أو `config.use_cache=True`. يُسمح فقط بتمرير كائن [Cache](/docs/transformers/main/ar/internal/generation_utils#transformers.Cache) كمدخل، راجع [دليل ذاكرة kv](https://huggingface.co/docs/transformers/en/kv_cache). إذا لم يتم تمرير `past_key_values`، فسيتم تهيئة [DynamicCache](/docs/transformers/main/ar/internal/generation_utils#transformers.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` أو مجموعة من `torch.Tensor` (إذا تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) تتكون من عناصر مختلفة اعتماداً على الإعداد ([Ernie4_5_MoeConfig](/docs/transformers/main/ar/model_doc/ernie4_5_moe#transformers.Ernie4_5_MoeConfig)) والمدخلات.

تتجاوز طريقة [Ernie4_5_MoeModel](/docs/transformers/main/ar/model_doc/ernie4_5_moe#transformers.Ernie4_5_MoeModel) الخاصة بالتقديم (forward) الطريقة الخاصة `__call__`.

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

- **last_hidden_state** (`torch.Tensor` من الشكل `(batch_size, sequence_length, hidden_size)`) -- تسلسل من حالات الإخفاء (hidden-states) عند مخرج الطبقة الأخيرة من النموذج.
- **past_key_values** (`Cache`، *اختياري*، يُعاد عند تمرير `use_cache=True` أو عند تعيين `config.use_cache=True`) -- هو كائن من نوع [Cache](/docs/transformers/main/ar/internal/generation_utils#transformers.Cache). لمزيد من التفاصيل، راجع [دليل ذاكرة kv](https://huggingface.co/docs/transformers/en/kv_cache).

  تحتوي على حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي، وفي كتل الانتباه المتقاطع اختياريًا إذا كان `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)`.

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

## Ernie4_5_MoeForCausalLM[[transformers.Ernie4_5_MoeForCausalLM]]

#### transformers.Ernie4_5_MoeForCausalLM[[transformers.Ernie4_5_MoeForCausalLM]]

```python
transformers.Ernie4_5_MoeForCausalLM(config: Ernie4_5_MoeConfig)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/ernie4_5_moe/modeling_ernie4_5_moe.py#L621)

**المعاملات:**

config ([Ernie4_5_MoeConfig](/docs/transformers/main/ar/model_doc/ernie4_5_moe#transformers.Ernie4_5_MoeConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

نموذج Ernie4 5 Moe لنمذجة اللغة السببية.

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.Ernie4_5_MoeForCausalLM.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, past_key_values: transformers.cache_utils.Cache | None = None, inputs_embeds: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, use_cache: bool | None = None, output_router_logits: bool | None = None, logits_to_keep: typing.Union[int, torch.Tensor] = 0, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/ernie4_5_moe/modeling_ernie4_5_moe.py#L640)

**المعاملات:**

input_ids (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : فهارس رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا. يمكن الحصول على الفهارس باستخدام [AutoTokenizer](/docs/transformers/main/ar/model_doc/auto#transformers.AutoTokenizer). راجع [PreTrainedTokenizer.encode()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) و [PreTrainedTokenizer.__call__()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) للتفاصيل. [ما هي معرّفات الإدخال؟](../glossary#input-ids)

attention_mask (`torch.Tensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : قناع لتجنب تنفيذ الانتباه على فهارس رموز الحشو. قيم القناع المختارة من `[0, 1]`: - 1 للرموز التي **ليست مقنّعة**، - 0 للرموز التي **مقنّعة**.  [ما هي أقنعة الانتباه؟](../glossary#attention-mask)

position_ids (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : فهارس مواضع رموز كل تسلسل إدخال في تضمينات المواضع. يتم اختيارها من النطاق `[0, config.n_positions - 1]`.  [ما هي معرّفات المواضع؟](../glossary#position-ids)

past_key_values (`~cache_utils.Cache`، *اختياري*) : حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها لتسريع فك الترميز التسلسلي. يتكوّن هذا عادةً من `past_key_values` التي يعيدها النموذج في مرحلة سابقة من فك الترميز، عندما يكون `use_cache=True` أو `config.use_cache=True`. يُسمح فقط بتمرير كائن [Cache](/docs/transformers/main/ar/internal/generation_utils#transformers.Cache) كمدخل، راجع [دليل ذاكرة kv](https://huggingface.co/docs/transformers/en/kv_cache). إذا لم يتم تمرير `past_key_values`، فسيتم تهيئة [DynamicCache](/docs/transformers/main/ar/internal/generation_utils#transformers.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`، يتم حساب القيم اللوجستية لجميع `input_ids` (حالة خاصة). لا تكون قيم اللوجستيات للرمز الأخير فقط ضرورية للتوليد، ويمكن أن يوفر حسابها لذلك الرمز وحده ذاكرة، وهو ما يصبح ذا أهمية كبيرة للترتيبات الطويلة أو لحجم المفردات الكبير. إذا كان `torch.Tensor`، يجب أن يكون بعدًا واحدًا (1D) ويتوافق مع الفهارس التي يجب الاحتفاظ بها في بُعد طول الترتيب. وهذا مفيد عند استخدام تنسيق المصفوفات المعبأة (packed tensor format) (بعد واحد لكل من الدفعة وطول الترتيب).

**يعيد:** `MoeCausalLMOutputWithPast` أو `tuple(torch.Tensor)`

`MoeCausalLMOutputWithPast` أو مجموعة من `torch.Tensor` (إذا تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) تتكون من عناصر مختلفة اعتماداً على الإعداد ([Ernie4_5_MoeConfig](/docs/transformers/main/ar/model_doc/ernie4_5_moe#transformers.Ernie4_5_MoeConfig)) والمدخلات.

تتجاوز طريقة [Ernie4_5_MoeForCausalLM](/docs/transformers/main/ar/model_doc/ernie4_5_moe#transformers.Ernie4_5_MoeForCausalLM) الخاصة بالتقديم (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 والهندسات المشتقة منه) قيمة `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](/docs/transformers/main/ar/internal/generation_utils#transformers.Cache). لمزيد من التفاصيل، راجع [دليل ذاكرة kv](https://huggingface.co/docs/transformers/en/kv_cache).

  تحتوي على حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي) يمكن استخدامها (انظر مدخل `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 على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

مثال:

```python
```

#### generate[[transformers.Ernie4_5_MoeForCausalLM.generate]]

```python
generate(inputs: typing.Optional[torch.Tensor] = None, generation_config: transformers.generation.configuration_utils.GenerationConfig | None = None, logits_processor: transformers.generation.logits_process.LogitsProcessorList | None = None, stopping_criteria: transformers.generation.stopping_criteria.StoppingCriteriaList | None = None, prefix_allowed_tokens_fn: collections.abc.Callable[[int, torch.Tensor], list[int]] | None = None, synced_gpus: bool | None = None, assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None, streamer: typing.Optional[ForwardRef('BaseStreamer')] = None, negative_prompt_ids: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, custom_generate: str | collections.abc.Callable | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/utils.py#L2581)

**المعاملات:**

inputs (`torch.Tensor` ذو شكل متغير حسب النمط، *اختياري*) : التسلسل المستخدم كموجّه للتوليد أو كمدخلات للنموذج إلى المُشفِّر. إذا كانت `None`، يهيّئ该方法 `bos_token_id` وحجم دفعة يساوي 1. بالنسبة لنماذج المُفكِّك فقط، يجب أن تكون `inputs` بصيغة `input_ids`. أما بالنسبة لنماذج المُشفِّر-المُفكِّك، فيمكن أن تمثل *inputs* أيّاً من `input_ids` أو `input_values` أو `input_features` أو `pixel_values`.

generation_config ([GenerationConfig](/docs/transformers/main/ar/main_classes/text_generation#transformers.GenerationConfig)، *اختياري*) : إعدادات التوليد التي سيتم استخدامها كإعدادات أساسية لاستدعاء التوليد. أي `**kwargs` تُمرَّر إلى generate وتطابق سمات `generation_config` ستُلغي قيمها. إذا لم يتم تقديم `generation_config`، فسيتم استخدام الإعداد الافتراضي، الذي له أولوية تحميل كالتالي: 1) من ملف النموذج `generation_config.json`، إذا كان موجودًا؛ 2) من إعدادات النموذج. يُرجى ملاحظة أن المعاملات غير المحددة ستورث القيم الافتراضية لـ [GenerationConfig](/docs/transformers/main/ar/main_classes/text_generation#transformers.GenerationConfig)، والتي يجب الرجوع إلى توثيقها لضبط توليد المعاملات.

logits_processor (`LogitsProcessorList`، *اختياري*) : معالجات logits مخصصة تكمل معالجات logits الافتراضية المبنية من الحُجج وإعدادات التوليد. إذا تم تمرير معالج logits تم إنشاؤه مسبقًا باستخدام الحُجج أو إعدادات التوليد، فسيتم طرح خطأ. هذه الميزة مخصصة للمستخدمين المتقدمين.

stopping_criteria (`StoppingCriteriaList`، *اختياري*) : معايير إيقاف مخصصة تكمل معايير الإيقاف الافتراضية المبنية من الحجج وإعدادات التوليد. إذا تم تمرير معيار إيقاف تم إنشاؤه مسبقًا باستخدام الحجج أو إعدادات التوليد، فسيتم طرح خطأ. إذا كان معيار الإيقاف الخاص بك يعتمد على مدخل `scores`، فتأكد من تمرير `return_dict_in_generate=True, output_scores=True` إلى `generate`. هذه الميزة مخصصة للمستخدمين المتقدمين.

prefix_allowed_tokens_fn (`Callable[[int, torch.Tensor], list[int]]`، *اختياري*) : إذا تم توفيره، فإن هذه الدالة تُقيّد بحث الحزمة (beam search) على الرموز المسموح بها فقط في كل خطوة. وإذا لم يُوفَّر، فلا يُطبَّق أي قيد. تتلقى هذه الدالة حجتين: معطّف الدفعة `batch_id` و`input_ids`. ويجب أن تُرجع قائمة بالرموز المسموح بها لخطوة التوليد التالية، مشروطةً بمعطّف الدفعة `batch_id` والرموز المولَّدة سابقًا `inputs_ids`. يُعدّ هذا الحُجّة مفيدًا للتوليد المقيد المشروط على البادئة، كما هو موصوف في [Autoregressive Entity Retrieval](https://huggingface.co/papers/2010.00904).

synced_gpus (`bool`، *اختياري*) : ما إذا كان يجب مواصلة تشغيل حلقة while حتى max_length. ما لم يتم تجاوز ذلك، سيُضبط هذا العلم على `True` عند استخدام `FullyShardedDataParallel` أو DeepSpeed ZeRO Stage 3 مع عدة وحدات معالجة رسومية (GPU) لتجنب حدوث تعطل (deadlock) إذا انتهت وحدة معالجة رسومية من التوليد قبل وحدات أخرى. وإلا، يكون الافتراضي `False`.

assistant_model (`PreTrainedModel`، *اختياري*) : نموذج مساعد يمكن استخدامه لتسريع عملية التوليد. يجب أن يكون لدى النموذج المساعد مُجزِّئ (tokenizer) مطابق تمامًا. يتحقق التسريع عندما يكون التنبؤ بالرموز المرشحة باستخدام النموذج المساعد أسرع بكثير من تشغيل عملية التوليد بالنموذج الذي تستدعي منه generate. وعليه، يجب أن يكون النموذج المساعد أصغر بكثير.

streamer (`BaseStreamer`، *اختياري*) : كائن Streamer الذي سيُستخدم لبثّ التسلسلات المولّدة. تُمرَّر الرموز المولّدة عبر `streamer.put(token_ids)`، ويتحمّل مُبثّ البيانات مسؤولية أي معالجة إضافية.

negative_prompt_ids (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : النص التوضيحي السلبي المطلوب لبعض المعالجات مثل CFG. يجب أن يتطابق حجم الدفعة مع حجم دفعة الإدخال. هذه ميزة تجريبية، وقد تخضع لتغييرات كاسرة في واجهة برمجة التطبيقات في الإصدارات المستقبلية.

negative_prompt_attention_mask (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : Attention_mask الخاص بـ `negative_prompt_ids`.

custom_generate (`str` أو `Callable`، *اختياري*) : أحد الخيارات التالية: - `str` (اسم مستودع في Hugging Face Hub): يشغّل دالة `generate` المخصصة المعرّفة في `custom_generate/generate.py` داخل ذلك المستودع بدلاً من طريقة `generate` القياسية. يستبدل المستودع منطق التوليد بالكامل، وقد يختلف نوع الإرجاع. - `str` (مسار مستودع محلي): نفس ما سبق لكن من مسار محلي. تتطلب المجلدات المحلية أيضاً `trust_remote_code=True` لأن `custom_generate/generate.py` المحلي يُنفَّذ. - `Callable`: ستقوم `generate` بتنفيذ خطوات تجهيز المدخلات المعتادة، ثم تستدعي الدالة القابلة للاستدعاء المُقدَّمة لتشغيل حلقة فك الترميز. لمزيد من المعلومات، راجع [التوثيق](../../generation_strategies#custom-generation-methods).

kwargs (`dict[str, Any]`، *اختياري*) : تخصيص مؤقت لـ `generation_config` و/أو معاملات إضافية خاصة بالنموذج (kwargs) سيتم تمريرها إلى دالة `forward` في النموذج. إذا كان النموذج من نوع المُشفِّر-المُفكِّك (encoder-decoder)، فيجب ألا تُضاف بادئة للمعاملات الخاصة بالمُشفِّر، بينما يجب أن تُضاف بادئة *decoder_* للمعاملات الخاصة بالمُفكِّك.

**يعيد:** [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) أو `torch.LongTensor`

[ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) (إذا كان `return_dict_in_generate=True` أو عندما يكون `config.return_dict_in_generate=True`) أو `torch.LongTensor`.

إذا لم يكن النموذج *نموذجاً* من نوع المُشفِّر-المُفكِّك (`model.config.is_encoder_decoder=False`)، فإن أنواع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) الممكنة هي:

- [GenerateDecoderOnlyOutput](/docs/transformers/main/ar/internal/generation_utils#transformers.generation.GenerateDecoderOnlyOutput)،
- [GenerateBeamDecoderOnlyOutput](/docs/transformers/main/ar/internal/generation_utils#transformers.generation.GenerateBeamDecoderOnlyOutput)

إذا كان النموذج من نوع مُشفِّر-مُفكِّك (`model.config.is_encoder_decoder=True`)، فإن أنواع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) الممكنة هي:

- [GenerateEncoderDecoderOutput](/docs/transformers/main/ar/internal/generation_utils#transformers.generation.GenerateEncoderDecoderOutput)،
- [GenerateBeamEncoderDecoderOutput](/docs/transformers/main/ar/internal/generation_utils#transformers.generation.GenerateBeamEncoderDecoderOutput)

يولّد تسلسلات من معرّفات الرموز (token ids) للنماذج التي تحتوي على رأس لنمذجة اللغة.

تُضبط معظم المعلمات التي تتحكم في التوليد في `generation_config`، والتي إذا لم تُمرَّر، فسيتم ضبطها على إعدادات التوليد الافتراضية للنموذج. يمكنك تجاوز أي `generation_config` عن طريق تمرير المعلمات المقابلة إلى generate()، على سبيل المثال `.generate(inputs, num_beams=4, do_sample=True)`.

لمراجعة عامة لاستراتيجيات التوليد وأمثلة الأكواد، راجع [الدليل التالي](../generation_strategies).

