PEFT documentation
GraLoRA
GraLoRA
التكيّف منخفض الرتبة الدقيق (GraLoRA) هو أسلوب PEFT مصمم لتعزيز قابلية التعبير في التكيّف منخفض الرتبة مع تحسين المتانة تجاه القيم الشاذة في التفعيلات، استنادًا إلى رؤى مستمدة من مشكلات معروفة في التكميم.

على عكس LoRA القياسي، الذي يطبّق مُكيّفًا منخفض الرتبة واحدًا عبر مساحة الميزات بأكملها، يُقدّم GraLoRA مخطط تكيّف منظمًا ودقيقًا. فهو يقسم مساحة التكيّف إلى شبكة من أزواج مُكيّفات أصغر ومستقلة، يتولى كلٌّ منها مجموعة فرعية محلية من أبعاد الإدخال والإخراج. ونتيجةً لذلك، يعمل كل مُكيّف على فضاء فرعي أصغر بمقدار مرات في كلا البعدين مقارنةً بمُكيّف LoRA الأصلي.
يتيح هذا التفكيك الدقيق تحديثات محلية مكانياً وواعية بالسياق، مما يزيد بشكل فعال من السعة التمثيلية دون إضافة معاملات أو تكلفة حسابية إضافية. من خلال عزل تأثير التفعيلات القصوى داخل فضاءات فرعية أصغر، تخفف GraLoRA من تشوه التدرجات وتحافظ على التوازن بين القنوات أثناء التكيف.
ملخص الورقة البحثية هو:
تُعدّ التكيّف منخفض الرتبة (LoRA) طريقة شائعة للتكيّف الفعال من حيث المعاملات (PEFT) للنماذج التوليدية، وتُقدَّر لبساطتها وفعاليتها. وعلى الرغم من التحسينات الأخيرة، لا يزال LoRA يعاني من قيد أساسي: الإفراط في التكيّف عند توسيع عنق الزجاجة. يُحقق أفضل أداء عند الرتب 32–64، غير أن دقته تتوقف عن التحسن أو تتراجع عند الرتب الأعلى، ولا تزال دون أداء التكيّف الكامل (FFT). حددنا السبب الجذري في عنق الزجاجة الهيكلي لـ LoRA، الذي يُدخل تشابكًا في التدرجات إلى قنوات الإدخال غير ذات الصلة ويُشوّه انتشار التدرجات. لمعالجة ذلك، نُقدّم بنية جديدة، وهي التكيّف الحبيبي منخفض الرتبة (GraLoRA)، التي تُقسّم مصفوفات الأوزان إلى كتل فرعية، لكل منها مُكيّف منخفض الرتبة خاص به. وبكلفة حسابية أو تخزينية شبه معدومة، يتجاوز GraLoRA قيود LoRA، ويزيد الفعالية التمثيلية بشكل كبير، ويُقارب سلوك FFT بشكل أقرب. تُظهر التجارب على معايير توليد الأكواد، والاستدلال الشائع، والاستدلال الرياضي، والفهم اللغوي العام، وتوليد الصور، أن GraLoRA يتفوق باستمرار على LoRA والقواعد الأساسية الأخرى، محققًا مكسبًا مطلقًا يصل إلى +8.5% في Pass@1 على HumanEval+. وتبقى هذه التحسينات سارية عبر أحجام النماذج وإعدادات الرتب، مما يجعل GraLoRA حلًا قابلًا للتوسع ومتينًا لـ PEFT.
نظرة عامة على الاختبارات
واجهة برمجة التطبيقات
GraloraConfig
فئة peft.GraloraConfig
< 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 = 32hybrid_r: int = 0target_modules: list[str] | str | None = Nonealpha: int = 64gralora_dropout: float = 0.0gralora_k: int = 2fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: list[str] | None = Noneinit_weights: bool = Truelayers_to_transform: list[int] | int | None = Nonelayers_pattern: str | None = None )
المعاملات
- r (
int) — تحدد بُعد انتباه GraLoRA رتبة مُكيّف GraLoRA. يكون إجمالي عدد معاملات مُكيّف GraLoRA هو نفسه عدد معاملات LoRA ذات الرتبة r نفسها، بينما تتضاعف القدرة التعبيرية بمعامل gralora_k. - hybrid_r (
int) — ترتيب Hybrid GraLoRA يحدد الترتيب المخصص لطريقة LoRA العادية عند استخدام طريقة Hybrid GraLoRA. تصبح Hybrid GraLoRA، وهي مزيج من GraLoRA وLoRA العادية، متاحة عندما يكون hybrid_r > 0. عدد معاملات مُكيّف GraLoRA هو r + hybrid_r. - target_modules (
Union[List[str], str]) — قائمة بأسماء الوحدات أو تعبير نمطي (regex) لأسماء الوحدات التي سيتم استبدالها بـ GraLoRA. على سبيل المثال، [‘q’, ‘v’] أو ‘.decoder.(SelfAttention|EncDecAttention).*(q|v)$‘. يمكن أن يكون هذا أيضاً برمز تعميم ‘all-linear’ الذي يطابق جميع وحدات linear/Conv1D (إذا كان النموذج من نوع PreTrainedModel، يتم استبعاد طبقة الإخراج). إذا لم يتم تحديد الوحدات، فسيتم اختيارها وفقاً لبنية النموذج. إذا لم تكن البنية معروفة، فسيتم رفع خطأ — في هذه الحالة، يجب عليك تحديد الوحدات المستهدفة يدوياً. - alpha (
int) — ألفا الخاص بـ GraLoRA. ألفا الخاص بـ GraLoRA هو عامل التوسعة (scaling factor) للمُكيّف (adapter) الخاص بـ GraLoRA. يصبح عامل التوسعة alpha / (r + hybrid_r). - gralora_dropout (
float) — احتمالية إسقاط GraLoRA dropout هي احتمال الإسقاط الخاص بمكيّف GraLoRA. تُستخدم لمنع الإفراط في التخصيص وتحسين تعميم مكيّف GraLoRA. - gralora_k (
int) — يحدد GraLoRA k عدد الحزم الفرعية في مُكيّف GraLoRA. يجب أن يكون الرتبة r قابلة للقسمة على gralora_k لكي يكون مُكيّف GraLoRA صالحًا. يبقى إجمالي عدد المعاملات محفوظًا بغض النظر عن gralora_k. تزداد الرتبة الكاملة لمُكيّف GraLoRA بمقدار gralora_k، بينما تنخفض رتبة كل حزمة فرعية بمقدار gralora_k. يُوصى باستخدام gralora_k=2 للرتبة 32 أو أقل، و gralora_k=4 للرتبة 64 أو أعلى. - fan_in_fan_out (
bool) — اضبط هذا على True إذا كانت الطبقة التي سيتم استبدالها تخزن الأوزان على شكل (fan_in, fan_out). على سبيل المثال، يستخدم gpt-2Conv1Dالذي يخزن الأوزان على شكل (fan_in, fan_out) وبالتالي يجب ضبط هذا علىTrue. - bias (
str) — نوع الانحياز (Bias) الخاص بـ gralora. يمكن أن يكون ‘none’ أو ‘all’ أو ‘gralora_only’. إذا كان ‘all’ أو ‘gralora_only’، فسيتم تحديث الانحيازات المقابلة أثناء التدريب. انتبه إلى أن هذا يعني أنه حتى عند تعطيل المحولات (adapters)، لن ينتج النموذج نفس المخرجات التي كان سينتجها النموذج الأساسي دون أي تكييف. - modules_to_save (
Optional[list[str]]) — قائمة بالوحدات، بخلاف طبقات gralora، التي يجب تعيينها قابلة للتدريب وحفظها في نقطة الفحص النهائية. على سبيل المثال، في مهام تصنيف التسلسل أو تصنيف الرموز، تكون الطبقة النهائيةclassifier/scoreمُهيأة عشوائيًا، وبالتالي تحتاج إلى أن تكون قابلة للتدريب ومُحفوظة. - init_weights (
bool) — ما إذا كان سيتم تهيئة أوزان طبقات GraLoRA باستخدام التهيئة الافتراضية. لا تغيّر هذا الإعداد إلا إذا كنت تعرف بالضبط ما تفعله. - layers_to_transform (
Union[List[int], int]) — مؤشرات الطبقات المراد تحويلها، إذا تم تحديد هذا الحُجج، فإن PEFT سيحوّل فقط مؤشرات الطبقات المحددة داخل هذه القائمة. إذا تم تمرير عدد صحيح واحد، فإن PEFT سيحوّل فقط الطبقة الموجودة عند هذا المؤشر. يعمل هذا فقط عندما يكون target_modules قائمة من str. - layers_pattern (
Optional[Union[List[str], str]]) — اسم نمط الطبقة، يُستخدم فقط إذا كانlayers_to_transformمختلفاً عن None وإذا لم يكن نمط الطبقة ضمن أنماط الطبقات الشائعة. يعمل هذا فقط عندما يكون target_modules قائمة من str. يجب أن يستهدف هذاnn.ModuleListالخاص بالنموذج، والذي يُسمى غالباً'layers'أو'h'.
هذه هي فئة الإعدادات لتخزين إعدادات GraloraModel.
GraloraModel
فئة peft.GraloraModel
< 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 (PreTrainedModel) — النموذج الذي سيتم تكييفه.
- config (GraloraConfig) — إعدادات نموذج Gralora.
- adapter_name (
str) — اسم المُكيّف، القيمة الافتراضية هي"default".
يعيد
torch.nn.Module
نموذج Gralora.
ينشئ نموذج تكييف المصفوفة العشوائية القائم على المتجهات (Gralora) من نموذج transformers مُدرَّب مسبقًا.
مثال:
>>> from transformers import AutoModelForCausalLM
>>> from peft import GraloraConfig, get_peft_model
>>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
>>> config = GraloraConfig(r=128)
>>> model = get_peft_model(base_model, config)الخصائص:
- model (PreTrainedModel) — النموذج الذي سيتم تكييفه.
- peft_config (GraloraConfig): إعدادات نموذج Gralora.