PEFT documentation
PEANuT: تكييف فعّال من حيث المعلمات باستخدام مُعدِّلات عصبية واعية بالأوزان
PEANuT: تكييف فعّال من حيث المعلمات باستخدام مُعدِّلات عصبية واعية بالأوزان
PEANuT هي تقنية لضبط دقيق فعّال من حيث المعاملات، تُدخل مُعدِّلات عصبية واعية بالأوزان لتوليد تحديثات المُكيِّف (adapter) من الأوزان المُسبقة التدريب المجمّدة ذاتها. بدلاً من تعلُّم تحديث خطي منخفض الرتبة بحت كما في LoRA، تُشترط PEANuT تحويل المُكيِّف على الوزن الأساسي، مما يجعل قاعدة التحديث أكثر تعبيراً مع الحفاظ على عدد المعاملات القابلة للتدريب صغيراً.
يستخدم PEANuT إسقاطًا للمدخلات A وإسقاطًا للمخرجات B، بالإضافة إلى أزواج اختيارية من مشفّرات/مفكّكات متبقية وسيطة مع دوال تنشيط غير خطية. وهذا يجعل من الممكن نمذجة أنماط تحديث أكثر تعقيدًا من المحوِّلات الخطية المستقلة عن الأوزان، مع البقاء في إطار PEFT.
تتميز PEANuT حاليًا بالتنازلات التالية:
المزايا:
- قدرة تعبيرية نظرية أعلى من التحديثات منخفضة الرتبة الخطية.
- أداء أفضل من LoRA على مجموعة متنوعة من المهام ضمن ميزانيات مماثلة.
- يعمل بشكل جيد في نطاقات منخفضة جدًا من عدد المعاملات، على سبيل المثال حوالي
0.2Mمن المعاملات القابلة للتدريب.
العيوب:
- استهلاك ذاكرة أعلى من LoRA، لأن
ΔWيُبنى صراحةً قبل تطبيقه. - أبطأ في التدريب والاستدلال من LoRA، كما أن زيادة عمق الطبقات الوسيطة تزيد من العبء الإضافي بشكل أكبر.
- قد تتطلب عدم الخطية ضبطًا أكثر دقة للمعاملات الفائقة، لا سيما معدل التعلم والإعدادات التحسينية ذات الصلة.
إذا لم تكن هذه المفاضلات مناسبة لحالة الاستخدام الخاصة بك، ففكر في استخدام طرق PEFT أخرى مثل LoRA.
ملخص الورقة البحثية هو:
غالبًا ما يؤدي ضبط النماذج الأساسية الكبيرة المُدرَّبة مسبقًا إلى أداء ممتاز في المهام اللاحقة، لكنه مكلف بشكل غير مقبول عند تحديث جميع المعاملات. تخفف أساليب الضبط الفعال للمعاملات (PEFT) مثل LoRA من هذه المشكلة من خلال إدخال وحدات تحديث خفيفة الوزن، لكنها تعتمد بشكل شائع على تقريب خطي غير مرتبط بالأوزان، مما يحدّ من قدرتها التعبيرية. في هذا العمل، نقترح PEANuT، وهو إطار PEFT جديد يُدخل مُعدِّلات عصبية واعية بالأوزان، وهي وحدات عصبية مدمجة تولّد تحديثات متكيفة مع المهمة مشروطة على أوزان النموذج المُدرَّب مسبقًا والمجمّدة. يوفر PEANuT طريقة مرنة وفعالة لالتقاط أنماط التحديث المعقدة دون الحاجة إلى ضبط النموذج بالكامل. نُظهر نظريًا أن PEANuT يحقق قدرة تعبيرية مكافئة أو أكبر مقارنةً بأساليب PEFT الخطية القائمة، مع عدد معاملات مماثل أو أقل. تُظهر تجارب موسّعة عبر أربعة معايير مرجعية تضم أكثر من عشرين مجموعة بيانات أن PEANuT يتفوق باستمرار على خطوط الأساس القوية في مهام معالجة اللغة الطبيعية ومهام الرؤية على حد سواء، مع الحفاظ على عبء حسابي منخفض.
نظرة عامة على الاختبارات
واجهة برمجة التطبيقات
PeanutConfig
فئة peft.PeanutConfig
< source >( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falser: int = 32depth: int = 0act_fn: str = 'relu'scaling: float = 1.0target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = Nonelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Noneinit_weights: bool = True )
المعاملات
- r (
int) — رتبة PEANuT. هذا هو البُعد الخفي الذي تستخدمه المُكيِّفات. وبالمثل مع رتبة LoRA، فإن زيادةrتزيد من سعة المُكيِّفات وعدد المعاملات القابلة للتدريب. - depth (
int) — عدد طبقات المُكيِّف المخفية لكل جانب من جانب المُشفِّر/المُفكِّك في PEANuT. إسقاط الإدخالAوإسقاط الإخراجBموجودان دائمًا بالإضافة إلى هذه الطبقات المخفية. لذلك، يجب أن يكونdepthعددًا صحيحًا غير سالب.depth=0:A,B.depth=1:A، مُشفِّر واحد، مُفكِّك واحد،B.depth=2:A، مشفران، فاصلان،B.depth=3:A، ثلاثة مشفّرات، ثلاثة مفكّكات،B، وما إلى ذلك.
- act_fn (
str) — دالة التنشيط غير الخطية المطبقة في شبكة PEANuT. يتوافق هذا معnon_linearفي تطبيق PyTorch الأصلي. القيمة الافتراضية هي"relu". يتم دعم أي مفتاح تنشيط متاح فيtransformers.activations.ACT2FNوقد يؤدي أداءً أفضل في مهام مختلفة. - scaling (
float) — معامل مضاعف قياسي يُطبَّق على مخرجات PEANuT قبل إضافتها إلى مخرجات الطبقة الأساسية المجمّدة. المساهمة النهائية للمكيّف هيscaling * (x @ delta_w). - target_modules (
Union[List[str], str]، اختياري) — أسماء الوحدات التي سيتم تطبيق PEANuT عليها. يمكن أن تكون قائمة من أسماء الوحدات (مثل['q_proj', 'v_proj']) أو نمطًا منتظمًا. - modules_to_save (
List[str]، اختياري) — قائمة بالوحدات غير طبقات PEANuT التي يجب تعيينها قابلة للتدريب وحفظها في نقطة الفحص النهائية. - exclude_modules (
Union[List[str], str]، اختياري) — أسماء الوحدات التي لا يُطبَّق عليها المُكيّف. عند تمرير نص، يتم إجراء مطابقة باستخدام تعبير نمطي. عند تمرير قائمة من النصوص، يتم إجراء مطابقة دقيقة أو يُتحقق مما إذا كان اسم الوحدة ينتهي بأي من النصوص المُمرَّرة. - layers_to_transform (
Union[list[int], int]، اختياري) — فهارس الطبقات المراد تحويلها. إذا تم تحديد هذا الحُجج، فإن PEFT سيحوّل فقط فهارس الطبقات المحددة في هذه القائمة. إذا تم تمرير عدد صحيح واحد، فإن PEFT سيحوّل فقط الطبقة الموجودة عند هذا الفهرس. - layers_pattern (
Optional[Union[List[str], str]]، اختياري) — اسم نمط الطبقة، يُستخدم فقط إذا لم يكنlayers_to_transformقيمة None وإذا لم يكن نمط الطبقة ضمن أنماط الطبقات الشائعة. - init_weights (
bool) — ما إذا كان سيتم تهيئة أوزات مُكيّف PEANuT باستخدام مخطط التهيئة الافتراضي:- إذا كان
True: يتم تهيئة جميع الأوزان باستثناءBباستخدام Kaiming uniform، ويتم تهيئةBإلى الصفر. - إذا كان
False: يتم تهيئة جميع الأوزان (بما في ذلكB) باستخدام Kaiming uniform.
تصفير
Bيجعل المُكيّف يبدأ كعملية لا تُحدث أي تغيير. - إذا كان
هذه هي فئة الإعدادات لتخزين إعدادات PeanutModel.
ملاحظات:
يستخدم PEANuT مسارًا واعيًا بالأوزان، حيث يكون وزن الدلتا مشروطًا بالوزن الأساسي. يُطبَّق مُكيّف A على بُعد المخرجات للوزن الأساسي، لذا يكون شكل A هو (out_dim -> r) بدلاً من الشكل المعتاد (in_dim -> r) المستخدم في الأساليب المشابهة لـ LoRA.
PeanutModel
class peft.PeanutModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None ) → torch.nn.Module
المعاملات
- model (
torch.nn.Module) — النموذج الذي سيتم تكييفه. - config (PeanutConfig) — إعدادات نموذج PEANuT.
- adapter_name (
str) — اسم المُكيّف، القيمة الافتراضية هي"default".
يعيد
torch.nn.Module
نموذج PEANuT PEFT.
ينشئ نموذج PEANuT من نموذج transformers مُدرَّب مسبقًا.
يُوصف هذا الأسلوب بالتفصيل في https://arxiv.org/abs/2410.01870.
الخصائص:
- model (PreTrainedModel) — النموذج الذي سيتم تكييفه.
- peft_config (PeanutConfig): إعدادات نموذج PEANuT.