# Mamba 2

يعتمد [Mamba 2](https://huggingface.co/papers/2405.21060) على إطار ازدواجية فضاء الحالة (SSD) الذي يربط بين نماذج فضاء الحالة المهيكلة (SSMs) ومتغيرات الانتباه. وهو يستخدم خوارزمية SSD أكثر كفاءة، أسرع من Mamba بمقدار 2 إلى 8 أضعاف، كما يعدّل البنية المعمارية لتمكين التوازي على مستوى المصفوفات (tensor parallelism) وهيكل رؤوس انتباه القيم المجمعة (GVA).

يمكنك العثور على جميع نقاط التفتيش الأصلية لنموذج Mamba 2 تحت منظمة [State Space Models](https://huggingface.co/state-spaces)، لكن الأمثلة المعروضة أدناه تستخدم [mistralai/Mamba-Codestral-7B-v0.1](https://huggingface.co/mistralai/Mamba-Codestral-7B-v0.1) لأن تطبيق Hugging Face غير مدعوم بعد لنقاط التفتيش الأصلية.

تشمل البنى الأخرى القائمة على Mamba 2 ما يلي: [Bamba](./bamba)، و[FalconH1](./falcon_h1)، و[Zamba2](./zamba2).

> [!TIP]
> تمت مساهمة هذا النموذج من قِبل [ArthurZ](https://huggingface.co/ArthurZ). انقر على نماذج Mamba في الشريط الجانبي الأيمن لمزيد من الأمثلة على كيفية تطبيق Mamba على مهام لغوية مختلفة.

يُظهر المثال أدناه كيفية توليد النص باستخدام [Pipeline](/docs/transformers/main/ar/main_classes/pipelines#transformers.Pipeline) و[AutoModel](/docs/transformers/main/ar/model_doc/auto#transformers.AutoModel) ومن سطر الأوامر.

```python
from transformers import pipeline

pipeline = pipeline(
    task="text-generation",
    model="mistralai/Mamba-Codestral-7B-v0.1",
    device=0
)
pipeline("Plants create energy through a process known as")
```

```python
from transformers import AutoModelForCausalLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("mistralai/Mamba-Codestral-7B-v0.1")
model = AutoModelForCausalLM.from_pretrained("mistralai/Mamba-Codestral-7B-v0.1", device_map="auto")
input_ids = tokenizer("Plants create energy through a process known as", return_tensors="pt").to(model.device)

output = model.generate(**input_ids)
print(tokenizer.decode(output[0], skip_special_tokens=True))
```

تقلل عملية التكميم العبء على الذاكرة في النماذج الكبيرة من خلال تمثيل الأوزان بدقة أقل. راجع نظرة عامة على [التكميم](../quantization/overview) للاطلاع على المزيد من واجهات التكميم المتاحة.

يستخدم المثال أدناه [torchao](../quantization/torchao) لاختزال الأوزان إلى أعداد صحيحة ذات 4 بت فقط.

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

quantization_config = TorchAoConfig("int4_weight_only", group_size=128)
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mamba-Codestral-7B-v0.1")
model = AutoModelForCausalLM.from_pretrained("mistralai/Mamba-Codestral-7B-v0.1", quantization_config=quantization_config, device_map="auto")
input_ids = tokenizer("Plants create energy through a process known as", return_tensors="pt").to(model.device)

output = model.generate(**input_ids)
print(tokenizer.decode(output[0], skip_special_tokens=True))
```

## ملاحظات

- يتميز Codestral Mamba بـ`groups=8` وهي تشبه عدد رؤوس kv في نموذج يعتمد على الانتباه.
- يحتوي Codestral Mamba على مساري تقدّم مختلفين، `torch_forward` أو `cuda_kernels_forward`، ومن المتوقع أن تكون نتائجهما مختلفة قليلاً.
  - `torch_forward` دون التجميع أسرع بـ 3 إلى 4 أضعاف من `cuda_kernels_forward`.
  - `cuda_kernels_forward` يستخدم نواة CUDA الأصلية إذا كانت متاحة في بيئتك. يكون أبطأ أثناء مرحلة التعبئة المسبقة (prefill) لأنه يتطلب "تشغيلة إحماء" بسبب العبء الأعلى على وحدة المعالجة المركزية (انظر [هذه](https://github.com/state-spaces/mamba/issues/389#issuecomment-2171755306) [التعليقات](https://github.com/state-spaces/mamba/issues/355#issuecomment-2147597457) لمزيد من التفاصيل).

- لا توجد تمثيلات موضعية في هذا النموذج، لكن يوجد `attention_mask` ومنطق محدد لإخفاء الحالات المخفية في موضعين عند التوليد الدُفعي (انظر هذا [تعليق](https://github.com/state-spaces/mamba/issues/66#issuecomment-1863563829) لمزيد من التفاصيل). يؤدي هذا (بالإضافة إلى إعادة تنفيذ نواة Mamba 2) إلى اختلاف طفيف بين التوليد الدُفعي والتوليد المخزّن مؤقتًا.

- يعتمد خوارزمية SSM اعتماداً كبيراً على عمليات انكماش الموترات (tensor contractions)، والتي لها مكافئات في عمليات ضرب المصفوفات (matmul)، لكن ترتيب العمليات يختلف قليلاً. وهذا يجعل الفارق أكبر عند استخدام دقات أقل.

- يتم اختبار الحشو (Padding) مع الحشو الأيسر فقط. يؤدي الحشو الأيمن إلى تحديث ذاكرة التخزين المؤقت بمواقع الحشو، مما يعطي نتائج غير موثوقة. اضبط `tokenizer.padding_side="left"` عند التوليد الدُفعي. راجع [جانب الحشو](../llm_tutorial#padding-side).

- يُبيّن المثال أدناه كيفية ضبط موديل Mamba 2 باستخدام [PEFT](https://huggingface.co/docs/peft).

```python
from datasets import load_dataset
from peft import LoraConfig
from trl import SFTConfig, SFTTrainer

model_id = "mistralai/Mamba-Codestral-7B-v0.1"
dataset = load_dataset("Abirate/english_quotes", split="train")
training_args = SFTConfig(dataset_text_field="quote", gradient_checkpointing=True, per_device_train_batch_size=4)
lora_config =  LoraConfig(target_modules=["x_proj", "embeddings", "in_proj", "out_proj"])
trainer = SFTTrainer(
    model=model_id,
    args=training_args,
    train_dataset=dataset,
    peft_config=lora_config,
)
trainer.train()
```

## Mamba2Config[[transformers.Mamba2Config]]

#### transformers.Mamba2Config[[transformers.Mamba2Config]]

```python
transformers.Mamba2Config(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, num_heads: int = 128, head_dim: int = 64, vocab_size: int = 32768, hidden_size: int = 4096, state_size: int = 128, num_hidden_layers: int = 64, layer_norm_epsilon: float = 1e-05, pad_token_id: int | None = 1, bos_token_id: int | None = 0, eos_token_id: int | list[int] | None = 2, expand: int = 2, conv_kernel: int = 4, n_groups: int = 8, use_bias: bool = False, use_conv_bias: bool = True, hidden_act: str = 'silu', initializer_range: float = 0.1, residual_in_fp32: bool = True, time_step_rank: str | int = 'auto', time_step_min: float = 0.001, time_step_max: float = 0.1, time_step_floor: float = 0.0001, time_step_limit: list[float] | tuple[float, ...] = (0.0, inf), rescale_prenorm_residual: bool = False, use_cache: bool = True, chunk_size: int = 256, tie_word_embeddings: bool = False)
```

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

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

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

head_dim (`int`, *اختياري*, الافتراضي هو `64`) : أبعاد رأس الانتباه. إذا كانت None، فسيكون الافتراضي hidden_size // num_attention_heads

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

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

state_size (`int`، *اختياري*، القيمة الافتراضية `128`) : حجم حالة SSM (بعد الحالة الكامنة) في طبقات Mamba.

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

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

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

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

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

expand (`int`، *اختياري*، القيمة الافتراضية 2) : عامل التوسيع المستخدم لتحديد الحجم الوسيط.

conv_kernel (`int`، *اختياري*، القيمة الافتراضية `4`) : حجم النواة الالتفافية.

n_groups (`int`، *اختياري*، القيمة الافتراضية 8) : عدد المجموعات لمصفوفات التطور في mamba 2.

use_bias (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان سيتم استخدام الانحياز في ["in_proj", "out_proj"] داخل كتلة الميكسر

use_conv_bias (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كان سيتم استخدام الانحياز في طبقة الالتفاف داخل كتلة الميكسر.

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

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

residual_in_fp32 (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان ينبغي أن تكون البواقي (residuals) من نوع `float32`. إذا تم ضبطها على `False` فستحتفظ البواقي بنفس `dtype` مثل باقي النموذج

time_step_rank (`Union[str, int]`، *اختياري*، القيمة الافتراضية `auto`) : رتبة إسقاط الدلتا (خطوة الزمن). يمكن أن تكون `"auto"` لضبطها تلقائيًا.

time_step_min (`float`، *اختياري*، القيمة الافتراضية `0.001`) : الحد الأدنى لـ`time_step` المستخدم لتحديد `dt_proj.bias`.

time_step_max (`float`، *اختياري*، القيمة الافتراضية `0.1`) : الحد الأقصى لـ `time_step` المستخدم لتحديد `dt_proj.bias`.

time_step_floor (`float`، *اختياري*، القيمة الافتراضية `0.0001`) : الحد الأدنى المسموح به لقيمة خطوة الزمن المنفصلة دلتا بعد تفعيل softplus.

time_step_limit (`Union[list[float], tuple[float, ...]]`، *اختياري*، القيمة الافتراضية `(0.0, inf)`) : النطاق المقبول لقيم خطوة الوقت للتحكم بها.

rescale_prenorm_residual (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان سيتم إعادة تحجيم أوزان `out_proj` عند التهيئة.

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

chunk_size (`int`، *اختياري*، القيمة الافتراضية 256) : حجم المقاطع التي ستشكل التسلسل.

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

هذه فئة الإعدادات المخزنة لإعدادات نموذج Mamba2Model. تُستخدم لاستحداث نموذج Mamba2 وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى إعدادات مشابهة لتلك الخاصة بـ [state-spaces/mamba2-2.8b](https://huggingface.co/state-spaces/mamba2-2.8b)

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

مثال:

```python
>>> from transformers import Mamba2Config, Mamba2Model

>>> # Initializing a Mamba2 configuration
>>> configuration = Mamba2Config()

>>> # Initializing a model (with random weights) from the configuration
>>> model = Mamba2Model(configuration)

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

## Mamba2Model[[transformers.Mamba2Model]]

#### transformers.Mamba2Model[[transformers.Mamba2Model]]

```python
transformers.Mamba2Model(config: Mamba2Config)
```

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

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

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

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

يرث هذا النموذج من [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.Mamba2Model.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, inputs_embeds: typing.Optional[torch.LongTensor] = None, cache_params: transformers.cache_utils.Cache | None = None, use_cache: bool | None = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, attention_mask: typing.Optional[torch.Tensor] = None, **kwargs)
```

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

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

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)

inputs_embeds (`torch.LongTensor` بشكل `(batch_size, sequence_length, hidden_size)`، *اختياري*) : بدلاً من تمرير `input_ids`، يمكنك اختيار تمرير تمثيل مضمّن مباشرةً. وهذا مفيد إذا أردت مزيداً من التحكم في كيفية تحويل فهارس `input_ids` إلى المتجهات المرتبطة بها بدلاً من مصفوفة البحث المضمّنة الداخلية للنموذج.

cache_params (`Cache`، *اختياري*) : إذا تم تمريره، يستخدم النموذج الحالة السابقة في جميع الكتل (مما سيُنتج المخرجات الخاصة بـ`input_ids` المُقدَّمة وكأن النموذج أضاف `state_input_ids + input_ids` كسياق).

use_cache (`bool`، *اختياري*) : إذا تم ضبطه على `True`، يُعاد `cache_params` ويمكن استخدامه لتوليد logits التالية بسرعة.

output_hidden_states (`bool`, *اختياري*) : ما إذا كان سيتم إرجاع الحالات المخفية لجميع الطبقات. راجع `hidden_states` ضمن الموترات المُرجعة لمزيد من التفاصيل.

return_dict (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) بدلاً من tuple عادي.

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

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

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

تتجاوز طريقة [Mamba2Model](/docs/transformers/main/ar/model_doc/mamba2#transformers.Mamba2Model) الأمامية الطريقة الخاصة `__call__`.

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

- **last_hidden_state** (`torch.Tensor` بأبعاد `(batch_size, sequence_length, hidden_size)`، *اختياري*) -- تسلسل من الحالات المخفية عند مخرجات الطبقة الأخيرة من النموذج.
- **cache_params** (`~cache_utils.Cache`، *اختياري*) -- حالة النموذج عند آخر خطوة زمنية. يمكن استخدامه في طريقة الأمامية مع `input_ids` التالية لتجنب تقديم `input_ids` القديمة.

  يتضمن مصفوفات حالة نموذج فضاء الحالة بعد المسح الانتقائي، وحالات التمرير
- **hidden_states** (`tuple[torch.Tensor]`، *اختياري*، يُعاد عند تمرير `output_hidden_states=True` أو عند تعيين `config.output_hidden_states=True`) -- مجموعة (Tuple) من `torch.Tensor` (واحدة لكل من مخرجات الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لكل من مخرجات كل طبقة) بأبعاد `(batch_size, sequence_length, hidden_size)`.

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

## Mamba2LMHeadModel[[transformers.Mamba2ForCausalLM]]

#### transformers.Mamba2ForCausalLM[[transformers.Mamba2ForCausalLM]]

```python
transformers.Mamba2ForCausalLM(config: Mamba2Config)
```

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

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

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

نموذج MAMBA2 المُحوِّل (Transformer) مع رأس لنمذجة اللغة في الأعلى (طبقة خطية بأوزان غير مرتبطة بتضمينات الإدخال).

يرث هذا النموذج من [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.Mamba2ForCausalLM.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, cache_params: transformers.cache_utils.Cache | None = None, labels: typing.Optional[torch.LongTensor] = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, use_cache: bool | None = None, attention_mask: typing.Optional[torch.Tensor] = None, logits_to_keep: typing.Union[int, torch.Tensor] = 0, **kwargs)
```

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

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

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)

inputs_embeds (`torch.Tensor` من الشكل `(batch_size, sequence_length, hidden_size)`، *اختياري*) : بدلاً من تمرير `input_ids`، يمكنك اختيار تمرير تمثيل مضمّن مباشرةً. هذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارس `input_ids` إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.

cache_params (`Cache`، *اختياري*) : إذا تم تمريره، يستخدم النموذج الحالة السابقة في جميع الكتل (مما سيُنتج المخرجات الخاصة بـ`input_ids` المُقدَّمة وكأن النموذج أضاف `state_input_ids + input_ids` كسياق).

labels (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : تسميات لنمذجة اللغة. لاحظ أن التسميات **مُزاحة** داخل النموذج، أي يمكنك تعيين `labels = input_ids`. تُختار الفهارس من `[-100, 0, ..., config.vocab_size]`. جميع التسميات المُعيّنة إلى `-100` تُتجاهل (مُقنّعة)، وتُحسب الخسارة فقط للتسميات في `[0, ..., config.vocab_size]`

output_hidden_states (`bool`, *اختياري*) : ما إذا كان سيتم إرجاع الحالات المخفية لجميع الطبقات. راجع `hidden_states` ضمن الموترات المُرجعة لمزيد من التفاصيل.

return_dict (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) بدلاً من tuple عادي.

use_cache (`bool`، *اختياري*) : إذا تم ضبطه على `True`، يُعاد `cache_params` ويمكن استخدامه لتوليد logits التالية بسرعة.

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

logits_to_keep (`Union[int, torch.Tensor]`، *اختياري*، القيمة الافتراضية `0`) : إذا كان `int`، يتم حساب القيم اللوجستية (logits) لآخر `logits_to_keep` رموز. إذا كانت `0`، يتم حساب القيم اللوجستية لجميع `input_ids` (حالة خاصة). لا تكون قيم اللوجستيات للرمز الأخير فقط ضرورية للتوليد، ويمكن أن يوفر حسابها لذلك الرمز وحده ذاكرة، وهو ما يصبح ذا أهمية كبيرة للترتيبات الطويلة أو لحجم المفردات الكبير. إذا كان `torch.Tensor`، يجب أن يكون بعدًا واحدًا (1D) ويتوافق مع الفهارس التي يجب الاحتفاظ بها في بُعد طول الترتيب. وهذا مفيد عند استخدام تنسيق المصفوفات المعبأة (packed tensor format) (بعد واحد لكل من الدفعة وطول الترتيب).

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

A `Mamba2CausalLMOutput` or a tuple of `torch.Tensor` (if `return_dict=False` is passed or when `config.return_dict=False`) comprising various elements depending on the configuration ([Mamba2Config](/docs/transformers/main/ar/model_doc/mamba2#transformers.Mamba2Config)) and inputs.

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

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

- **loss** (`torch.Tensor` من الشكل `(1,)`، *اختياري*، يُعاد عند توفير `labels`) -- خسارة نمذجة اللغة (لتوقع الرمز التالي).
- **logits** (`torch.Tensor` من الشكل `(batch_size, sequence_length, config.vocab_size)`) -- درجات التنبؤ لرأس نمذجة اللغة (درجات لكل رمز في المفردات قبل SoftMax).
- **cache_params** (`~cache_utils.Cache`، *اختياري*) -- حالة النموذج عند آخر خطوة زمنية. يمكن استخدامه في طريقة الأمامية مع `input_ids` التالية لتجنب تقديم `input_ids` القديمة.

  يتضمن مصفوفات حالة نموذج فضاء الحالة بعد المسح الانتقائي، وحالات التمرير
- **hidden_states** (`tuple[torch.Tensor]`، *اختياري*، يُعاد عند تمرير `output_hidden_states=True` أو عند تعيين `config.output_hidden_states=True`) -- مجموعة (Tuple) من `torch.Tensor` (واحدة لكل من مخرجات الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لكل من مخرجات كل طبقة) بأبعاد `(batch_size, sequence_length, hidden_size)`.

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

مثال:

```python
```

