PEFT documentation

Llama-Adapter

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

and get access to the augmented documentation experience

to get started

Llama-Adapter

LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attention

Llama-Adapter هو أسلوب PEFT مصمَّم خصيصًا لتحويل Llama إلى نموذج يتبع التعليمات. يتم تجميد نموذج Llama، ولا يتعلم سوى مجموعة من محفزات التكيف المُسبَقة على رموز تعليمات الإدخال. وبما أن الوحدات المُثبَّتة عشوائيًا داخل النموذج قد تُسبب فقدان جزء من معرفته الحالية، يستخدم Llama-Adapter انتباهًا مُصفَّرًا مع بوابات مُصفَّرة لإضافة محفزات التعليمات إلى النموذج تدريجيًا.

ملخص الورقة البحثية هو:

نقدّم LLaMA-Adapter، وهو أسلوب تكيّف خفيف الوزن لضبط LLaMA بكفاءة إلى نموذج يتبع التعليمات. باستخدام 52K من أمثلة self-instruct، يضيف LLaMA-Adapter فقط 1.2M من المعاملات القابلة للتعلّم إلى نموذج LLaMA 7B المجمّد، ويكلف أقل من ساعة واحدة للضبط الدقيق على 8 وحدات GPU من نوع A100. تحديداً، نعتمد مجموعة من محفزات التكيّف القابلة للتعلّم، ونضعها قبل رموز النص المدخل في طبقات transformer الأعلى. ثم، نقترح آلية انتباه بتهيئة صفرية مع بوابة صفرية، التي تُدخل بشكل تكيفي الإشارات التعليمية الجديدة إلى LLaMA، مع الحفاظ بفعالية على معرفتها المُسبقة التدريب. مع التدريب الفعّال، يولّد LLaMA-Adapter استجابات عالية الجودة، مماثلة لتلك التي يولدها Alpaca مع ضبط دقيق كامل لمعاملات 7B. علاوة على ذلك، يمكن تمديد نهجنا ببساطة إلى مدخلات متعددة الوسائط، مثل الصور، لـ LLaMA المشروط بالصور، والذي يحقق قدرة استدلالية متفوقة على ScienceQA. ننشر كودنا في https://github.com/ZrrSkywalker/LLaMA-Adapter.

متى تستخدم Llama-Adapter

يُعدّ Llama-Adapter خياراً مناسباً عندما:

  • تريد نقطة تفتيش صغيرة جداً. يتم تدريب وحفظ موجهات التكيف وبواباتها فقط، مما يعادل adapter_layers * (adapter_len * hidden_size + 1) من المعاملات.
  • أنت تقوم بضبط تعليمي (instruction-tuning) لنموذج مدعوم (Llama أو Mistral أو GPT-2)، وهو ما يركّز عليه البحث.
  • تريد الاحتفاظ بعدة محوِّلات (adapters) مخصصة لمهام مختلفة لنفس النموذج الأساسي والتبديل بينها باستخدام set_adapter.

متى لا تستخدم Llama-Adapter

قد لا يكون Llama-Adapter الخيار الأفضل عندما:

  • نموذجك ليس من نماذج Llama أو Mistral أو GPT-2. تثير البنى المعمارية الأخرى خطأً من نوع ValueError. فكّر في استخدام LoRA بدلاً من ذلك.
  • تحتاج إلى صفر تكلفة استنتاج. لا يمكن دمج المُكيّف في الأوزان الأساسية (لا يُدعم merge_and_unload())، لذا فإن كل طبقة مُكيّفة تُركّز على adapter_len رموز إضافية إضافية أثناء الاستنتاج.
  • تريد أن تكون عدة محوِّلات (adapters) نشطة في الوقت نفسه. لا يمكن أن يكون هناك سوى محوِّل واحد نشط، ولا يمكن تراكب محفزات التكيّف (adaption prompts) على وحدة الانتباه (attention module) نفسها.

نظرة عامة على الاختبارات

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

AdaptionPromptConfig

فئة peft.AdaptionPromptConfig

< >

( 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 = Falsetarget_modules: str = Noneadapter_len: int = Noneadapter_layers: int = None )

يخزّن تكوين AdaptionPromptModel.

AdaptionPromptModel

فئة peft.AdaptionPromptModel

< >

( modelconfigs: dictadapter_name: str )

يُنفّذ تلميحات التكيّف كما هو موصوف في https://huggingface.co/papers/2303.16199.

تُستبدل وحدات الانتباه L الأولى بوحدات AdaptedAttention التي تغلف الوحدات الأصلية، لكنها تُدرج موجهات قابلة للتدريب مزودة ببوابات (للتهيئة الصفرية).

ملاحظات حول نمط المتعدّد المُكيِّفات:

  • نخزّن حالات المُكيّفات المختلفة عن طريق الاحتفاظ بقاموس من وحدات AdaptedAttention مُفهرسة باسم المُكيّف.
  • في كل مرة نبدّل فيها المُكيِّف (adapter)، نزيل وحدات المُكيِّف النشط حاليًا من النموذج، ونخزّنها في القاموس (dictionary)، ثم نستبدلها بوحدات المُكيِّف الجديد.
  • لتجنب حالة مكررة وقد تكون غير متسقة، يتم دائمًا إزالة المُكيّف النشط حاليًا من القاموس.
  • سيؤدي تعطيل المُكيّف أيضًا إلى إزالة الوحدات من النموذج.

add_adapter

< >

( adapter_name: strconfig: AdaptionPromptConfig )

أضِف مُكيِّفًا بالاسم والإعداد المحددين.

delete_adapter

< >

( adapter_name: str )

حذف مُكيّف (adapter) بالاسم المحدد.

disable_adapter_layers

< >

( )

تعطيل طبقات المُكيِّف عن طريق استبدال وحدات AdaptedAttention.

enable_adapter_layers

< >

( )

تفعيل طبقات المُكيِّف عن طريق استبدال وحدات AdaptedAttention المخزّنة مؤقتًا.

set_adapter

< >

( adapter_name: strinference_mode: bool = False )

اضبط النموذج لاستخدام المُكيّف (adapter) ذي الاسم المحدد.

Update on GitHub