PEFT documentation
C3A: الضبط الدقيق الفعال من حيث المعلمات عبر الالتفاف الدائري
C3A: الضبط الدقيق الفعال من حيث المعلمات عبر الالتفاف الدائري
C3A هي تقنية ضبط دقيق فعّالة من حيث المعلمات تستفيد من الالتفاف الدائري (Circular Convolution) لتحقيق تكيّف عالي الرتبة ضمن حدود موارد معقولة.
لاحظ أنه يجب استخدام معدل تعلّم (LR) أكبر بكثير لطريقة C3A مقارنةً بالطرق الأخرى. على سبيل المثال، يُعد معدل تعلّم بقيمة 1e-1 نقطة انطلاق جيدة لطريقة C3A. بالإضافة إلى ذلك، يجب استخدام تراجع وزن (weight decay) أصغر بكثير. يمكنك الرجوع إلى مجلد method_comparison لمزيد من التفاصيل.
بالنسبة إلى block_size, ، يؤثر على المعلمات القابلة للضبط والأداء. للبدء، يمكنك اختيار قريب من $\frac{\sqrt{d_1 \times d_2}}{r}$، حيث هو الرتبة الخاصة بـ LoRA التي ستستخدمها لهذه المهمة.
تخضع C3A حاليًا للقيود التالية:
- يتم دعم طبقات
nn.Linearفقط. - لا يتم دعم الطبقات المُكمّاة.
- يجب أن يكون حجم الكتلة قاسماً مشتركاً لكل من حجم المدخلات وحجم المخرجات للطبقات المستهدفة.
إذا لم تكن هذه القيود مناسبة لحالتك، فكّر في استخدام طرق أخرى بدلاً منها.
ملخص الورقة البحثية هو:
اكتسبت تقنية Low-Rank Adaptation (LoRA) شعبيةً واسعةً في ضبط نماذج الأساس الكبيرة، مستفيدةً من مصفوفات منخفضة الرتبة و لمثل تغييرات الأوزان (أي $\Delta \mathbf{W} = \mathbf{B} \mathbf{A}$). تقلل هذه الطريقة من عدد المعاملات القابلة للتدريب وتخفف من استهلاك الذاكرة الكبير المرتبط بمصفوفات الدلتا الكاملة، وذلك عبر الضرب التسلسلي لـ و مع التفعيل. وعلى الرغم من نجاحها، فإن الخاصية الجوهرية ذات الرتبة المنخفضة قد تحدّ من أدائها. وعلى الرغم من اقتراح عدة متغيرات لمعالجة هذه المشكلة، إلا أنها غالبًا ما تتجاهل الكفاءة الحسابية والذاكرة الجوهرية التي توفرها LoRA. في هذه الورقة، نقترح Circular Convolution Adaptation (C3A)، الذي لا يحقق فقط تكيّفًا عالي الرتبة مع أداء محسّن، بل يتفوق أيضًا في كل من القدرة الحسابية واستخدام الذاكرة. تُظهر التجارب الواسعة أن C3A يتفوق باستمرار على LoRA ومتغيراته عبر مهام الضبط المختلفة.
نظرة عامة على الاختبارات
واجهة برمجة التطبيقات
C3AConfig
فئة peft.C3AConfig
< 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 = Falseblock_size: int = 256target_modules: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = Nonelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Noneblock_size_pattern: Optional[dict] = <factory>init_weights: Optional[Union[bool, Literal['gaussian', 'kaiming_uniform', 'xavier_uniform']]] = 'xavier_uniform' )
المعاملات
- block_size (
int) — حجم الكتلة لـ C3A، ويجب أن يكون قابلاً للقسمة على كل من حجم الإدخال وحجم الإخراج للطبقة المستهدفة. إذا لم تكن على دراية بالقيمة المناسبة لـ block_size، فاضبطها على القاسم المشترك الأكبر لجميع أحجام الإدخال والإخراج لطبقاتك المستهدفة. زيادة هذه القيمة تؤدي إلى تقليل عدد المعاملات. - target_modules (
Union[list[str],str]) — أسماء الوحدات التي سيتم تطبيق C3A عليها. - bias (
str) — نوع الانحياز لـ C3A. يمكن أن يكون ‘none’ أو ‘all’ أو ‘c3a_only’. إذا كان ‘all’ أو ‘c3a_only’، فسيتم تحديث الانحيازات المقابلة أثناء التدريب. انتبه إلى أن هذا يعني أنه حتى عند تعطيل المحولات، لن ينتج النموذج نفس المخرجات التي كان سينتجها النموذج الأساسي دون تكييف. - modules_to_save (
list[str]) — قائمة بالوحدات التي يجب ضبطها لتكون قابلة للتدريب وحفظها في نقطة الفحص النهائية، بخلاف طبقات C3A. - layers_to_transform (
Union[list[int],int]) — مؤشرات الطبقات التي سيتم تحويلها، إذا تم تحديد هذا الحُجج، فسيتم تطبيق C3A على مؤشرات الطبقات المحددة في هذه القائمة. إذا تم تمرير عدد صحيح واحد، فسيتم تطبيق C3A على الطبقة الموجودة عند هذا المؤشر. - layers_pattern (
str) — اسم نمط الطبقة، يُستخدم فقط إذا كانlayers_to_transformمختلفًا عنNoneوإذا لم يكن نمط الطبقة ضمن أنماط الطبقات الشائعة. - block_size_pattern (
dict) — The mapping from layer names or regexp expression to block_size which are different from the default specified. For example,{"model.decoder.layers.0.encoder_attn.k_proj": 1280} - init_weights (
Union[bool, Literal["gaussian", "kaiming_uniform", "xavier_uniform"]]) — القيمة الافتراضية هي ‘xavier_uniform’. عند تعيين هذه القيمة إلىFalse، يتم استخدام ‘xavier_uniform’ أيضًا. لتعيين الأوزان إلى الصفر (وبذلك يصبح C3A إجراءً لا يؤثر على النتيجة)، قم بتعيين القيمة إلىTrue.
هذه هي فئة الإعدادات لتخزين إعدادات C3AModel.
C3AModel
فئة peft.C3AModel
< 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 (C3AConfig) — إعدادات نموذج C3A.
- adapter_name (
str) — اسم المُكيّف، القيمة الافتراضية هي"default".
يعيد
torch.nn.Module
نموذج C3A.
ينشئ نموذج C3A من نموذج transformers مُدرَّب مسبقًا.
يُوصف这个方法 بالتفصيل في https://huggingface.co/papers/2407.19342.
الخصائص:
- model (PreTrainedModel) — النموذج الذي سيتم تكييفه.
- peft_config (C3AConfig): إعدادات نموذج C3A.