Transformers documentation
خريطة الدمج (ميزة تجريبية)
خريطة الدمج (ميزة تجريبية)
توفر خريطة الدمج طريقة اختيارية لاستبدال الوحدات الفرعية للنموذج عند التحميل مع الحفاظ على تنسيق نقطة التفتيش الأصلية.
يُبنى على:
- التعديل المباشر (Monkey patching) لاستبدال فئات الوحدات قبل إنشاء النموذج.
- تحميل الأوزان الديناميكي لربط الأوزان بين تخطيطات وقت التشغيل الأصلية والمدمجة.
تُعدّ خرائط الدمج ميزة تحميل تجريبية. فهي تُغيّر بنية وحدة وقت التشغيل وقد تؤثر على سلوك النموذج. استخدمها فقط عندما ترغب صراحةً في تخطيط وقت تشغيل مدمج.
البدء السريع
يتم تفعيل الدمج من خلال 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() استخدامه تلقائيًا.
كيف يعمل
تحدث تسجيل الدمج قبل إنشاء النموذج:
- يستخدم from_pretrained() الحجة الصريحة
fusion_configأو يعتمد علىconfig.fusion_config. - يتحقق سجل الدمج من أسماء الدمج المطلوبة.
- يُهيّئ كل اندماج مفعّل فئة النموذج المستهدف مبدئيًا، ويصفّي الوحدات المرشحة اختياريًا حسب الاسم، ويستخدم
is_fusable(...)لاكتشاف فئات الوحدات المتوافقة. - تُسجَّل فئات الاستبدال المدمجة من خلال register_patch_mapping().
- تُولَّد قواعد
~WeightTransformالمطابقة من ملف الإعدادات حتى يتمكن تحميل نقطة الحفظ من تعيين الأوزان إلى تخطيط وقت التشغيل المدمج. - بشكل افتراضي، يستخدم save_pretrained() مسار التحويل العكسي لاستعادة تخطيط نقطة التفتيش الأصلية. مرّر
save_original_format=Falseللإبقاء على تخطيط وقت التشغيل المحوّل بدلاً من ذلك.
يتيح ذلك لدمج أن يستخدم بنية وحدة وقت تشغيل مختلفة، مع استمراره في التحميل من تنسيق نقطة الفحص الأصلية، وحفظ البيانات فيه مرة أخرى افتراضيًا.
ملاحظة: مع آلية التعديل الديناميكي (monkey-patching) الحالية، فإن تسجيل الدمج يتم على مستوى الفئة: تُطابق فئة وحدة واحدة متوافقة مع فئة بديلة مدمجة واحدة.
عائلات الاندماج الحالية
حاليًا، يدعم fusion_config عائلة اندماج واحدة:
patch_embeddingsتفعيله عبر:fusion_config = {"patch_embeddings": True}التأثير: يستبدل إسقاطات تضمين البقع المتوافقة
nn.Conv3dبإسقاطاتnn.Linearمسطحة مكافئة وقت التشغيل.
توسيع خرائط الدمج
لإضافة عائلة اندماج جديدة:
- أضف حكم
is_fusable. يحدد هذا الحكم ما إذا كان الوحدة المكتشفة متوافقة مع الدمج. - أضِف اختياريًا
target_modules_patterns. يجعل هذا خطوة الاكتشاف أكثر وضوحًا من خلال تصفية أسماء الوحدات المرشحة مسبقًا قبلis_fusable(...). - أضِف مصنع
make_fused_class. يعيد هذا الفئة البديلة وقت التشغيل لفئة وحدة متوافقة. - أضِف مصنع
make_transformsإذا احتاج التخطيط المدمج إلى تحويل نقاط التفتيش. يعيد هذا القواعد~WeightTransformالتي تُخضع الأوزان للتحويل بين التخطيط الأصلي والتخطيط المدمج لإعداد معين. - سجّل
ModuleFusionSpecالجديد فيfusion_mapping.py.
بمجرد التسجيل، يصبح الاندماج الجديد متاحًا عبر fusion_config.
واجهة برمجة التطبيقات الداخلية
وصفة أساسية لعائلة الاندماج.
تحدد مواصفة الدمج أي الوحدات مؤهلة للدمج، وكيفية بناء فئة الاستبدال وقت التشغيل، وأي تحويلات الأوزان المطلوبة لربط نقاط الحفظ بين التخطيط الأصلي والتخطيط المدمج.
إرجاع رسالة التسجيل التي تُصدر عند عدم العثور على وحدات متوافقة.
تُرجع ما إذا كان module متوافقًا مع عائلة الدمج هذه.
أنشئ فئة الاستبدال وقت التشغيل لفئة وحدة متوافقة.
أنشئ تحويلات الأوزان اللازمة لتحميل وحفظ تخطيط وقت التشغيل المدمج.
دمج تضمينات البقع المتوافقة مع Conv3d في إسقاطات خطية مسطحة.
transformers.fusion_mapping._register_module_fusion
< source >( config: PretrainedConfigfusion_name: strspec: ModuleFusionSpec )
سجّل عائلة اندماج واحدة لـcls.
تحديث هذه الدالة السجلَّين العالميين المستخدمين في التحميل المدمج:
- سجل التعديل الديناميكي (monkey-patching)، بحيث تُستبدل فئات الوحدات المتوافقة قبل التهيئة
- خريطة تحويل نقطة الحفظ، بحيث لا تزال وحدات وقت التشغيل المدمجة تُحمَّل من تخطيط نقطة الحفظ الأصلية
ملاحظات:
- تفشل تحويلات نقاط التفتيش المتعارضة بسرعة
transformers.fusion_mapping.register_fusion_patches
< source >( configfusion_config: collections.abc.Mapping[str, bool | collections.abc.Mapping[str, typing.Any]] | None = None )
سجّل اندماجات وقت التشغيل المطلوبة لـcls.
تقوم هذه الدالة بما يلي:
- يتحقق من
fusion_configمقابل_FUSION_REGISTRY - يحدد عائلات الدمج المفعّلة بترتيب المستخدم
- يسجّل ترقيعات القرد (monkey patches) وتحويلات نقاط التفتيش (checkpoint transforms) قبل إنشاء النموذج