PEFT documentation
النماذج
النماذج
PeftModel هي فئة النموذج الأساسية لتحديد نموذج Transformer الأساسي وإعداده لتطبيق طريقة PEFT عليه. تحتوي فئة PeftModel الأساسية على طرق لتحميل وحفظ النماذج من Hub.
PeftModel
فئة peft.PeftModel
< source >( model: torch.nn.Modulepeft_config: PeftConfigadapter_name: str = 'default'autocast_adapter_dtype: bool = Truelow_cpu_mem_usage: bool = False )
المعاملات
- model (
torch.nn.Module) — النموذج الأساسي الذي سيتم تكييفه، وهو عادةً نموذج من Transformers. - peft_config (PeftConfig) — إعدادات نموذج Peft.
- adapter_name (
str، اختياري) — اسم المُكيّف، القيمة الافتراضية هي"default". - autocast_adapter_dtype (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلا إلى تحويل أوزان المُكيّف المُعرَّفة بنوعَي float16 وbfloat16 إلى float32، إذ يُعد ذلك مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على بعض مُكيّفات PEFT. إذا تم ضبطه علىFalse، فستبقى أنواع البيانات كما هي، مطابقةً لأنواع البيانات للطبقة المقابلة. - low_cpu_mem_usage (
bool,optional, القيمة الافتراضية هيFalse) — إنشاء أوزان مُكيّف فارغة على جهاز meta. مفيد لتسريع عملية التحميل.> لا تستخدم
low_cpu_mem_usage=Trueعند إنشاء مُكيّف PEFT جديد للتدريب.
النموذج الأساسي الذي يشمل طرق Peft المختلفة.
الخصائص:
- base_model (
torch.nn.Module) — نموذج التحويل الأساسي المستخدم في Peft. - peft_config (PeftConfig) — إعدادات نموذج Peft.
- modules_to_save (
listofstr) — قائمة أسماء الوحدات الفرعية التي يجب حفظها عند حفظ النموذج. - prompt_encoder (PromptEncoder) — مُشفِّر المُوجِّه المستخدم مع Peft عند استخدام PromptLearningConfig.
- prompt_tokens (
torch.Tensor) — رموز المحفّز الافتراضية المستخدمة في Peft عند استخدام PromptLearningConfig. - transformer_backbone_name (
str) — اسم العمود الفقري للترانسفورمر في النموذج الأساسي عند استخدام PromptLearningConfig. - word_embeddings (
torch.nn.Embedding) — تمثيلات الكلمات في العمود الفقري للحوّال في النموذج الأساسي عند استخدام PromptLearningConfig.
add_adapter
< source >( adapter_name: strpeft_config: PeftConfiglow_cpu_mem_usage: bool = Falseautocast_adapter_dtype: bool = True )
المعاملات
- adapter_name (
str) — اسم المُكيّف الذي سيُضاف. - peft_config (PeftConfig) — إعدادات المُكيّف الذي سيُضاف.
- low_cpu_mem_usage (
bool,optional, الافتراضيFalse) — إنشاء أوزان مُكيّف فارغة على جهاز meta. مفيد لتسريع العملية عند تحميل المُكيّفات المحفوظة. لا تستخدم هذا الخيار عند إنشاء مُكيّف PEFT جديد للتدريب. - autocast_adapter_dtype (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلا إلى تحويل أوزان المُكيّف باستخدام float16 و bfloat16 إلى float32، حيث يُعد هذا مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على مُكيّفات PEFT المحددة. إذا تم ضبطه علىFalse، فستبقى أنواع البيانات كما هي، مطابقةً لتلك الخاصة بالطبقة المقابلة.
أضِف مُكيِّفًا إلى النموذج بناءً على الإعداد المُمرَّر.
هذا المُكيّف غير مُدرَّب. لتحميل مُكيّف مُدرَّب، راجع PeftModel.load_adapter().
يجب أن يكون اسم المُكيّف الجديد فريدًا.
لا يتم تعيين المُكيّف الجديد كمُكيّف نشط تلقائيًا. استخدم PeftModel.set_adapter() لتعيين المُكيّف النشط.
حدّث بطاقة النموذج أو أنشئها لتضمين معلومات حول peft:
- يضيف وسم مكتبة
peft - يضيف إصدار peft
- يضيف معلومات النموذج الأساسي
- يضيف معلومات التكميم إذا تم استخدامه
delete_adapter
< source >( adapter_name: str )
يحذف مُكيّفًا موجودًا.
مدير سياق يُعطّل وحدة المُكيّف. استخدم هذا لتشغيل الاستدلال على النموذج الأساسي.
المرور الأمامي للنموذج.
from_pretrained
< source >( model: torch.nn.Modulemodel_id: Union[str, os.PathLike]adapter_name: str = 'default'is_trainable: bool = Falseconfig: Optional[PeftConfig] = Noneautocast_adapter_dtype: bool = Trueephemeral_gpu_offload: bool = Falselow_cpu_mem_usage: bool = Falsekey_mapping: Optional[dict[str, str]] = None**kwargs: Any )
المعاملات
- model (
torch.nn.Module) — النموذج الذي سيتم تكييفه. بالنسبة لنماذج 🤗 Transformers، يجب تهيئة النموذج باستخدام from_pretrained. - model_id (
strأوos.PathLike) — اسم إعداد PEFT الذي سيتم استخدامه. يمكن أن يكون:- سلسلة نصية، وهي
model idلإعداد PEFT مستضاف داخل مستودع نموذج على Hugging Face Hub. - مسار إلى مجلد يحتوي على ملف إعدادات PEFT تم حفظه باستخدام طريقة
save_pretrained(./my_peft_config_directory/).
- سلسلة نصية، وهي
- adapter_name (
str، اختياري، القيمة الافتراضية"default") — اسم المُكيّف الذي سيتم تحميله. هذا مفيد لتحميل عدة مُكيّفات. - is_trainable (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب أن يكون المُكيّف قابلًا للتدريب أم لا. إذا كانت القيمةFalse، فسيتم تجميد المُكيّف ولن يمكن استخدامه إلا للاستدلال. - config (PeftConfig، اختياري) —
كائن التهيئة الذي يُستخدم بدلاً من التهيئة المحمّلة تلقائياً. هذا الكائن متنافٍ مع
model_idوkwargs. يكون هذا مفيداً عندما تكون التهيئة قد حُمّلت مسبقاً قبل استدعاءfrom_pretrained. - autocast_adapter_dtype (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلا إلى تحويل أوزان المُكيّف باستخدام float16 و bfloat16 إلى float32، حيث يُعد هذا مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على مُكيّفات PEFT المحددة. إذا تم ضبطه علىFalse، فستبقى أنواع البيانات كما هي، مطابقةً لتلك الخاصة بالطبقة المقابلة. - ephemeral_gpu_offload (
bool, اختياري) — ما إذا كان سيتم استخدام إزاحة GPU المؤقتة للوحدات المحمّلة جزئيًا. القيمة الافتراضية هيFalse. يكون هذا مفيدًا عندما تُبقي أجزاء من النموذج و/أو مكوّناته (مثل المحوِّلات) في ذاكرة المعالج المركزي حتى تصبح مطلوبة. وبدلًا من تنفيذ عمليات مكلفة على بيانات صغيرة، تُنقل البيانات إلى وحدة معالجة الرسوميات عند الطلب، ثم تُنفَّذ العملية/العمليات، وتُعاد النتائج إلى ذاكرة المعالج المركزي. يؤدي هذا إلى زيادة طفيفة ومؤقتة في استهلاك ذاكرة VRAM، لكنه يمنح تسريعًا بمقدار مرات في حالات معينة. - low_cpu_mem_usage (
bool,optional, defaults toFalse) — إنشاء أوزان المُكيّف فارغة على جهاز meta قبل تحميل الأوزان المحفوظة. مفيد لتسريع العملية. - key_mapping (dict، اختياري، القيمة الافتراضية None) —
خريطة إضافية لمفاتيح
state_dictالخاصة بـ PEFT تُطبَّق قبل تحميلstate_dict. عند تطبيق هذه الخريطة، يُزال البادئة الخاصة بـ PEFT"base_model.model"مسبقًا ولا يُدرج اسم المُكيِّف (مثل"default") بعد. لا تمرر هذا الحجة إلا إذا كنت تعرف ما تفعله. - kwargs — (
optional): Additional keyword arguments passed along to the specific PEFT configuration class. This includestorch_device(str, optional): the device to load the adapter on (forwarded toload_adapter[PeftModel.load_adapter]); ifNone, the device will be inferred.
أنشئ نموذج PEFT من نموذج مُدرَّب مسبقًا وأوزان PEFT محمّلة.
لاحظ أن model المُمرَّر قد يتم تعديله في مكانه.
يعيد النموذج الأساسي.
get_layer_status
< source >( ) → listpeft.peft_model.TunerLayerStatus
يعيد
listpeft.peft_model.TunerLayerStatus
قائمة من كائنات dataclass، يحتوي كل منها على حالة طبقة المحوّل (adapter) المقابلة.
احصل على حالة كل طبقة مُكيّف في النموذج.
تعيد هذه الطريقة قائمة من كائنات فئة البيانات TunerLayerStatus، يحتوي كل منها على السمات التالية:
name(str): اسم طبقة المُكيّف، مثلmodel.encoder.block.0.layer.0.SelfAttention.q.module_type(str): نوع طبقة المُكيّف، مثلlora.Linear.enabled(bool): ما إذا كان طبقة المُكيّف مفعّلة.active_adapters(list[str]): أسماء المُكيِّفات النشطة، إن وُجدت، مثل["default"].merged_adapters(list[str]): أسماء المُدمِجات المُدمَجة، إن وُجدت، مثل["default"].available_adapters(list[str]): أسماء المُكيِّفات المتاحة، مثل["default"].quantization_backend(strأوNone): اسم وحدة معالجة التكميم، مثل"bnb 4bit"، أوNoneإذا لم يتم التكميم.
get_model_status
< source >( ) → peft.peft_model.TunerModelStatus
يعيد
peft.peft_model.TunerModelStatus
فئة بيانات تحتوي على حالة النموذج.
احصل على حالة مُعدِّلات النموذج.
تعيد هذه الطريقة كائنًا من فئة البيانات TunerModelStatus، والذي يحتوي على السمات التالية:
base_model_type(str): نوع النموذج الأساسي، مثلT5Model.adapter_model_type(str): نوع نموذج المُكيّف، مثلLoraModel.peft_types(dict[str, str]): خريطة من اسم المُكيّف إلى نوع المُكيّف، على سبيل المثال{"default": "LORA"}.trainable_params(int): عدد المعاملات القابلة للتدريب في النموذج.total_params(int): إجمالي عدد المعاملات في النموذج.num_adapter_layers(int): عدد طبقات المحوّل في النموذج.enabled(bool,Literal["irregular"]): ما إذا كانت جميع طبقات المُكيِّف مفعّلة. إذا كانت بعض الطبقات مفعّلة وبعضها الآخر غير مفعّل، فسيكون هذا"irregular". هذا يعني أن نموذجك في حالة غير متسقة وقد لا يعمل كما هو متوقع.active_adapters(list[str],Literal["irregular"]): أسماء المُكيِّفات النشطة. إذا لم تكن المُكيِّفات النشطة متسقة عبر جميع الطبقات، فسيكون هذا"irregular"، مما يعني أن نموذجك في حالة غير متسقة وقد لا يعمل كما هو متوقع.merged_adapters(list[str],Literal["irregular"]): أسماء المُدمِجات المُدمَجة. إذا لم تكن المُدمِجات المُدمَجة متسقة عبر جميع الطبقات، فسيكون هذا"irregular"، مما يعني أن نموذجك في حالة غير متسقة وقد لا يعمل كما هو متوقع.available_adapters(list[str]): أسماء المُكيِّفات المتاحة، مثل["default"].quantization_backend(str,None,Literal["irregular"]): اسم واجهة التكميم، مثل"bnb 4bit"، أوNoneإذا لم يتم التكميم. إذا لم تكن الواجهة متسقة عبر جميع الطبقات، فسيكون"irregular".
يعيد عدد المعاملات القابلة للتدريب وعدد جميع المعاملات في النموذج.
get_prompt
< source >( batch_size: inttask_ids: Optional[torch.Tensor] = Nonemax_cache_len: Optional[int] = None )
يعيد التلميحات الافتراضية المستخدمة في Peft. لا ينطبق إلا عند استخدام طريقة تعلّم التلميحات.
يعيد تضمين الموجه (prompt embedding) الذي يجب حفظه عند حفظ النموذج. ينطبق هذا فقط عند استخدام طريقة تعلّم الموجه (prompt learning).
فحص الحالة
< source >( min_trainable_params: int = 1max_trainable_params_percent = 50 )
المعاملات
- min_trainable_params (
int، اختياري، الافتراضي=1) — الحد الأدنى المتوقع لعدد المعاملات. إذا تم العثور على عدد أقل من ذلك، يُبلَّغ عن ذلك على أنه خطأ. - max_trainable_params_percent (
int، اختياري، الافتراضي=50) — النسبة المئوية القصوى للمعاملات التي يجب أن تكون قابلة للتدريب. إذا تم العثور على عدد أكبر من ذلك، يتم الإبلاغ عن ذلك كتحذير.
تحقق من هذا النموذج بحثًا عن حالات مُكيِّفات (adapter states) مشبوهة قبل التدريب.
تلخّص هذه الدوال واجهات برمجة التطبيقات (APIs) الخاصة بحالة النموذج والطبقات، وتشمل النتائج المتعلقة بحالة المُكيِّف (adapter) غير المتسقة، والمُكيِّفات المدمجة، وأعداد المعاملات القابلة للتدريب غير المعقولة. ولا تتحقق هذه الدوال من حلقة التدريب، أو المُحسِّن (optimizer)، أو مجموعة البيانات. سيُبلَّغ عن الحالة بأنها "irregular" إذا وُجدت عدم اتساقات في النموذج، على سبيل المثال عندما تكون بعض الطبقات مفعَّلة وبعضها معطَّلاً لنفس المُكيِّف. وهذا يعني في الغالب أن شيئاً ما لم يسر على ما يُرام، ويجب عليك التحقق من أنك لم تُغيّر بعض السمات على النموذج بشكل خاطئ عن طريق الخطأ.
إذا اكتشف الفحص شيئاً مشبوهاً، فسيتم الإبلاغ عنه في حقل "findings". قائمة "findings"" فارغة تعني أنه لم يتم رصد حالة مُكيّف مشبوهة، وليس أن تشغيل التدريب مضمون النجاح.
load_adapter
< source >( model_id: Union[str, os.PathLike]adapter_name: stris_trainable: bool = Falsetorch_device: Optional[str] = Noneautocast_adapter_dtype: bool = Trueephemeral_gpu_offload: bool = Falselow_cpu_mem_usage: bool = Falsekey_mapping: Optional[dict[str, str]] = None**kwargs: Any )
المعاملات
- model_id (
strأوos.PathLike) — اسم إعداد PEFT الذي سيتم استخدامه. يمكن أن يكون:- سلسلة نصية، وهي
model idلإعداد PEFT مستضاف داخل مستودع نموذج على Hugging Face Hub. - مسار إلى مجلد يحتوي على ملف إعدادات PEFT تم حفظه باستخدام طريقة
save_pretrained(./my_peft_config_directory/).
- سلسلة نصية، وهي
- adapter_name (
str) — اسم المُكيّف الذي سيُضاف. - is_trainable (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب أن يكون المُكيّف قابلًا للتدريب أم لا. إذا كانت القيمةFalse، فسيتم تجميد المُكيّف ولن يمكن استخدامه إلا للاستدلال. - torch_device (
str، اختياري، القيمة الافتراضية هي None) — الجهاز الذي سيتم تحميل المُكيّف عليه. إذا كانتNone، فسيتم استنتاج الجهاز. - autocast_adapter_dtype (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلا إلى تحويل أوزان المُكيّف باستخدام float16 و bfloat16 إلى float32، حيث يُعد هذا مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على مُكيّفات PEFT المحددة. إذا تم ضبطه علىFalse، فستبقى أنواع البيانات كما هي، مطابقةً لتلك الخاصة بالطبقة المقابلة. - ephemeral_gpu_offload (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام إزاحة GPU المؤقتة للوحدات المحمّلة جزئيًا. القيمة الافتراضية هيFalse. - low_cpu_mem_usage (
bool,optional, defaults toFalse) — إنشاء أوزان المُكيّف فارغة على جهاز meta قبل تحميل الأوزان المحفوظة. مفيد لتسريع العملية. - key_mapping (dict، اختياري، القيمة الافتراضية None) —
خريطة إضافية لمفاتيح
state_dictالخاصة بـ PEFT تُطبَّق قبل تحميلstate_dict. عند تطبيق هذه الخريطة، يُزال البادئة الخاصة بـ PEFT"base_model.model"مسبقًا ولا يُدرج اسم المُكيِّف (مثل"default") بعد. لا تمرر هذا الحجة إلا إذا كنت تعرف ما تفعله. - kwargs — (
optional): Additional arguments to modify the way the adapter is loaded, e.g. the token for Hugging Face Hub.
حمّل مُكيّفًا مُدرَّبًا في النموذج.
يجب أن يكون اسم المُكيّف الجديد فريدًا.
لا يتم تعيين المُكيّف الجديد كمُكيّف نشط تلقائيًا. استخدم PeftModel.set_adapter() لتعيين المُكيّف النشط.
يُعدّ النموذج لفحص التدرّج عند الحاجة
ملاحظة: في إصدارات Transformers الأحدث، يُطلق على هذا المصطلح اسم ‘activation checkpointing’.
print_healthcheck
< source >( sink = <built-in function print>min_trainable_params: int = 1max_trainable_params_percent = 50**kwargs )
المعاملات
- sink (
callable، اختياري، الافتراضي=print) — الدالة التي تُستدعى لطباعة المخرجات. افتراضيًا، هي الدالة المدمجةprint، لكن يمكن أن تكون شيئًا آخر مثلlogger.info. - min_trainable_params (
int، اختياري، الافتراضي=1) — الحد الأدنى المتوقع لعدد المعاملات. إذا تم العثور على عدد أقل من ذلك، يُبلَّغ عن ذلك على أنه خطأ. - max_trainable_params_percent (
int، اختياري، الافتراضي=50) — النسبة المئوية القصوى للمعاملات التي يجب أن تكون قابلة للتدريب. إذا تم العثور على عدد أكبر من ذلك، يتم الإبلاغ عن ذلك كتحذير. - kwargs —
تُمرَّر حُجج الكلمات المفتاحية الإضافية إلى
format_healthcheck.
اطبع تقرير فحص صحة مضغوطًا وقابلًا للقراءة من قِبل البشر.
تلخّص المخرجات حالة نموذج PEFT الخاص بك وتشمل نتائج تتعلق بحالة المُكيّفات غير المتسقة، والمُكيّفات المدمجة، وأعداد المعاملات القابلة للتدريب غير المعقولة. ولا يتحقق هذا الإجراء من حلقة التدريب أو المُحسِّن أو مجموعة البيانات. سيُبلَّغ عن الحالة على أنها "irregular" إذا وُجدت عدم اتساقات في النموذج، على سبيل المثال عندما تكون بعض الطبقات مفعّلة وبعضها معطّلًا لنفس المُكيّف. وهذا يعني في الغالب أن شيئًا ما حدث بشكل خاطئ، ويجب عليك التحقق من أنك لم تُغيّر بعض السمات على النموذج بشكل غير صحيح عن طريق الخطأ.
إذا تم اكتشاف مشكلات، فستظهر في القسم الأخير تحت “findings”. وإذا لم يتم اكتشاف أي مشكلات، فلا يعني ذلك أن تشغيل التدريب مضمون النجاح.
يطبع عدد المعاملات القابلة للتدريب في النموذج.
ملاحظة: يستخدم print_trainable_parameters() الدالة get_nb_trainable_parameters() وهي مختلفة عن num_parameters(only_trainable=True) من huggingface/transformers. تُرجع get_nb_trainable_parameters() (المعاملات القابلة للتدريب، جميع المعاملات) لنموذج Peft الذي يتضمن نموذج transformer الأساسي المُعدَّل. ففي تقنيات مثل LoRA، يتم تعديل نموذج transformer الأساسي في مكانه باستخدام وحدات LoRA. ومع ذلك، في حالة ضبط الموجه (prompt tuning)، يبقى نموذج transformer الأساسي دون تعديل. تُرجع num_parameters(only_trainable=True) عدد المعاملات القابلة للتدريب في نموذج transformer الأساسي، وقد يختلف هذا العدد.
save_pretrained
< source >( save_directory: strsafe_serialization: bool = Trueselected_adapters: Optional[list[str]] = Nonesave_embedding_layers: Union[str, bool] = 'auto'is_main_process: bool = Truepath_initial_model_for_weight_conversion: Optional[str] = None**kwargs: Any )
المعاملات
- save_directory (
str) — المجلد الذي سيتم حفظ ملفات النموذج المُكيّف (adapter) والإعدادات فيه (سيتم إنشاؤه إذا لم يكن موجودًا). - safe_serialization (
bool، اختياري) — ما إذا كان سيتم حفظ ملفات المحوّل (adapter) بتنسيق safetensors، والافتراضي هوTrue. - selected_adapters (
List[str]، اختياري) — قائمة بالمُكيِّفات التي سيتم حفظها. إذا كانتNone، فسيتم افتراض جميع المُكيِّفات. - save_embedding_layers (
Union[bool, str], اختياري، القيمة الافتراضية"auto") — إذا كانتTrue، يتم حفظ طبقات التضمين بالإضافة إلى أوزان المحوّل. إذا كانتauto، يتم فحص طبقات التضمين الشائعةpeft.utils.other.EMBEDDING_LAYER_NAMESفيtarget_modulesالخاص بالإعدادات عند توفرها، وإعداد العلم المنطقي تلقائيًا. يعمل هذا فقط مع نماذج 🤗 transformers. - is_main_process (
bool، اختياري) — ما إذا كان العملية التي تستدعي هذا هي العملية الرئيسية أم لا. سيكون الافتراضيTrue. لن يتم حفظ نقطة التفتيش إذا لم تكن على العملية الرئيسية، وهو أمر مهم لإعدادات الأجهزة المتعددة (مثل DDP). - path_initial_model_for_weight_conversion (
str، اختياري) — المسار إلى المُكيّف المُهيّأ، والذي يُحصل عليه بعد تهيئة النموذج باستخدام PiSSA/CorDA/OLoRA وقبل إجراء أي تدريب. عندما لا يكونpath_initial_model_for_weight_conversionمساوياً لـ None، يتم حساب الفرق في المُكيّف قبل وبعد الضبط الدقيق. يمكن تمثيل هذا الفرق على أنه معاملات مُكيّف LoRA قياسي. على عكس PiSSA وما شابه، لا يتطلب استخدام هذا المُكيّف المُحوّل إجراء تغييرات على النموذج الأساسي، مما يتيح بيسر استخدام عدة مُكيّفات PiSSA/CorDA/OLoRA مع مُكيّفات LoRA، وتفعيل أو تعطيل أي من المُكيّفات. يُرجى ملاحظة أن هذا التحويل غير مدعوم إذا تم استخدامrsloraبالاقتران معrank_patternأوalpha_pattern. راجع peft.tuners.lora.LoraModel.subtract_mutated_init() لمزيد من المعلومات. - kwargs (معلمات إضافية بالكلمة المفتاحية، اختيارية) —
معلمات إضافية بالكلمة المفتاحية تُمرَّر إلى طريقة
push_to_hub.
تُحفظ بواسطة هذه الدالة نموذج المُكيّف وملفات إعداداته في مجلد، بحيث يمكن إعادة تحميله باستخدام طريقة الفئة PeftModel.from_pretrained()، كما يمكن استخدامه بواسطة الطريقة PeftModel.push_to_hub().
set_adapter
< source >( adapter_name: strinference_mode: bool = False )
يحدد المُكيّف النشط.
لا يمكن تفعيل مُكيّف واحد فقط في كل مرة، لأنّ جميع طرق PEFT لا تدعم وجود عدة مُكيّفات نشطة في آنٍ واحد. لتفعيل عدة مُكيّفات في الطرق المدعومة، استخدم model.base_model.set_adapter(adapter_names).
بالإضافة إلى ذلك، ستقوم هذه الدالة بجعل المُكيّف المحدد قابلًا للتدريب (أي requires_grad=True) ما لم يكن inference_mode بقيمة True.
set_requires_grad
< source >( adapter_names: str | Sequence[str]requires_grad: bool = True )
تفعيل أو تعطيل التدرجات على المُكيِّف (المُكيِّفات) المُحدَّد.
ملاحظة: غير مدعوم لطرق تعلم الموجهات مثل ضبط الموجهات.
ما إذا كان من الممكن تحويل مُكيّف هذا النموذج إلى LoRA.
عادةً، يعمل هذا إذا كانت طريقة PEFT إضافية، أي W’ = W_base + delta_weight.
PeftModelForSequenceClassification
نموذج PeftModel لمهام تصنيف التسلسلات.
فئة peft.PeftModelForSequenceClassification
< source >( model: torch.nn.Modulepeft_config: PeftConfigadapter_name: str = 'default'**kwargs )
المعاملات
- model (PreTrainedModel) — نموذج التحويل الأساسي.
- peft_config (PeftConfig) — إعدادات Peft.
- adapter_name (
str، اختياري) — اسم المُكيّف، القيمة الافتراضية هي"default". - autocast_adapter_dtype (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلا إلى تحويل أوزان المُكيّف المُعرَّفة بنوعَي float16 وbfloat16 إلى float32، إذ يُعد ذلك مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على بعض مُكيّفات PEFT. إذا تم ضبطه علىFalse، فستبقى أنواع البيانات كما هي، مطابقةً لأنواع البيانات للطبقة المقابلة.
نموذج Peft لمهام تصنيف التسلسلات.
الخصائص:
- config (
PretrainedConfig) — كائن التهيئة للنموذج الأساسي. - cls_layer_name (
str) — اسم طبقة التصنيف.
مثال:
>>> from transformers import AutoModelForSequenceClassification
>>> from peft import PeftModelForSequenceClassification, get_peft_config
>>> config = {
... "peft_type": "PREFIX_TUNING",
... "task_type": "SEQ_CLS",
... "inference_mode": False,
... "num_virtual_tokens": 20,
... "token_dim": 768,
... "num_transformer_submodules": 1,
... "num_attention_heads": 12,
... "num_layers": 12,
... "encoder_hidden_size": 768,
... "prefix_projection": False,
... }
>>> peft_config = get_peft_config(config)
>>> model = AutoModelForSequenceClassification.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForSequenceClassification(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 370178 || all params: 108680450 || trainable%: 0.3406113979101117PeftModelForTokenClassification
نموذج PeftModel لمهام تصنيف الرموز.
فئة peft.PeftModelForTokenClassification
< source >( model: torch.nn.Modulepeft_config: PeftConfig = Noneadapter_name: str = 'default'**kwargs )
المعاملات
- model (PreTrainedModel) — نموذج التحويل الأساسي.
- peft_config (PeftConfig) — إعدادات Peft.
- adapter_name (
str، اختياري) — اسم المُكيّف، القيمة الافتراضية هي"default". - autocast_adapter_dtype (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلا إلى تحويل أوزان المُكيّف المُعرَّفة بنوعَي float16 وbfloat16 إلى float32، إذ يُعد ذلك مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على بعض مُكيّفات PEFT. إذا تم ضبطه علىFalse، فستبقى أنواع البيانات كما هي، مطابقةً لأنواع البيانات للطبقة المقابلة.
نموذج Peft لمهام تصنيف الرموز.
الخصائص:
- config (
PretrainedConfig) — كائن التهيئة للنموذج الأساسي. - cls_layer_name (
str) — اسم طبقة التصنيف.
مثال:
>>> from transformers import AutoModelForTokenClassification
>>> from peft import PeftModelForTokenClassification, get_peft_config
>>> config = {
... "peft_type": "PREFIX_TUNING",
... "task_type": "TOKEN_CLS",
... "inference_mode": False,
... "num_virtual_tokens": 20,
... "token_dim": 768,
... "num_transformer_submodules": 1,
... "num_attention_heads": 12,
... "num_layers": 12,
... "encoder_hidden_size": 768,
... "prefix_projection": False,
... }
>>> peft_config = get_peft_config(config)
>>> model = AutoModelForTokenClassification.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForTokenClassification(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 370178 || all params: 108680450 || trainable%: 0.3406113979101117add_adapter
< source >( adapter_name: strpeft_config: PeftConfiglow_cpu_mem_usage: bool = Falseautocast_adapter_dtype: bool = True )
المعاملات
- adapter_name (
str) — اسم المُكيّف الذي سيُضاف. - peft_config (PeftConfig) — إعدادات المُكيّف الذي سيُضاف.
- low_cpu_mem_usage (
bool,optional, الافتراضيFalse) — إنشاء أوزان مُكيّف فارغة على جهاز meta. مفيد لتسريع العملية عند تحميل المُكيّفات المحفوظة. لا تستخدم هذا الخيار عند إنشاء مُكيّف PEFT جديد للتدريب. - autocast_adapter_dtype (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلا إلى تحويل أوزان المُكيّف باستخدام float16 و bfloat16 إلى float32، حيث يُعد هذا مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على مُكيّفات PEFT المحددة. إذا تم ضبطه علىFalse، فستبقى أنواع البيانات كما هي، مطابقةً لتلك الخاصة بالطبقة المقابلة.
أضِف مُكيِّفًا إلى النموذج بناءً على الإعداد المُمرَّر.
هذا المُكيّف غير مُدرَّب. لتحميل مُكيّف مُدرَّب، راجع PeftModel.load_adapter().
يجب أن يكون اسم المُكيّف الجديد فريدًا.
لا يتم تعيين المُكيّف الجديد كمُكيّف نشط تلقائيًا. استخدم PeftModel.set_adapter() لتعيين المُكيّف النشط.
PeftModelForCausalLM
نموذج PeftModel لنمذجة اللغة السببية.
فئة peft.PeftModelForCausalLM
< source >( model: torch.nn.Modulepeft_config: PeftConfigadapter_name: str = 'default'**kwargs )
المعاملات
- model (PreTrainedModel) — نموذج التحويل الأساسي.
- peft_config (PeftConfig) — إعدادات Peft.
- adapter_name (
str، اختياري) — اسم المُكيّف، القيمة الافتراضية هي"default". - autocast_adapter_dtype (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلا إلى تحويل أوزان المُكيّف المُعرَّفة بنوعَي float16 وbfloat16 إلى float32، إذ يُعد ذلك مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على بعض مُكيّفات PEFT. إذا تم ضبطه علىFalse، فستبقى أنواع البيانات كما هي، مطابقةً لأنواع البيانات للطبقة المقابلة.
نموذج Peft لنمذجة اللغة السببية.
مثال:
>>> from transformers import AutoModelForCausalLM
>>> from peft import PeftModelForCausalLM, get_peft_config
>>> config = {
... "peft_type": "PREFIX_TUNING",
... "task_type": "CAUSAL_LM",
... "inference_mode": False,
... "num_virtual_tokens": 20,
... "token_dim": 1280,
... "num_transformer_submodules": 1,
... "num_attention_heads": 20,
... "num_layers": 36,
... "encoder_hidden_size": 1280,
... "prefix_projection": False,
... }
>>> peft_config = get_peft_config(config)
>>> model = AutoModelForCausalLM.from_pretrained("gpt2-large")
>>> peft_model = PeftModelForCausalLM(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 1843200 || all params: 775873280 || trainable%: 0.23756456724479544PeftModelForSeq2SeqLM
نموذج PeftModel لنمذجة اللغة من تسلسل إلى تسلسل.
ملاحظة: سيؤدي هذا إلى توليد رموز مدخلات المُفكِّك تلقائيًا عن طريق إزاحة رموز المدخلات خطوة إلى اليمين باستخدام shift_tokens_right() إذا قمت بتوفير رموز المدخلات دون توفير رموز مدخلات المُفكِّك صراحةً.
فئة peft.PeftModelForSeq2SeqLM
< source >( model: torch.nn.Modulepeft_config: PeftConfigadapter_name: str = 'default'**kwargs )
المعاملات
- model (PreTrainedModel) — نموذج التحويل الأساسي.
- peft_config (PeftConfig) — إعدادات Peft.
- adapter_name (
str، اختياري) — اسم المُكيّف، القيمة الافتراضية هي"default". - autocast_adapter_dtype (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلا إلى تحويل أوزان المُكيّف المُعرَّفة بنوعَي float16 وbfloat16 إلى float32، إذ يُعد ذلك مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على بعض مُكيّفات PEFT. إذا تم ضبطه علىFalse، فستبقى أنواع البيانات كما هي، مطابقةً لأنواع البيانات للطبقة المقابلة.
نموذج Peft لنمذجة اللغة من تسلسل إلى تسلسل.
مثال:
>>> from transformers import AutoModelForSeq2SeqLM
>>> from peft import PeftModelForSeq2SeqLM, get_peft_config
>>> config = {
... "peft_type": "LORA",
... "task_type": "SEQ_2_SEQ_LM",
... "inference_mode": False,
... "r": 8,
... "target_modules": ["q", "v"],
... "lora_alpha": 32,
... "lora_dropout": 0.1,
... "fan_in_fan_out": False,
... "bias": "none",
... }
>>> peft_config = get_peft_config(config)
>>> model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")
>>> peft_model = PeftModelForSeq2SeqLM(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 884736 || all params: 223843584 || trainable%: 0.3952474242013566PeftModelForQuestionAnswering
نموذج PeftModel للإجابة على الأسئلة.
فئة peft.PeftModelForQuestionAnswering
< source >( model: torch.nn.Modulepeft_config: PeftConfigadapter_name: str = 'default'**kwargs )
المعاملات
- model (PreTrainedModel) — نموذج التحويل الأساسي.
- peft_config (PeftConfig) — إعدادات Peft.
- adapter_name (
str، اختياري) — اسم المُكيّف، القيمة الافتراضية هي"default". - autocast_adapter_dtype (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلا إلى تحويل أوزان المُكيّف المُعرَّفة بنوعَي float16 وbfloat16 إلى float32، إذ يُعد ذلك مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على بعض مُكيّفات PEFT. إذا تم ضبطه علىFalse، فستبقى أنواع البيانات كما هي، مطابقةً لأنواع البيانات للطبقة المقابلة.
نموذج Peft للإجابة الاستخراجية على الأسئلة.
الخصائص:
- config (
PretrainedConfig) — كائن التهيئة للنموذج الأساسي. - cls_layer_name (
str) — اسم طبقة التصنيف.
مثال:
>>> from transformers import AutoModelForQuestionAnswering
>>> from peft import PeftModelForQuestionAnswering, get_peft_config
>>> config = {
... "peft_type": "LORA",
... "task_type": "QUESTION_ANS",
... "inference_mode": False,
... "r": 16,
... "target_modules": ["query", "value"],
... "lora_alpha": 32,
... "lora_dropout": 0.05,
... "fan_in_fan_out": False,
... "bias": "none",
... }
>>> peft_config = get_peft_config(config)
>>> model = AutoModelForQuestionAnswering.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForQuestionAnswering(model, peft_config)
>>> peft_model.print_trainable_parameters()
trainable params: 592900 || all params: 108312580 || trainable%: 0.5473971721475013add_adapter
< source >( adapter_name: strpeft_config: PeftConfiglow_cpu_mem_usage: bool = Falseautocast_adapter_dtype: bool = True )
المعاملات
- adapter_name (
str) — اسم المُكيّف الذي سيُضاف. - peft_config (PeftConfig) — إعدادات المُكيّف الذي سيُضاف.
- low_cpu_mem_usage (
bool,optional, الافتراضيFalse) — إنشاء أوزان مُكيّف فارغة على جهاز meta. مفيد لتسريع العملية عند تحميل المُكيّفات المحفوظة. لا تستخدم هذا الخيار عند إنشاء مُكيّف PEFT جديد للتدريب. - autocast_adapter_dtype (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلا إلى تحويل أوزان المُكيّف باستخدام float16 و bfloat16 إلى float32، حيث يُعد هذا مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على مُكيّفات PEFT المحددة. إذا تم ضبطه علىFalse، فستبقى أنواع البيانات كما هي، مطابقةً لتلك الخاصة بالطبقة المقابلة.
أضِف مُكيِّفًا إلى النموذج بناءً على الإعداد المُمرَّر.
هذا المُكيّف غير مُدرَّب. لتحميل مُكيّف مُدرَّب، راجع PeftModel.load_adapter().
يجب أن يكون اسم المُكيّف الجديد فريدًا.
لا يتم تعيين المُكيّف الجديد كمُكيّف نشط تلقائيًا. استخدم PeftModel.set_adapter() لتعيين المُكيّف النشط.
PeftModelForFeatureExtraction
نموذج PeftModel لاستخراج الميزات/التضمينات من نماذج التحويل.
فئة peft.PeftModelForFeatureExtraction
< source >( model: torch.nn.Modulepeft_config: PeftConfigadapter_name: str = 'default'**kwargs )
المعاملات
- model (PreTrainedModel) — نموذج التحويل الأساسي.
- peft_config (PeftConfig) — إعدادات Peft.
- adapter_name (
str، اختياري) — اسم المُكيّف، القيمة الافتراضية هي"default". - autocast_adapter_dtype (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلا إلى تحويل أوزان المُكيّف المُعرَّفة بنوعَي float16 وbfloat16 إلى float32، إذ يُعد ذلك مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على بعض مُكيّفات PEFT. إذا تم ضبطه علىFalse، فستبقى أنواع البيانات كما هي، مطابقةً لأنواع البيانات للطبقة المقابلة.
نموذج Peft لاستخراج الميزات/التضمينات من نماذج التحويل
الخصائص:
- config (
PretrainedConfig) — كائن التهيئة للنموذج الأساسي.
مثال:
>>> from transformers import AutoModel
>>> from peft import PeftModelForFeatureExtraction, get_peft_config
>>> config = {
... "peft_type": "LORA",
... "task_type": "FEATURE_EXTRACTION",
... "inference_mode": False,
... "r": 16,
... "target_modules": ["query", "value"],
... "lora_alpha": 32,
... "lora_dropout": 0.05,
... "fan_in_fan_out": False,
... "bias": "none",
... }
>>> peft_config = get_peft_config(config)
>>> model = AutoModel.from_pretrained("bert-base-cased")
>>> peft_model = PeftModelForFeatureExtraction(model, peft_config)
>>> peft_model.print_trainable_parameters()PeftMixedModel
نموذج PeftModel لخلط أنواع مختلفة من المكيّفات (مثل LoRA وLoHa).
فئة peft.PeftMixedModel
< source >( model: nn.Modulepeft_config: PeftConfigadapter_name: str = 'default' )
المعاملات
- model (
torch.nn.Module) — النموذج الذي سيتم ضبطه. - config (
PeftConfig) — إعدادات النموذج المراد ضبطه. يجب أن يكون نوع المُكيّف متوافقًا. - adapter_name (
str،optional، الافتراضي"default") — اسم المكيّف الأول. - low_cpu_mem_usage (
bool,optional, defaults toFalse) — إنشاء أوزان مُكيّف فارغة على جهاز meta. مفيد لتسريع عملية التحميل.
PeftMixedModel لتحميل مزيج من أنواع مختلفة من المحوِّلات للاستدلال.
لا تدعم هذه الفئة التحميل/الحفظ، ولا ينبغي عادةً تهيئتها مباشرة. بدلاً من ذلك، استخدم get_peft_model مع الحجة mixed=True.
> اقرأ دليل أنواع المحوِّلات المختلطة لمعرفة المزيد حول استخدام أنواع مختلفة من المحوِّلات.
مثال:
>>> base_model = ... # load the base model, e.g. from transformers
>>> peft_model = PeftMixedModel.from_pretrained(base_model, path_to_adapter1, "adapter1").eval()
>>> peft_model.load_adapter(path_to_adapter2, "adapter2")
>>> peft_model.set_adapter(["adapter1", "adapter2"]) # activate both adapters
>>> peft_model(data) # forward pass using both adaptersadd_adapter
< source >( adapter_name: strpeft_config: PeftConfiglow_cpu_mem_usage: bool = Falseautocast_adapter_dtype: bool = True )
المعاملات
- adapter_name (
str) — اسم المُكيّف الذي سيُضاف. - peft_config (PeftConfig) — إعدادات المُكيّف الذي سيُضاف.
- low_cpu_mem_usage (
bool,optional, القيمة الافتراضية هيFalse) — إنشاء أوزان مُكيّف فارغة على جهاز meta. مفيد لتسريع العملية عند تحميل المُكيّفات المحفوظة.> لا تستخدم
low_cpu_mem_usage=Trueعند إنشاء مُكيّف PEFT جديد للتدريب (التدريب غير مُختبَر > وغير مُستحسَن بشكل عام لنموذج PeftMixedModel). - autocast_adapter_dtype (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلا إلى تحويل أوزان المُكيّف باستخدام float16 و bfloat16 إلى float32، حيث يُعد هذا مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على مُكيّفات PEFT المحددة. إذا تم ضبطه علىFalse، فستبقى أنواع البيانات كما هي، مطابقةً لتلك الخاصة بالطبقة المقابلة.
أضِف مُكيِّفًا إلى النموذج بناءً على الإعداد المُمرَّر.
هذا المُكيّف غير مُدرَّب. لتحميل مُكيّف مُدرَّب، راجع PeftModel.load_adapter().
يجب أن يكون اسم المُكيّف الجديد فريدًا.
لا يتم تعيين المُكيّف الجديد كمُكيّف نشط تلقائيًا. استخدم PeftModel.set_adapter() لتعيين المُكيّف النشط.
يعطّل وحدة المحوّل.
المرور الأمامي للنموذج.
from_pretrained
< source >( model: nn.Modulemodel_id: str | os.PathLikeadapter_name: str = 'default'is_trainable: bool = Falseconfig: Optional[PeftConfig] = None**kwargs: Any )
المعاملات
- model (
nn.Module) — النموذج الذي سيتم تكييفه. - model_id (
strأوos.PathLike) — اسم إعداد PEFT الذي سيتم استخدامه. يمكن أن يكون:- سلسلة نصية، وهي
model idلإعداد PEFT مستضاف داخل مستودع نموذج على Hugging Face Hub. - مسار إلى مجلد يحتوي على ملف إعدادات PEFT تم حفظه باستخدام طريقة
save_pretrained(./my_peft_config_directory/).
- سلسلة نصية، وهي
- adapter_name (
str، اختياري، القيمة الافتراضية"default") — اسم المُكيّف الذي سيتم تحميله. هذا مفيد لتحميل عدة مُكيّفات. - is_trainable (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب أن يكون المُكيّف قابلًا للتدريب أم لا. إذا كانت القيمةFalse، فسيتم تجميد المُكيّف واستخدامه للاستدلال - config (PeftConfig، اختياري) —
كائن التهيئة الذي يُستخدم بدلاً من التهيئة المحمّلة تلقائياً. هذا الكائن متنافٍ مع
model_idوkwargs. يكون هذا مفيداً عندما تكون التهيئة قد حُمّلت مسبقاً قبل استدعاءfrom_pretrained. - low_cpu_mem_usage (
bool,optional, defaults toFalse) — إنشاء أوزان المُكيّف فارغة على جهاز meta قبل تحميل الأوزان المحفوظة. مفيد لتسريع العملية. - kwargs — (
optional): معلمات إضافية تُمَرَّر إلى فئة تكوين PEFT المحددة.
أنشئ نموذج PEFT مختلطًا من نموذج مُدرَّب مسبقًا وأوزان PEFT محمّلة.
لاحظ أن model المُمرَّر قد يتم تعديله في مكانه.
توليد المخرجات.
يعيد عدد المعاملات القابلة للتدريب وعدد جميع المعاملات في النموذج.
load_adapter
< source >( model_id: stradapter_name: str*args: Any**kwargs: Any )
المعاملات
- adapter_name (
str) — اسم المُكيّف الذي سيُضاف. - peft_config (PeftConfig) — إعدادات المُكيّف الذي سيُضاف.
- is_trainable (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب أن يكون المُكيّف قابلًا للتدريب أم لا. إذا كانت القيمةFalse، فسيتم تجميد المُكيّف ولن يمكن استخدامه إلا للاستدلال. - torch_device (
str، اختياري، القيمة الافتراضية هي None) — الجهاز الذي سيتم تحميل المُكيّف عليه. إذا كانتNone، فسيتم استنتاج الجهاز. - autocast_adapter_dtype (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلا إلى تحويل أوزان المُكيّف باستخدام float16 و bfloat16 إلى float32، حيث يُعد هذا مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على مُكيّفات PEFT المحددة. - ephemeral_gpu_offload (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام إزاحة GPU المؤقتة للوحدات المحمّلة جزئيًا. القيمة الافتراضية هيFalse. - low_cpu_mem_usage (
bool,optional, defaults toFalse) — إنشاء أوزان المُكيّف فارغة على جهاز meta قبل تحميل الأوزان المحفوظة. مفيد لتسريع العملية. - kwargs — (
optional): Additional arguments to modify the way the adapter is loaded, e.g. the token for Hugging Face Hub.
حمّل مُكيّفًا مُدرَّبًا في النموذج.
يجب أن يكون اسم المُكيّف الجديد فريدًا.
لا يتم تعيين المُكيّف الجديد كمُكيّف نشط تلقائيًا. استخدم PeftModel.set_adapter() لتعيين المُكيّف النشط.
merge_and_unload
< source >( *args: Any**kwargs: Any )
المعاملات
- progressbar (
bool) — ما إذا كان يجب عرض شريط تقدم يُظهر عملية التحميل والدمج - safe_merge (
bool) — ما إذا كان سيتم تفعيل فحص الدمج الآمن للتحقق من وجود أي قيم Nan محتملة في أوزان المحوّل - adapter_names (
List[str]، اختياري) — قائمة أسماء المحوِّلات (adapters) التي يجب دمجها. إذا كانت القيمة None، فسيتم دمج جميع المحوِّلات النشطة. القيمة الافتراضية هيNone.
تدمج هذه الطريقة طبقات المُكيِّف (adapter) في النموذج الأساسي. وهذا ضروري إذا أراد أحد ما استخدام النموذج الأساسي كنموذج مستقل.
يطبع عدد المعاملات القابلة للتدريب في النموذج.
ملاحظة: يستخدم print_trainable_parameters() الدالة get_nb_trainable_parameters() وهي مختلفة عن num_parameters(only_trainable=True) من huggingface/transformers. تُرجع get_nb_trainable_parameters() (المعاملات القابلة للتدريب، جميع المعاملات) لنموذج Peft الذي يتضمن نموذج transformer الأساسي المُعدَّل. ففي تقنيات مثل LoRA، يتم تعديل نموذج transformer الأساسي في مكانه باستخدام وحدات LoRA. ومع ذلك، في حالة ضبط الموجه (prompt tuning)، يبقى نموذج transformer الأساسي دون تعديل. تُرجع num_parameters(only_trainable=True) عدد المعاملات القابلة للتدريب في نموذج transformer الأساسي، وقد يختلف هذا العدد.
set_adapter
< source >( adapter_name: Union[str, list[str]]inference_mode: bool = False )
يحدد المُكيِّف (المُكيِّفات) النشط (النشطة) للنموذج.
لاحظ أن الترتيب الذي تُطبَّق به المُكيِّفات (adapters) أثناء المرور الأمامي قد لا يكون هو نفسه الترتيب الذي تُمرَّر به إلى هذه الدالة. بدلاً من ذلك، يُحدَّد الترتيب أثناء المرور الأمامي بناءً على الترتيب الذي حُمِّلت به المُكيِّفات في النموذج. فالمُكيِّفات النشطة تحدد فقط أيّ المُكيِّفات تكون نشطة أثناء المرور الأمامي، لكنها لا تحدد الترتيب الذي تُطبَّق به.
بالإضافة إلى ذلك، ستقوم هذه الدالة بجعل المُكيّف المحدد قابلًا للتدريب (أي requires_grad=True) ما لم يكن inference_mode بقيمة True.
يحصل على النموذج الأساسي عن طريق إزالة جميع وحدات المحوّل دون دمجها. يعيد هذا النموذج الأساسي الأصلي.
أدوات
peft.cast_mixed_precision_params
< source >( model: torch.nn.Moduledtype: torch.dtype )
قم بتحويل جميع معاملات النموذج غير القابلة للتدريب إلى dtype المحدد. يمكن أن يكون dtype إما torch.float16 أو torch.bfloat16 وفقاً لتدريب الدقة المختلطة الذي تقوم به. يتم تحويل المعاملات القابلة للتدريب إلى دقة كاملة. يهدف هذا إلى تقليل استخدام ذاكرة وحدة معالجة الرسوميات (GPU) عند استخدام طرق PEFT من خلال استخدام dtype بدقة نصفية للمعاملات غير القابلة للتدريب. الحفاظ على المعاملات القابلة للتدريب بدقة كاملة يحافظ على استقرار التدريب عند استخدام تدريب الدقة المختلطة التلقائي.
torch.bfloat16 وفقًا لتدريب الدقة المختلطة الذي تقوم به.
peft.get_peft_model
< source >( model: nn.Modulepeft_config: PeftConfigadapter_name: str = 'default'mixed: bool = Falseautocast_adapter_dtype: bool = Truerevision: Optional[str] = Nonelow_cpu_mem_usage: bool = False )
المعاملات
- model (
torch.nn.Module) — النموذج الذي سيتم تغليفه. عادةً ما يكون هذا نموذجًا من Transformers، لكن أيnn.Moduleيمكن أن يعمل، مع ملاحظة أن الميزات الخاصة بالمهام (peft_config.task_type) تتطلب أن يتبع النموذج معايير Transformers. - peft_config (PeftConfig) — كائن الإعدادات الذي يحتوي على معاملات نموذج Peft.
- adapter_name (
str،optional، افتراضيًا"default") — اسم المُكيّف الذي سيتم حقنه، وإذا لم يُقدَّم، يُستخدم اسم المُكيّف الافتراضي (“default”). - mixed (
bool،optional، الافتراضيFalse) — ما إذا كان سيتم السماح بخلط أنواع مختلفة (متوافقة) من المحوِّلات. - autocast_adapter_dtype (
bool, اختياري) — ما إذا كان يجب تحويل نوع بيانات المُكيّف تلقائيًا. القيمة الافتراضية هيTrue. حاليًا، لن يؤدي هذا إلى تحويل أوزان المُكيّف باستخدام float16 أو bfloat16 إلى float32 فقط، حيث يُعد ذلك مطلوبًا عادةً للتدريب المستقر، ولن يؤثر إلا على مُكيّفات PEFT المحددة. - revision (
str،optional، القيمة الافتراضيةmain) — إصدار النموذج الأساسي. إذا لم يتم تعيين هذا، فسيحمّل نموذج peft المحفوظ إصدارmainللنموذج الأساسي - low_cpu_mem_usage (
bool,optional, الافتراضيFalse) — إنشاء أوزان مُكيّف فارغة على جهاز meta. مفيد لتسريع عملية التحميل. اترك هذا الإعداد كـ False إذا كنت تنوي تدريب النموذج، ما لم يتم استبدال أوزان المُكيّف بأوزان مختلفة قبل بدء التدريب.
يعيد كائن نموذج 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.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.prepare_model_for_kbit_training
< source >( modeluse_gradient_checkpointing = Trueactivation_checkpointing_kwargs = Noneauto_clear_cache = Truegradient_checkpointing_kwargs = None )
المعاملات
- model (
transformers.PreTrainedModel) — النموذج المحمّل منtransformers - use_gradient_checkpointing (
bool، اختياري، القيمة الافتراضيةTrue) — إذا كانت القيمة True، فسيتم استخدام gradient checkpointing لتوفير الذاكرة على حساب إبطاء عملية الرجوع (backward pass). - activation_checkpointing_kwargs (
dict، اختياري، القيمة الافتراضيةNone) — حجج الكلمات المفتاحية التي يجب تمريرها إلى دالة نقطة التفتيش للتفعيل، يُرجى الرجوع إلى توثيقtorch.utils.checkpoint.checkpointلمزيد من التفاصيل حول الحجج التي يمكنك تمريرها إلى تلك الطريقة. يرجى ملاحظة أن هذا متاح فقط في إصدارات transformers (> 4.34.1). - auto_clear_cache (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تفريغ ذاكرة التخزين المؤقت للمسرّع بعد ترقية المعاملات إلى fp32. يؤدي هذا إلى تحرير الذاكرة التي تحتفظ بها أداة تخصيص ذاكرة التخزين المؤقت، وهو أمر مفيد بشكل خاص على الأجهزة التي تشارك الذاكرة بين المضيف والمسرّع. اضبط القيمة علىFalseلتخطي هذه الخطوة. - gradient_checkpointing_kwargs (
dict، اختياري، القيمة الافتراضيةNone) — حجج الكلمات المفتاحية التي تُمرَّر إلى دالة نقطة التفتيش للتفعيل. يوجد هذا الحرج فقط من أجل التوافق مع الإصدارات السابقة وهو غير مستحسن، يُرجى استخدامactivation_checkpointing_kwargsبدلاً منه. سيُزال في PEFT v1.2.
لاحظ أن هذه الطريقة تعمل فقط مع نماذج transformers.
تغلّف هذه الطريقة بروتوكول التحضير الكامل للنموذج قبل بدء التدريب. ويشمل ذلك: 1- تحويل طبقة layernorm إلى fp32 2- جعل طبقة التضمين الإخراجي تتطلب التدرجات 3- إضافة الترقية لطبقة رأس lm إلى fp32 4- تجميد طبقات النموذج الأساسي للتأكد من عدم تحديثها أثناء التدريب
peft.get_layer_status
< source >( model: torch.nn.Module ) → listpeft.peft_model.TunerLayerStatus
احصل على حالة كل طبقة مُكيّف في النموذج.
تعيد هذه الدالة قائمة من كائنات فئة البيانات TunerLayerStatus، يحتوي كل منها على السمات التالية:
name(str): اسم طبقة المُكيّف، مثلmodel.encoder.block.0.layer.0.SelfAttention.q.module_type(str): نوع طبقة المُكيّف، مثلlora.Linear.enabled(bool): ما إذا كان طبقة المُكيّف مفعّلة.active_adapters(list[str]): أسماء المُكيِّفات النشطة، إن وُجدت، مثل["default"].merged_adapters(list[str]): أسماء المُدمِجات المُدمَجة، إن وُجدت، مثل["default"].- requires_grad : dict[str, bool | Literal[“irregular”]]
حالة requires_grad للمعاملات الخاصة بكل وحدة مُكيّف. في المثالي، يجب أن تكون إما
TrueأوFalse. إذا لم تكن حالة requires_grad متسقة عبر جميع المعاملات، فسيتم تعيين القيمة إلى"irregular". available_adapters(list[str]): أسماء المُكيِّفات المتاحة، مثل["default"].devices(dict[str, list[str]]): الأجهزة التي تُخزَّن فيها معاملات المُكيّف المحدد، مثل["cuda","xpu"].quantization_backend(strأوNone): اسم وحدة معالجة التكميم، مثل"bnb 4bit"، أوNoneإذا لم يتم التكميم.
peft.get_model_status
< source >( model: torch.nn.Module ) → peft.peft_model.TunerModelStatus
احصل على حالة مُعدِّلات النموذج.
تعيد هذه الدالة كائنًا من فئة البيانات TunerModelStatus، والذي يحتوي على السمات التالية:
base_model_type(str): نوع النموذج الأساسي، مثلT5Model.adapter_model_type(str): نوع نموذج المُكيّف، مثلLoraModel.peft_types(dict[str, str]): خريطة من اسم المُكيّف إلى نوع المُكيّف، على سبيل المثال{"default": "LORA"}.trainable_params(int): عدد المعاملات القابلة للتدريب في النموذج.total_params(int): إجمالي عدد المعاملات في النموذج.num_adapter_layers(int): عدد طبقات المحوّل في النموذج.enabled(bool,Literal["irregular"]): ما إذا كانت جميع طبقات المُكيِّف مفعّلة. إذا كانت بعض الطبقات مفعّلة وبعضها الآخر غير مفعّل، فسيكون هذا"irregular". وهذا يعني أن نموذجك في حالة غير متسقة وقد لا يعمل كما هو متوقع.active_adapters(list[str],Literal["irregular"]): أسماء المُكيِّفات النشطة. إذا لم تكن المُكيِّفات النشطة متسقة عبر جميع الطبقات، فسيكون هذا"irregular"، مما يعني أن نموذجك في حالة غير متسقة وقد لا يعمل كما هو متوقع.merged_adapters(list[str],Literal["irregular"]): أسماء المُدمِجات المُدمَجة. إذا لم تكن المُدمِجات المُدمَجة متسقة عبر جميع الطبقات، فسيكون هذا"irregular"، مما يعني أن نموذجك في حالة غير متسقة وقد لا يعمل كما هو متوقع.requires_grad(dict[str, bool | Literal["irregular"]]): ما إذا كانت جميع طبقات المُكيّف المُعطى تحتوي علىrequires_gradمُعيّنة إلىTrueأوFalse. إذا كان هناك مزيج، فسيتم تعيينها إلى"irregular"، مما يعني أن نموذجك في حالة غير متسقة وقد لا يعمل كما هو متوقع.available_adapters(list[str]): أسماء المُكيِّفات المتاحة، مثل["default"].devices(dict[str, list[str]]): الأجهزة التي تُخزَّن فيها معاملات المُكيّف المحدد، مثل["cuda","xpu"].quantization_backend(str,None,Literal["irregular"]): اسم واجهة التكميم، مثل"bnb 4bit"، أوNoneإذا لم يتم التكميم. إذا لم تكن الواجهة متسقة عبر جميع الطبقات، فسيكون"irregular".