؟ بيفت
أحدث أساليب الضبط الدقيق ذات الكفاءة في المعلمات (PEFT).
غالبًا ما يكون الضبط الدقيق للنماذج الكبيرة المدربة مسبقًا مكلفًا للغاية نظرًا لحجمها. تتيح طرق الضبط الدقيق ذات كفاءة المعلمات (PEFT) التكيف الفعال للنماذج الكبيرة المدربة مسبقًا مع التطبيقات النهائية المختلفة من خلال الضبط الدقيق لعدد صغير فقط من معلمات النموذج (الإضافية) بدلاً من جميع معلمات النموذج. وهذا يقلل بشكل كبير من تكاليف الحساب والتخزين. تحقق تقنيات PEFT الحديثة أداءً مشابهًا للنماذج المضبوطة بالكامل.
تم دمج PEFT مع Transformers لسهولة التدريب على النماذج والاستدلال عليها، وDiffusers لإدارة المحولات المختلفة بسهولة، وAccelerate للتدريب الموزع والاستدلال للنماذج الكبيرة حقًا.
نصيحة
تفضل بزيارة مؤسسة PEFT لقراءة طرق PEFT المطبقة في المكتبة وللاطلاع على دفاتر الملاحظات التي توضح كيفية تطبيق هذه الأساليب على مجموعة متنوعة من المهام النهائية. انقر فوق الزر "مشاهدة المستودعات" في صفحة المؤسسة ليتم إعلامك بالطرق والدفاتر التي تم تنفيذها حديثًا!
تحقق من القسم المرجعي لواجهة برمجة تطبيقات محولات PEFT للحصول على قائمة بطرق PEFT المدعومة، واقرأ المحولات والمطالبات الناعمة والأدلة المفاهيمية IA3 لمعرفة المزيد حول كيفية عمل هذه الأساليب.
تثبيت PEFT من النقطة:
pip install peft
قم بإعداد نموذج للتدريب باستخدام طريقة PEFT مثل LoRA عن طريق تغليف النموذج الأساسي وتكوين PEFT باستخدام get_peft_model
. بالنسبة للنموذج bigscience/mt0-large، فأنت تقوم فقط بتدريب 0.19% من المعلمات!
from transformers import AutoModelForSeq2SeqLM
from peft import get_peft_config , get_peft_model , LoraConfig , TaskType
model_name_or_path = "bigscience/mt0-large"
tokenizer_name_or_path = "bigscience/mt0-large"
peft_config = LoraConfig (
task_type = TaskType . SEQ_2_SEQ_LM , inference_mode = False , r = 8 , lora_alpha = 32 , lora_dropout = 0.1
)
model = AutoModelForSeq2SeqLM . from_pretrained ( model_name_or_path )
model = get_peft_model ( model , peft_config )
model . print_trainable_parameters ()
"trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19151053100118282"
لتحميل نموذج PEFT للاستدلال:
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
import torch
model = AutoPeftModelForCausalLM . from_pretrained ( "ybelkada/opt-350m-lora" ). to ( "cuda" )
tokenizer = AutoTokenizer . from_pretrained ( "facebook/opt-350m" )
model . eval ()
inputs = tokenizer ( "Preheat the oven to 350 degrees and place the cookie dough" , return_tensors = "pt" )
outputs = model . generate ( input_ids = inputs [ "input_ids" ]. to ( "cuda" ), max_new_tokens = 50 )
print ( tokenizer . batch_decode ( outputs , skip_special_tokens = True )[ 0 ])
"Preheat the oven to 350 degrees and place the cookie dough in the center of the oven. In a large bowl, combine the flour, baking powder, baking soda, salt, and cinnamon. In a separate bowl, combine the egg yolks, sugar, and vanilla."
هناك العديد من الفوائد لاستخدام PEFT ولكن الميزة الرئيسية هي التوفير الهائل في الحوسبة والتخزين، مما يجعل PEFT قابلاً للتطبيق في العديد من حالات الاستخدام المختلفة.
ضع في اعتبارك متطلبات الذاكرة لتدريب النماذج التالية على مجموعة بيانات ought/raft/twitter_complaints باستخدام وحدة معالجة الرسومات A100 بسعة 80 جيجابايت مع أكثر من 64 جيجابايت من ذاكرة الوصول العشوائي لوحدة المعالجة المركزية.
نموذج | ضبط كامل | بيفت-لورا بايتورتش | PEFT-LoRA DeepSpeed مع تفريغ وحدة المعالجة المركزية |
---|---|---|---|
bigscience/T0_3B (3B معلمات) | وحدة معالجة الرسومات 47.14 جيجابايت / وحدة المعالجة المركزية 2.96 جيجابايت | وحدة معالجة الرسومات 14.4 جيجابايت / وحدة المعالجة المركزية 2.96 جيجابايت | وحدة معالجة الرسومات 9.8 جيجابايت / وحدة المعالجة المركزية 17.8 جيجابايت |
bigscience/mt0-xxl (12B معلمات) | وحدة معالجة الرسومات OOM | وحدة معالجة الرسومات 56 جيجابايت / وحدة المعالجة المركزية 3 جيجابايت | وحدة معالجة الرسومات 22 جيجابايت / وحدة المعالجة المركزية 52 جيجابايت |
Bigscience/bloomz-7b1 (7B بارامز) | وحدة معالجة الرسومات OOM | وحدة معالجة الرسومات 32 جيجابايت / وحدة المعالجة المركزية 3.8 جيجابايت | وحدة معالجة الرسومات 18.1 جيجابايت / وحدة المعالجة المركزية 35 جيجابايت |
باستخدام LoRA، يمكنك ضبط نموذج معلمة 12B بشكل كامل والذي كان من الممكن أن تنفد منه الذاكرة على وحدة معالجة الرسومات سعة 80 جيجابايت، وملاءمة نموذج معلمة 3B وتدريبه بشكل مريح. عندما تنظر إلى أداء نموذج المعلمة 3B، فإنه يمكن مقارنته بنموذج مضبوط بالكامل بجزء صغير من ذاكرة وحدة معالجة الرسومات.
اسم التقديم | دقة |
---|---|
خط الأساس البشري (التعهيد الجماعي) | 0.897 |
فلان-T5 | 0.892 |
لورا-t0-3b | 0.863 |
نصيحة
لم يتم تحسين أداء نموذج bigscience/T0_3B في الجدول أعلاه. يمكنك الاستفادة من المزيد من الأداء من خلال اللعب بقوالب تعليمات الإدخال، ومعلمات LoRA الفائقة، وغيرها من المعلمات الفائقة المتعلقة بالتدريب. يبلغ حجم نقطة التفتيش النهائية لهذا النموذج 19 ميجا بايت فقط مقارنة بـ 11 جيجا بايت لنموذج bigscience/T0_3B الكامل. تعرف على المزيد حول مزايا الضبط الدقيق باستخدام PEFT في منشور المدونة هذا.
التكميم هو طريقة أخرى لتقليل متطلبات الذاكرة للنموذج من خلال تمثيل البيانات بدقة أقل. يمكن دمجها مع أساليب PEFT لتسهيل تدريب وتحميل LLMs للاستدلال.
يمكن أن يساعدك PEFT في توفير مساحة التخزين عن طريق تجنب الضبط الكامل للنماذج في كل مهمة أو مجموعة بيانات. في كثير من الحالات، لا تقوم سوى بضبط جزء صغير جدًا من معلمات النموذج ويكون حجم كل نقطة تفتيش بضع ميغابايت فقط (بدلاً من الجيجابايت). تُظهر محولات PEFT الأصغر هذه أداءً مشابهًا للنموذج المضبوط بالكامل. إذا كان لديك العديد من مجموعات البيانات، فيمكنك توفير الكثير من مساحة التخزين باستخدام نموذج PEFT ولا داعي للقلق بشأن النسيان الكارثي أو الإفراط في ملاءمة العمود الفقري أو النموذج الأساسي.
يتم دعم PEFT على نطاق واسع عبر نظام Hugging Face البيئي نظرًا لكفاءته الهائلة في التدريب والاستدلال.
تستهلك عملية النشر التكراري قدرًا كبيرًا من الذاكرة مما قد يجعل من الصعب تدريبها. يمكن أن يساعد PEFT في تقليل متطلبات الذاكرة وتقليل حجم تخزين نقطة تفتيش النموذج النهائي. على سبيل المثال، ضع في اعتبارك الذاكرة المطلوبة لتدريب نموذج Stable Diffusion مع LoRA على وحدة معالجة الرسومات A100 بسعة 80 جيجابايت مع أكثر من 64 جيجابايت من ذاكرة الوصول العشوائي لوحدة المعالجة المركزية. يبلغ حجم نقطة التفتيش للنموذج النهائي 8.8 ميجابايت فقط!
نموذج | ضبط كامل | بيفت-لورا | PEFT-LoRA مع نقطة تفتيش متدرجة |
---|---|---|---|
CompVis/الانتشار المستقر-v1-4 | وحدة معالجة الرسومات 27.5 جيجابايت / وحدة المعالجة المركزية 3.97 جيجابايت | وحدة معالجة الرسومات 15.5 جيجابايت / وحدة المعالجة المركزية 3.84 جيجابايت | وحدة معالجة الرسومات 8.12 جيجابايت / وحدة المعالجة المركزية 3.77 جيجابايت |
نصيحة
ألقِ نظرة على البرنامج النصي التدريبي example/lora_dreambooth/train_dreambooth.py لمحاولة تدريب نموذج Stable Diffusion الخاص بك باستخدام LoRA، والتجربة مع smangrul/peft-lora-sd-dreambooth Space الذي يعمل على مثيل T4. تعرف على المزيد حول تكامل PEFT في Diffusers في هذا البرنامج التعليمي.
Accelerate عبارة عن مكتبة للتدريب الموزع والاستدلال على إعدادات وأجهزة التدريب المختلفة (وحدات معالجة الرسومات، ووحدات TPU، وApple Silicon، وما إلى ذلك). تعمل نماذج PEFT مع Accelerate خارج الصندوق، مما يجعل من السهل حقًا تدريب نماذج كبيرة جدًا أو استخدامها للاستدلال على أجهزة المستهلك ذات الموارد المحدودة.
يمكن أيضًا تطبيق PEFT على تدريب LLMs باستخدام مكونات RLHF مثل المُصنف والسياسة. ابدأ بالقراءة:
استخدم هذه المساحة أو راجع المستندات للعثور على النماذج التي تدعم رسميًا طريقة PEFT خارج الصندوق. حتى إذا كنت لا ترى نموذجًا مدرجًا أدناه، يمكنك تكوين تكوين النموذج يدويًا لتمكين PEFT لنموذج. اقرأ دليل هندسة المحولات الجديدة لمعرفة كيفية القيام بذلك.
إذا كنت ترغب في المساهمة في PEFT، يرجى مراجعة دليل المساهمة الخاص بنا.
للاستخدام ؟ PEFT في منشورك، يرجى الاستشهاد به باستخدام إدخال BibTeX التالي.
@Misc { peft ,
title = { PEFT: State-of-the-art Parameter-Efficient Fine-Tuning methods } ,
author = { Sourab Mangrulkar and Sylvain Gugger and Lysandre Debut and Younes Belkada and Sayak Paul and Benjamin Bossan } ,
howpublished = { url{https://github.com/huggingface/peft} } ,
year = { 2022 }
}