Transformers documentation
xLSTM
نُشر هذا النموذج في أوراق HF في 2024-05-07، وأُضيف إلى Hugging Face Transformers في 2025-07-25.
xLSTM
نظرة عامة
قُدِّم نموذج xLSTM في xLSTM: Extended Long Short-Term Memory بواسطة ماكسيميليان بيك، كوربينيان بوبل، ماركوس سبانرينغ، أندرياس أوغر، أولكساندرا برودنيكوفا، مايكل كوب، غونتر كلامباور، يوهانيس برانستتر، وسيب هوشرايتير. يحدّث xLSTM بنية LSTM الأصلية لتنافس نماذج Transformer من خلال إدخال البوابات الأسّية، وتوسيع الذاكرة المصفوفية، والتدريب والاستيعاب القابلين للتوازي.
تم تدريب متغير نموذج 7B بواسطة فريق xLSTM: ماكسيميليان بيك، وكوربينيان بوبل، وفيليب ليب، وريتشارد كورل، وباتريك بليس، وسيباستيان بويك، وسيب هوشرايتير، في NXAI.
المستخلص من الورقة البحثية هو كالتالي:
في التسعينيات، تم تقديم دوّار الخطأ الثابت والبوابات كأفكار مركزية في ذاكرة المدى الطويل القصير (LSTM). ومنذ ذلك الحين، صمدت نماذج LSTM أمام اختبار الزمن وساهمت في العديد من قصص النجاح في التعلم العميق، إذ شكّلت على وجه الخصوص أول نماذج اللغة الكبيرة (LLMs). ومع ذلك، أدّى ظهور تقنية Transformer التي تعتمد في جوهرها على الانتباه الذاتي القابل للتوازي إلى فجر حقبة جديدة، متفوقةً على نماذج LSTM عند توسيع نطاقها. نطرح الآن سؤالاً بسيطاً: إلى أي مدى يمكننا الوصول في نمذجة اللغة عند توسيع نطاق نماذج LSTM إلى مليارات المعاملات، مع الاستفادة من أحدث التقنيات من نماذج LLM الحديثة، ولكن مع التخفيف من القيود المعروفة لنماذج LSTM؟ أولاً، نعرّف البوابات الأسية مع تقنيات تطبيع واستقرار مناسبة. ثانياً، نعدّل بنية الذاكرة في LSTM، فنحصل على: (i) sLSTM بذاكرة قياسية وتحديث قياسي وخلط ذاكرة جديد، (ii) mLSTM القابل للتوازي بالكامل بذاكرة مصفوفية وقاعدة تحديث تباين. يؤدي دمج هذه الامتدادات لـ LSTM في هياكل كتل متبقية إلى كتل xLSTM التي تُرصّ بعد ذلك بشكل متبقٍ في هياكل xLSTM. تعزّز البوابات الأسية وبنى الذاكرة المعدّلة قدرات xLSTM لتؤدّي أداءً مواتياً عند مقارنتها بأحدث نماذج Transformer ونماذج فضاء الحالة، من حيث الأداء والتوسّع.
تمت مساهمة هذا النموذج من قِبل NX-AI. يمكن العثور على الكود الأصلي هنا.
ملاحظات
- استخدم التعبئة اليسرى (left padding) للتوليد المجمّع. راجع جانب التعبئة.
xLSTMConfig
فئة transformers.xLSTMConfig
< 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 = 50304hidden_size: int = 4096embedding_dim: int | None = Nonenum_hidden_layers: int = 32num_blocks: int | None = Nonenum_heads: int = 8use_bias: bool = Falsenorm_reduction_force_float32: bool = Truetie_word_embeddings: bool = Falseadd_out_norm: bool = Truenorm_eps: float = 1e-06qk_dim_factor: float = 0.5v_dim_factor: float = 1.0chunkwise_kernel: typing.Literal['chunkwise--native_autograd', 'parallel--native_autograd'] = 'chunkwise--native_autograd'sequence_kernel: typing.Literal['native_sequence__native'] = 'native_sequence__native'step_kernel: typing.Literal['native'] = 'native'mode: typing.Literal['train', 'train_with_padding', 'inference'] = 'inference'chunk_size: int = 64return_last_states: bool = Trueautocast_kernel_dtype: typing.Literal['float32', 'bfloat16', 'float16'] = 'bfloat16'eps: float = 1e-06inference_state_dtype: typing.Literal['float32', 'bfloat16', 'float16'] = 'float32'ffn_proj_factor: float = 2.667ffn_round_up_to_multiple_of: int = 64gate_soft_cap: float = 15.0output_logit_soft_cap: float = 30.0weight_mode: typing.Literal['single', 'fused'] = 'single'use_cache: bool = Truepad_token_id: int | None = 1bos_token_id: int | None = 0eos_token_id: int | list[int] | None = 2max_inference_chunksize: int = 16384 )
المعاملات
- vocab_size (
int، اختياري، القيمة الافتراضية50304) — حجم مفردات النموذج. يحدد عدد الرموز المختلفة التي يمكن تمثيلها بواسطةinput_ids. - hidden_size (
int، اختياري، القيمة الافتراضية4096) — أبعاد التمثيلات المخفية. - embedding_dim (
int، اختياري) — أبعاد التضمينات والحالات المخفية. - num_hidden_layers (
int، اختياري، القيمة الافتراضية32) — عدد الطبقات المخفية في مُفكِّك Transformer. - num_blocks (
int, اختياري، اختياري، القيمة الافتراضية 32) — عدد الكتل في نموذج xLSTM، استخدم num_hidden_layers إذا كانت القيمة None. - num_heads (
int, اختياري، اختياري، القيمة الافتراضية 8) — عدد الرؤوس لطبقة/خلية xLSTM. - use_bias (
bool, اختياري، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام الانحيازات في نموذج xLSTM. - norm_reduction_force_float32 (
bool, اختياري، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إجبار عملية اختزال norm على أن تتم بدقة fp32. - tie_word_embeddings (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم ربط ترميزات الأوزان وفقاً لخريطةtied_weights_keysالخاصة بالنموذج. - add_out_norm (
bool, اختياري، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إضافة تطبيع للمخرج بعد الكتل وقبل LMHead. - norm_eps (
float, اختياري، القيمة الافتراضية1e-06) — قيمة الإيبسلون المستخدمة في طبقات تطبيع الطبقة. - qk_dim_factor (
float, اختياري، اختياري، القيمة الافتراضية 0.5) — معامل المقياس لبُعد الاستعلام والمفتاح. - v_dim_factor (
float, اختياري، اختياري، القيمة الافتراضية 1.0) — معامل المقياس لبُعد القيمة. - chunkwise_kernel (
ChunkwiseKernelType، اختياري، اختياري، القيمة الافتراضية"chunkwise--native_autograd") — نوع النواة (Kernel) لوضع المعالجة المقسمة (chunkwise). - sequence_kernel (
SequenceKernelType، اختياري، اختياري، القيمة الافتراضية"native_sequence__native") — نوع النواة (Kernel) لوضع معالجة التسلسل. - step_kernel (
StepKernelType، اختياري، اختياري، القيمة الافتراضية"native") — نوع النواة (Kernel) لوضع معالجة الخطوات. - mode (
BackendModeType، اختياري، اختياري، القيمة الافتراضية"inference") — وضع التشغيل (يُطلب وضع الاستدلال للتوليد). - chunk_size (
int، اختياري، اختياري، القيمة الافتراضية 64) — حجم المقطع الداخلي. - return_last_states (
bool, اختياري، اختياري، القيمة الافتراضيةTrue) — هل يُعاد إرجاع الحالات/الذاكرة المؤقتة الأخيرة داخليًا. يجب أن تكون القيمة True لتوليد النص. - autocast_kernel_dtype (
DtypeType، اختياري، اختياري، القيمة الافتراضية"bfloat16") — نوع البيانات (dtype) الخاص بالنواة (kernel) للحالات. - eps (
float، اختياري، القيمة الافتراضية1e-06) — قيمة الإيبسلون المستخدمة في طبقات تطبيع الطبقة. - inference_state_dtype (
DtypeType، اختياري، اختياري، القيمة الافتراضية"float32") — نوع البيانات (dtype) للنواة (Kernel) للحالات أثناء الاستدلال. - ffn_proj_factor (
float, اختياري، اختياري، القيمة الافتراضية 2.667) — معامل حجم شبكة التغذية العكسية البوابة (gated Feed Forward network) الخاصة بالمشروع بعد التوسيع (post-up projection). - ffn_round_up_to_multiple_of (
int, اختياري، اختياري، القيمة الافتراضية 64) — عامل حجم القيمة المستديرة لشبكة التغذية الأمامية البوابة بعد الإسقاط التصاعدي. - gate_soft_cap (
float, اختياري، اختياري، القيمة الافتراضية 15.0) — مقياس الحد الأقصى الناعم للبوابة. - output_logit_soft_cap (
float, اختياري، اختياري، القيمة الافتراضية 30.0) — مقياس الحد الأقصى الناعم لقيم logit في المخرجات. - weight_mode (
Literal، اختياري، القيمة الافتراضية"single") — ما إذا كانت الطبقات الخطية المتوازية مفصولة أو مدمجة (single). - use_cache (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب على النموذج إرجاع قيم المفاتيح/القيم الأخيرة للانتباه (لا تستخدمها جميع النماذج). لا ينطبق إلا إذا كانconfig.is_decoder=Trueأو إذا كان النموذج نموذجًا توليديًا يعتمد على المُفكِّك فقط. - pad_token_id (
int، اختياري، القيمة الافتراضية1) — معرّف الرمز المستخدم للتعبئة في المفردات. - bos_token_id (
int, اختياري، القيمة الافتراضية0) — معرّف الرمز المستخدم لبدء البث في المفردات. - eos_token_id (
Union[int, list[int]]، اختياري، القيمة الافتراضية2) — معرّف الرمز المستخدم لنهاية التدفق في المفردات. - max_inference_chunksize (
int, اختياري، اختياري، القيمة الافتراضية 16384) — تقييد حجم المقطع للاستدلال (Inference) لتوفير الذاكرة.
هذه فئة الإعدادات المخزنة لإعدادات نموذج xLSTMModel. تُستخدم لاستحداث نموذج Xlstm وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ NX-AI/xLSTM-7b
ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.
مثال:
>>> from transformers import xLSTMConfig, xLSTMModel
>>> # Initializing a xLSTM configuration
>>> configuration = xLSTMConfig()
>>> # Initializing a model (with random weights) from the configuration
>>> model = xLSTMModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configxLSTMModel
فئة transformers.xLSTMModel
< source >( config: xLSTMConfig )
المعاملات
- config (xLSTMConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Xlstm العاري الذي يُخرج حالات مخفية خام دون أي رأس محدد في الأعلى.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.LongTensor] = Nonecache_params: transformers.models.xlstm.modeling_xlstm.xLSTMCache | None = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → xLSTMOutput or tuple(torch.Tensor)
المعاملات
- input_ids (
torch.LongTensorبشكل(batch_size, sequence_length), اختياري) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا.يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.
- inputs_embeds (
torch.LongTensorof shape(batch_size, sequence_length, hidden_size), اختياري) — اختياريًا، بدلاً من تمريرinput_ids، يمكنك اختيار تمرير تمثيل مضمّن مباشرة. وهذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارسinput_idsإلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج. - cache_params (
xLSTMCache، اختياري) — كائن xLSTMCache الذي يحمل حالات RNN. - use_cache (
bool، اختياري) — إذا تم تعيينه إلىTrue، تُعاد حالات المفاتيح والقيمpast_key_valuesويمكن استخدامها لتسريع فك الترميز (انظرpast_key_values).
يعيد
xLSTMOutput أو tuple(torch.Tensor)
xLSTMOutput أو مجموعة مرتبة من
torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة اعتماداً على الإعدادات (xLSTMConfig) والمدخلات.
تُعيد طريقة xLSTMModel الأمامية تعريف الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.
last_hidden_state (
torch.Tensorمن الشكل(batch_size, sequence_length, hidden_size)، اختياري) — تسلسل حالات مخفية عند مخرجات الطبقة الأخيرة من النموذج.cache_params (
~models.xlstm.modeling_xlstm.xLSTMCache، اختياري) — حالة النموذج عند آخر خطوة زمنية. يمكن استخدامه في طريقة الأمامية معinput_idsالتالية لتجنب تقديمinput_idsالقديمة.hidden_states (
tuple[torch.Tensor]، اختياري، يُعاد عند تمريرoutput_hidden_states=Trueأو عند تعيينconfig.output_hidden_states=True) — مجموعة منtorch.Tensor(واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) من الشكل(batch_size, sequence_length, hidden_size).حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.
xLSTMLMHeadModel
فئة transformers.xLSTMForCausalLM
< source >( config: xLSTMConfig )
المعاملات
- config (xLSTMConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج Xlstm لنمذجة اللغة السببية.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonecache_params: transformers.models.xlstm.modeling_xlstm.xLSTMCache | None = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → xLSTMCausalLMOutput or tuple(torch.Tensor)
المعاملات
- input_ids (
torch.LongTensorبشكل(batch_size, sequence_length), اختياري) — مؤشرات رموز تسلسل الإدخال في قاموس الكلمات. سيتم تجاهل الحشو افتراضيًا.يمكن الحصول على الفهارس باستخدام AutoTokenizer. راجع PreTrainedTokenizer.encode() و PreTrainedTokenizer.call() للتفاصيل.
- inputs_embeds (
torch.Tensorمن الشكل(batch_size, sequence_length, hidden_size)، اختياري) — اختياريًا، بدلاً من تمريرinput_ids، يمكنك اختيار تمرير تمثيل مضمّن مباشرة. وهذا مفيد إذا كنت ترغب في الحصول على مزيد من التحكم في كيفية تحويل فهارسinput_idsإلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج. - cache_params (
xLSTMCache، اختياري) — كائن xLSTMCache الذي يحمل حالات RNN. - 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).
يعيد
xLSTMCausalLMOutput أو tuple(torch.Tensor)
xLSTMCausalLMOutput أو مجموعة مرتبة من
torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة
تعتمد على الإعداد (xLSTMConfig) والمدخلات.
تتجاوز طريقة xLSTMForCausalLM الخاصة بالتقديم (forward) الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.
loss (
torch.Tensorof shape(1,), اختياري, يُعاد عند توفيرlabels) — خسارة نمذجة اللغة (لتوقع الرمز التالي).logits (
torch.Tensorمن الشكل(batch_size, sequence_length, config.vocab_size)) — درجات التنبؤ لرأس نمذجة اللغة (درجات لكل رمز في المفردات قبل SoftMax).cache_params (
xLSTMCache، اختياري، يحمل حالات RNN) — حالة النموذج عند خطوة الزمن الأخيرة. يمكن استخدامه في طريقة الأمامية معinput_idsالتالية لتجنب تقديمinput_idsالقديمة.hidden_states (
tuple[torch.Tensor]، اختياري، يُعاد عند تمريرoutput_hidden_states=Trueأو عند تعيينconfig.output_hidden_states=True) — مجموعة منtorch.Tensor(واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) من الشكل(batch_size, sequence_length, hidden_size).حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.