Transformers documentation

خريطة الدمج (ميزة تجريبية)

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

خريطة الدمج (ميزة تجريبية)

توفر خريطة الدمج طريقة اختيارية لاستبدال الوحدات الفرعية للنموذج عند التحميل مع الحفاظ على تنسيق نقطة التفتيش الأصلية.

يُبنى على:

تُعدّ خرائط الدمج ميزة تحميل تجريبية. فهي تُغيّر بنية وحدة وقت التشغيل وقد تؤثر على سلوك النموذج. استخدمها فقط عندما ترغب صراحةً في تخطيط وقت تشغيل مدمج.

البدء السريع

يتم تفعيل الدمج من خلال from_pretrained() باستخدام fusion_config:

from transformers import AutoModelForImageTextToText


model = AutoModelForImageTextToText.from_pretrained(
    "Qwen/Qwen2-VL-2B-Instruct",
    fusion_config={"patch_embeddings": True},
)

بشكل افتراضي، لا يُطبَّق أي اندماج. إذا كان fusion_config مخزَّنًا في إعدادات النموذج، فسيُعيد from_pretrained() استخدامه تلقائيًا.

كيف يعمل

تحدث تسجيل الدمج قبل إنشاء النموذج:

  1. يستخدم from_pretrained() الحجة الصريحة fusion_config أو يعتمد على config.fusion_config.
  2. يتحقق سجل الدمج من أسماء الدمج المطلوبة.
  3. يُهيّئ كل اندماج مفعّل فئة النموذج المستهدف مبدئيًا، ويصفّي الوحدات المرشحة اختياريًا حسب الاسم، ويستخدم is_fusable(...) لاكتشاف فئات الوحدات المتوافقة.
  4. تُسجَّل فئات الاستبدال المدمجة من خلال register_patch_mapping().
  5. تُولَّد قواعد ~WeightTransform المطابقة من ملف الإعدادات حتى يتمكن تحميل نقطة الحفظ من تعيين الأوزان إلى تخطيط وقت التشغيل المدمج.
  6. بشكل افتراضي، يستخدم save_pretrained() مسار التحويل العكسي لاستعادة تخطيط نقطة التفتيش الأصلية. مرّر save_original_format=False للإبقاء على تخطيط وقت التشغيل المحوّل بدلاً من ذلك.

يتيح ذلك لدمج أن يستخدم بنية وحدة وقت تشغيل مختلفة، مع استمراره في التحميل من تنسيق نقطة الفحص الأصلية، وحفظ البيانات فيه مرة أخرى افتراضيًا.

ملاحظة: مع آلية التعديل الديناميكي (monkey-patching) الحالية، فإن تسجيل الدمج يتم على مستوى الفئة: تُطابق فئة وحدة واحدة متوافقة مع فئة بديلة مدمجة واحدة.

عائلات الاندماج الحالية

حاليًا، يدعم fusion_config عائلة اندماج واحدة:

  • patch_embeddings تفعيله عبر:

    fusion_config = {"patch_embeddings": True}

    التأثير: يستبدل إسقاطات تضمين البقع المتوافقة nn.Conv3d بإسقاطات nn.Linear مسطحة مكافئة وقت التشغيل.

توسيع خرائط الدمج

لإضافة عائلة اندماج جديدة:

  1. أضف حكم is_fusable. يحدد هذا الحكم ما إذا كان الوحدة المكتشفة متوافقة مع الدمج.
  2. أضِف اختياريًا target_modules_patterns. يجعل هذا خطوة الاكتشاف أكثر وضوحًا من خلال تصفية أسماء الوحدات المرشحة مسبقًا قبل is_fusable(...).
  3. أضِف مصنع make_fused_class. يعيد هذا الفئة البديلة وقت التشغيل لفئة وحدة متوافقة.
  4. أضِف مصنع make_transforms إذا احتاج التخطيط المدمج إلى تحويل نقاط التفتيش. يعيد هذا القواعد ~WeightTransform التي تُخضع الأوزان للتحويل بين التخطيط الأصلي والتخطيط المدمج لإعداد معين.
  5. سجّل ModuleFusionSpec الجديد في fusion_mapping.py.

بمجرد التسجيل، يصبح الاندماج الجديد متاحًا عبر fusion_config.

واجهة برمجة التطبيقات الداخلية

فئة transformers.fusion_mapping.ModuleFusionSpec

< >

( )

وصفة أساسية لعائلة الاندماج.

تحدد مواصفة الدمج أي الوحدات مؤهلة للدمج، وكيفية بناء فئة الاستبدال وقت التشغيل، وأي تحويلات الأوزان المطلوبة لربط نقاط الحفظ بين التخطيط الأصلي والتخطيط المدمج.

get_empty_log

< >

( model_name: str )

إرجاع رسالة التسجيل التي تُصدر عند عدم العثور على وحدات متوافقة.

is_fusable

< >

( module: Module )

تُرجع ما إذا كان module متوافقًا مع عائلة الدمج هذه.

make_fused_class

< >

( original_cls: type )

أنشئ فئة الاستبدال وقت التشغيل لفئة وحدة متوافقة.

make_transforms

< >

( config: PretrainedConfig )

أنشئ تحويلات الأوزان اللازمة لتحميل وحفظ تخطيط وقت التشغيل المدمج.

فئة transformers.fusion_mapping.PatchEmbeddingsFusionSpec

< >

( )

دمج تضمينات البقع المتوافقة مع Conv3d في إسقاطات خطية مسطحة.

transformers.fusion_mapping._register_module_fusion

< >

( config: PretrainedConfigfusion_name: strspec: ModuleFusionSpec )

سجّل عائلة اندماج واحدة لـcls.

تحديث هذه الدالة السجلَّين العالميين المستخدمين في التحميل المدمج:

  • سجل التعديل الديناميكي (monkey-patching)، بحيث تُستبدل فئات الوحدات المتوافقة قبل التهيئة
  • خريطة تحويل نقطة الحفظ، بحيث لا تزال وحدات وقت التشغيل المدمجة تُحمَّل من تخطيط نقطة الحفظ الأصلية

ملاحظات:

  • تفشل تحويلات نقاط التفتيش المتعارضة بسرعة

transformers.fusion_mapping.register_fusion_patches

< >

( configfusion_config: collections.abc.Mapping[str, bool | collections.abc.Mapping[str, typing.Any]] | None = None )

سجّل اندماجات وقت التشغيل المطلوبة لـcls.

تقوم هذه الدالة بما يلي:

  • يتحقق من fusion_config مقابل _FUSION_REGISTRY
  • يحدد عائلات الدمج المفعّلة بترتيب المستخدم
  • يسجّل ترقيعات القرد (monkey patches) وتحويلات نقاط التفتيش (checkpoint transforms) قبل إنشاء النموذج
Update on GitHub