# Mamba

[Mamba](https://huggingface.co/papers/2312.00752) هو نموذج حالة مبنية على بنية انتقائية (SSMs) مصمم للتعامل مع عدم كفاءة Transformers الحسابية عند معالجة التسلسلات الطويلة. إنه بنية خالية تمامًا من آلية الانتباه، ويتكون من مزيج من كتل H3 وكتل gated MLP (كتلة Mamba). يتيح "الاستدعاء القائم على المحتوى" في Mamba التركيز على أجزاء محددة من المدخلات اعتمادًا على الرمز الحالي. كما يستخدم Mamba خوارزمية موازية جديدة تراعي خصائص العتاد لتعويض غياب العمليات التلافيفية. ونتيجةً لذلك، يتمتع Mamba باستدلال سريع ويمكنه التوسع إلى تسلسلات طويلة جدًا.

يمكنك العثور على جميع نقاط التفتيش الأصلية لنموذج Mamba تحت منظمة [State Space Models](https://huggingface.co/state-spaces).

> [!TIP]
> تمت مساهمة هذا النموذج من قِبَل [Molbap](https://huggingface.co/Molbap) و[AntonV](https://huggingface.co/AntonV). انقر على نماذج 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="state-spaces/mamba-130m-hf",
    device=0
)
pipeline("Plants create energy through a process known as")
```

```python
from transformers import AutoModelForCausalLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("state-spaces/mamba-130m-hf")
model = AutoModelForCausalLM.from_pretrained("state-spaces/mamba-130m-hf", 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 torchao.quantization import Int4WeightOnlyConfig

from transformers import AutoModelForCausalLM, AutoTokenizer, TorchAoConfig

quantization_config = Int4WeightOnlyConfig(group_size=128)
quantization_config = TorchAoConfig(quant_type=quant_config)
tokenizer = AutoTokenizer.from_pretrained("state-spaces/mamba-2.8b-hf")
model = AutoModelForCausalLM.from_pretrained("state-spaces/mamba-2.8b-hf", 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))
```

## ملاحظات

- تستخدم النسخة الحالية من التنفيذ نواة CUDA الأصلية. أما النسخة المكافئة من FlashAttention فهي مستضافة في مستودعي [mamba-ssm](https://github.com/state-spaces/mamba) و[causal_conv1d](https://github.com/Dao-AILab/causal-conv1d). تأكد من تثبيتهما إذا كان جهازك يدعم ذلك!
- تستخدم مكدسات Mamba طبقات `mixer` مكافئة لطبقات `Attention`. يمكنك العثور على المنطق الرئيسي لـ Mamba في فئة `MambaMixer`.
- يُبيّن المثال أدناه كيفية ضبط نموذج Mamba باستخدام [PEFT](https://huggingface.co/docs/peft).

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

  model_id = "state-spaces/mamba-130m-hf"
  dataset = load_dataset("Abirate/english_quotes", split="train")
  training_args = SFTConfig(dataset_text_field="quote")
  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()
   ```

- استخدم التعبئة اليسرى (left padding) للتوليد المجمّع. راجع [جانب التعبئة](../llm_tutorial#padding-side).

## MambaConfig[[transformers.MambaConfig]]

#### transformers.MambaConfig[[transformers.MambaConfig]]

```python
transformers.MambaConfig(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 = 50280, hidden_size: int = 768, state_size: int = 16, num_hidden_layers: int = 32, layer_norm_epsilon: float = 1e-05, pad_token_id: int | None = 0, bos_token_id: int | None = 0, eos_token_id: int | list[int] | None = 0, expand: int = 2, conv_kernel: int = 4, 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_scale: float = 1.0, time_step_min: float = 0.001, time_step_max: float = 0.1, time_step_init_scheme: str = 'random', time_step_floor: float = 0.0001, rescale_prenorm_residual: bool = False, use_cache: bool = True, use_mambapy: bool = False, use_associative_scan: bool = True, tie_word_embeddings: bool = True)
```

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

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

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

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

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

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

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

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

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

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

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

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

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_scale (`float`، *اختياري*، القيمة الافتراضية `1.0`) : المقياس المطبَّق على فرق خطوة الزمن قبل التقطيع.

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

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

time_step_init_scheme (`str`، *اختياري*، الافتراضي `random`) : مخطط التهيئة لخطوة الزمن الدلتا. يمكن أن يكون `"random"` أو `"uniform"`.

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

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

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

use_mambapy (`bool`، *اختياري*، القيمة الافتراضية `False`) : يحدد استراتيجية الاحتياط أثناء التدريب إذا لم تكن النسخة الرسمية من Mamba المعتمدة على CUDA متاحة. إذا كانت القيمة `True`، تُستخدم نسخة mamba.py. إذا كانت `False`، تُستخدم النسخة البسيطة والأبطأ. يُنصح بالتبديل إلى النسخة البسيطة إذا كان الذاكرة محدودة.

use_associative_scan (`bool`, *اختياري*, القيمة الافتراضية `True`) : ما إذا كان سيتم استخدام `torch._higher_order_ops.associative_scan` الخاص بـ PyTorch للمسح المتوازي بدلاً من التنفيذ التسلسلي البسيط. يكون المسح الترابطي نشطًا فقط أثناء تتبع `torch.compile` ويتطلب torch >= 2.9.0. تم اختبار المسارين لإنتاج نتائج متطابقة رقميًا (انظر `test_associative_scan_matches_sequential`). اضبط القيمة على `False` للعودة إلى الحلقة التسلسلية.

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

هذه فئة الإعدادات المخزنة لإعدادات نموذج MambaModel. تُستخدم لاستحداث نموذج Mamba وفقًا للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى إعدادات مشابهة لتلك الخاصة بـ [state-spaces/mamba-2.8b](https://huggingface.co/state-spaces/mamba-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 MambaConfig, MambaModel

>>> # Initializing a Mamba configuration
>>> configuration = MambaConfig()

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

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

## MambaModel[[transformers.MambaModel]]

#### transformers.MambaModel[[transformers.MambaModel]]

```python
transformers.MambaModel(config: MambaConfig)
```

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

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

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

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

يرث هذا النموذج من [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.MambaModel.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.LongTensor] = None, **kwargs)
```

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

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

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.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : قناع لتجنّب تنفيذ الانتباه على فهارس رموز الحشو. قيم القناع المختارة من `[0, 1]`: - 1 للرموز **غير المقنّعة**، - 0 للرموز **المقنّعة**. [ما هي أقنعة الانتباه؟](../glossary#attention-mask)

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

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

تُعيد طريقة [MambaModel](/docs/transformers/main/ar/model_doc/mamba#transformers.MambaModel) الخاصة بالتقديم (forward) تعريف الطريقة الخاصة `__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)`.

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

## MambaLMHeadModel[[transformers.MambaForCausalLM]]

#### transformers.MambaForCausalLM[[transformers.MambaForCausalLM]]

```python
transformers.MambaForCausalLM(config: MambaConfig)
```

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

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

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

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

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

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, attention_mask: 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, logits_to_keep: typing.Union[int, torch.Tensor] = 0, **kwargs)
```

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

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

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.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : قناع لتجنّب تنفيذ الانتباه على فهارس رموز الحشو. قيم القناع المختارة من `[0, 1]`: - 1 للرموز **غير المقنّعة**، - 0 للرموز **المقنّعة**. [ما هي أقنعة الانتباه؟](../glossary#attention-mask)

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 التالية بسرعة.

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

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

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

تتجاوز طريقة [MambaForCausalLM](/docs/transformers/main/ar/model_doc/mamba#transformers.MambaForCausalLM) الخاصة بالتقديم (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
```

