PEFT documentation
دوال لتكامل PEFT
دوال لتكامل PEFT
مجموعة من الدوال التي قد تكون مفيدة للنماذج غير PeftModel، مثل تكامل transformers أو diffusers
يمكن اعتبار الدوال المقدمة هنا “واجهة برمجة تطبيقات عامة” لـ PEFT، وبالتالي فهي آمنة للاستخدام من قبل الحزم التي توفر تكاملات مع PEFT.
قم بتحويل أنواع بيانات أوزان المحوّل
peft.tuners.tuners_utils.cast_adapter_dtype
< source >( model: nn.Moduleadapter_name: strautocast_adapter_dtype: bool = True )
طريقة مساعدة لتحويل أوزان المُكيّف إلى نوع البيانات الصحيح. تعيد تعيين معاملات جديدة لطبقات المُكيّف، وإذا كان بعض الكائنات تشير إلى المعاملات القديمة، فلن يتم تحديثها.
حاليًا، يقوم هذا فقط بترقية أنواع البيانات العائمة (float dtypes) إلى float32.
حذف مُكيّف PEFT من النموذج
peft.tuners.tuners_utils.delete_adapter
< source >( model: nn.Moduleadapter_name: strprefix: strlayer_cls: type[BaseTunerLayer] = <class 'peft.tuners.tuners_utils.BaseTunerLayer'> ) → new_adapter (list[str] | None)
المعاملات
- model (
nn.Module) — النموذج الذي يجب حذف المُكيّف منه. - adapter_name (str) — اسم المُكيّف الذي سيتم حذفه.
- prefix (str) — بادئة طريقة PEFT، مثل “lora_” لـ LoRA.
- layer_cls (نوع، اختياري) —
فئة طبقة المُكيّف. القيمة الافتراضية هي
BaseTunerLayer.
يعيد
new_adapter (list[str] | None)
اسم المُكيّف (المُكيّفات) المتبقي بعد الحذف، أو None إذا لم يتبقَّ أي مُكيّفات نشطة. استخدم هذا
لتعيين المُكيّف النشط الجديد للنموذج عند الحاجة.
حذف مُكيّف PEFT موجود.
ملاحظة: لا تحذف هذه الدالة إعدادات PEFT على النموذج، إن وُجدت. كما أنها لن تُزيل طبقات PEFT بالكامل إذا حُذف مُكيّف PEFT الأخير. لهذا الغرض، يُنصح باستخدام model.unload() إذا كنت تستخدم نسخة من نموذج PEFT، أو ببساطة إعادة تحميل النموذج الأساسي.
احصل على قاموس الحالة (state dict) لمُكيّف PEFT
peft.get_peft_model_state_dict
< source >( modelstate_dict = Noneadapter_name: str = 'default'unwrap_compiled: bool = Falsesave_embedding_layers: bool | Literal['auto'] = 'auto' )
المعاملات
- model (PeftModel) — نموذج Peft. عند استخدام torch.nn.DistributedDataParallel أو DeepSpeed أو FSDP، يجب أن يكون النموذج هو النموذج الأساسي/النموذج غير المغلف (أي model.module).
- state_dict (
dict، اختياري، القيمة الافتراضيةNone) — قائمة الحالة (state dict) للنموذج. إذا لم تُقدَّم، فسيتم استخدام قائمة الحالة للنموذج المُمرَّر. - adapter_name (
str، اختياري، الافتراضي"default") — اسم المُكيّف الذي يجب إرجاع حالة القاموس الخاص به. - unwrap_compiled (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب فك تغليف النموذج إذا تم استخدام torch.compile. - save_embedding_layers (
Union[bool, str], , اختياري, الافتراضيauto) — إذا كانTrue، يتم حفظ طبقات التضمين بالإضافة إلى أوزان المحوّل. إذا كانauto، يتم فحص طبقات التضمين الشائعةpeft.utils.other.EMBEDDING_LAYER_NAMESفيtarget_modulesالخاص بالإعدادات عند توفرها. بناءً على ذلك، يتم تعيين العلم المنطقي. يعمل هذا فقط مع نماذج 🤗 transformers.
احصل على state dict للمُكيّف (adapter) المحدد في نموذج PEFT.
يشمل هذا معاملات PEFT فقط، وليس معاملات النموذج الأساسي. وبالتالي، يكون state_dict المُعاد صغيراً بشكل عام مقارنةً بحجم النموذج الكامل. لاسترجاع state_dict الكامل، ما عليك سوى استدعاء model.state_dict().
لاحظ أن اسم المُكيّف يُحذف من state_dict، إذ إنّه مجرد اسم تعسفي يمكن تغييره عند تحميل المُكيّف. لذا، على سبيل المثال، إذا كان اسم المُكيّف 'default' والمفتاح الأصلي هو 'model.q_proj.lora_A.default.weight'، فإن المفتاح المُعاد سيكون 'model.q_proj.lora_A.weight'. استخدم هذه الدالة بالتزامن مع set_peft_model_state_dict() للتعامل مع اسم المُكيّف عند تحميل الأوزان.
حقن مُكيّف PEFT في النموذج بناءً على إعداد PEFT
peft.inject_adapter_in_model
< source >( peft_config: PeftConfigmodel: torch.nn.Moduleadapter_name: str = 'default'low_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )
المعاملات
- peft_config (
PeftConfig) — كائن الإعدادات الذي يحتوي على معاملات نموذج PEFT. - model (
torch.nn.Module) — النموذج المُدخل الذي سيتم حقن المُكيّف فيه. - adapter_name (
str،optional، افتراضيًا"default") — اسم المُكيّف الذي سيتم حقنه، وإذا لم يُقدَّم، يُستخدم اسم المُكيّف الافتراضي (“default”). - low_cpu_mem_usage (
bool,optional, defaults toFalse) — إنشاء أوزان مُكيّف فارغة على جهاز meta. مفيد لتسريع عملية التحميل. - state_dict (
dict، اختياري، القيمة الافتراضيةNone) — إذا تم تمريرstate_dictهنا، فسيتم حقن المُكيّفات (adapters) بناءً على إدخالات الـ state_dict. يمكن أن يكون هذا مفيدًا عندما تكونtarget_modulesالدقيقة لطريقة PEFT غير معروفة، على سبيل المثال لأن نقطة التفتيش (checkpoint) أُنشئت دون بيانات وصفية. لاحظ أن القيم منstate_dictلا تُستخدم، بل تُستخدم المفاتيح فقط لتحديد الطبقات الصحيحة التي يجب تكييفها.
أنشئ طبقات PEFT وأدرجها في النموذج في مكانها.
حاليًا، لا تدعم واجهة برمجة التطبيقات (API) طرق تعلم الموجهات (prompt learning) أو الموجهات التكيفية (adaption prompt) أو المُعدِّلات (tuners) التي تحتفظ بحالة المُعدِّل (adapter state) مشتركة بين طبقات الهدف المتعددة. استخدم get_peft_model() لهذا الأخير.
تتشابه هذه الدالة مع get_peft_model() لكنها لا تُرجع كائنًا من PeftModel. وبدلاً من ذلك، تُرجع النسخة الأصلية المعدلة من النموذج المُمرَّر.
اضبط مُكيّف PEFT النشط (أو النشطين) للنموذج
peft.tuners.tuners_utils.set_adapter
< source >( modeladapter_name: str | list[str]inference_mode: bool = Falselayer_cls: type[BaseTunerLayer] = <class 'peft.tuners.tuners_utils.BaseTunerLayer'> )
المعاملات
- model (
nn.Module) — النموذج الذي يجب تعيين المُكيِّف (المُكيِّفات) عليه. - adapter_name (str, list[str]) — أسماء المُكيِّف (المُكيِّفات) التي سيتم تعيينها كفعّالة
- inference_mode (bool, اختياري) —
ما إذا كان يجب تجميد المُكيّف المُفعّل (أي
requires_grad=False). القيمة الافتراضية هي False. - layer_cls (نوع، اختياري) —
فئة طبقة المُكيّف. القيمة الافتراضية هي
BaseTunerLayer.
اضبط مُكيّف PEFT النشط (أو النشطين) للنموذج.
المُكيِّفات النشطة هي تلك المُكيِّفات التي تشارك في المرور الأمامي. استخدم هذه الدالة إذا كنت ترغب في التبديل بين عدة مُكيِّفات PEFT.
اضبط وضع التدريب للمُكيِّفات المحددة
peft.tuners.tuners_utils.set_training
< source >( modeladapter_names: str | Sequence[str]training: bool = True )
المعاملات
تفعيل أو تعطيل وضع التدريب على وحدات المحوّل المحددة.
اضبط خاصية requires_grad للمُكيّفات المحددة
peft.tuners.tuners_utils.set_requires_grad
< source >( modeladapter_names: str | Sequence[str]requires_grad: bool = True )
المعاملات
تفعيل أو تعطيل التدرجات على المُكيِّف (المُكيِّفات) المُحدَّد.
حمّل أوزان قاموس حالة PEFT في النموذج
peft.set_peft_model_state_dict
< source >( modelpeft_model_state_dictadapter_name = 'default'ignore_mismatched_sizes: bool = Falselow_cpu_mem_usage: bool = False )
المعاملات
- model (PeftModel) — نموذج Peft.
- peft_model_state_dict (
dict) — قائمة الحالة لنموذج Peft. - adapter_name (
str، اختياري، الافتراضي"default") — اسم المُكيّف الذي يجب تعيين حالة القاموس الخاص به. - ignore_mismatched_sizes (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم تجاهل الأحجام غير المتطابقة في قاموس الحالة. - low_cpu_mem_usage (
bool,optional, defaults toFalse) — This argument must beTrueif themodelwas loaded with adapter weights on the meta device, e.g. after callinginject_adapter_in_modelwithlow_cpu_mem_usage=True. Otherwise, leave it asFalse.
اضبط حالة القاموس (state dict) لنموذج PEFT.
بما أن لديك state_dict خاصًا بـ PEFT (كما يُعاد بواسطة get_peft_model_state_dict())، قم بإدراج الأوزان في النموذج. يجب أن يكون النموذج يحتوي مسبقًا على محولات PEFT (على سبيل المثال، عبر inject_adapter_in_model()).
يُشكّل ضبط أوزان المُكيّف (adapter) أيضًا إعادة إدراج اسم المُكيّف. وقد يكون هذا الاسم مختلفًا عن الاسم الذي استُخدم في الأصل لتدريب المُكيّف.