PEFT documentation

MiSS

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

MiSS

MiSS (Matrix Shard Sharing) هي طريقة PEFT تحقق توازنًا جيدًا بين أداء النموذج والكفاءة الحسابية. فهي تتطلب مصفوفة قابلة للتدريب واحدة فقط، وتُقدّم آلية مشاركة شظايا (shard-sharing) تختلف عن LoRA.

ملخص الورقة البحثية هو:

تُقلّل طرق الضبط الدقيق الفعّال من حيث المعاملات (PEFT)، ولا سيما التكيّف منخفض الرتبة (LoRA)، عدد المعاملات القابلة للتدريب في النماذج اللغوية الكبيرة (LLMs) بشكل فعّال. ومع ذلك، مع استمرار نمو حجم النماذج، تظل الحاجة إلى الموارد الحسابية تحديًا كبيرًا. غالبًا ما تواجه متغيرات LoRA الحالية صعوبة في تحقيق توازن مثالي بين المرونة (أداء النموذج وسرعة التقارب) والكفاءة (الحمولة الحسابية، واستخدام الذاكرة، ووقت التهيئة). تقدّم هذه الورقة MiSS (مشاركة شظايا المصفوفة)، وهي نهج PEFT جديد يعالج هذا التوازن من خلال آلية بسيطة لمشاركة الشظايا. يستفيد MiSS من الملاحظة بأن التكيّف منخفض الرتبة يمكن تحقيقه عن طريق تفكيك مصفوفة الأوزان إلى مصفوفات شظايا متعددة واستخدام شظية مشتركة قابلة للتدريب. يبني هذا الأسلوب مصفوفة التحديث منخفضة الرتبة من خلال تكرار هذه الشظايا المشتركة والمقسّمة. كما نقترح تنفيذًا فعّالًا من حيث العتاد وقابلًا للتطبيق على نطاق واسع لـ MiSS. تُظهر التجارب الواسعة النطاق التي أُجريت على مجموعة من المهام، إلى جانب تحليل منهجي للأداء الحسابي، تفوّق MiSS. تُبيّن النتائج أن MiSS يتفوّق بشكل كبير على LoRA القياسي ومتغيراته البارزة في كلٍّ من مقاييس أداء النموذج والكفاءة الحسابية، بما في ذلك سرعة التهيئة ومعدل الإنتاجية أثناء التدريب. من خلال الموازنة الفعّالة بين القدرة التعبيرية واستخدام الموارد، يقدّم MiSS حلًا مقنعًا للتكيّف الفعّال مع النماذج الكبيرة.

نظرة عامة على الاختبارات

متى تستخدم MiSS

يُعد MiSS خياراً جيداً عندما:

  • تريد تهيئة أسرع ومعدل إنتاجية تدريب أعلى من مخططات تهيئة LoRA المتقدمة التي تستخدم إعدادات مكلفة (مثل PiSSA أو LoRA-GA أو OLoRA).
  • تريد بديلاً جاهزاً للاستخدام المباشر عن LoRA مع تغييرات إعدادات دنيا.

إذا كنت بحاجة إلى قدرة تعبيرية أقوى على حساب بعض الكفاءة، ففكّر في متغير التهيئة bat (انظر أدناه).

أنماط init_weights

يدعم MiSS ثلاثة أوضاع تهيئة عبر معامل init_weights:

  • True (الافتراضي): تهيئة MiSS القياسية. نقطة البداية الأفضل لمعظم حالات الاستخدام.
  • "bat": يتيح تحديثات غير خطية عبر شرائح مختلفة. يُنتج نتائج أفضل من MiSS القياسي لكنه يستهلك ذاكرة أكثر ويكون أبطأ بحوالي ضعف. استخدم هذا الخيار عندما تكون الأولوية للأداء على الكفاءة.
  • "mini": يستخدم رتبة أصغر على طول بُعد out_features، ويُتحكم بها عبر mini_r. يقلل هذا من عدد المعاملات القابلة للتدريب بشكل أكبر. عند استخدام هذا الوضع، يجب تعيين mini_r وأن يكون out_features قابلاً للقسمة على mini_r.

البدء السريع

import torch
from peft import MissConfig, get_peft_model
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-7b-hf",
    torch_dtype=torch.bfloat16,
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")
tokenizer.pad_token_id = tokenizer.eos_token_id

# Standard MiSS
config = MissConfig(
    r=64,
    miss_dropout=0.01,
    task_type="CAUSAL_LM"
)

# BAT variant — better performance, more memory
# config = MissConfig(
#     r=64,
#     init_weights="bat",
#     task_type="CAUSAL_LM"
# )

# Mini variant — fewer trainable parameters
# config = MissConfig(
#     r=64,
#     init_weights="mini",
#     mini_r=8,
#     task_type="CAUSAL_LM"
# )

model = get_peft_model(model, config)
model.print_healthcheck()

لمثال كامل على الضبط الدقيق يتضمن التدريب والاستدلال، راجع مثال الضبط الدقيق MiSS.

واجهة برمجة التطبيقات

MissConfig

فئة peft.MissConfig

< >

( 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 = 64miss_dropout: float = 0.0mini_r: int = 1target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Noneinit_weights: bool | Literal['bat', 'mini'] = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[str] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = None )

المعاملات

  • r (int) — رتبة MiSS عبر الطبقات المختلفة. من الأفضل ضبط ‘r’ على رقم زوجي؛ وإلا فلن تعمل طريقة التهيئة الافتراضية. تتوافق رتبة MiSS مع تحليل رتبة منخفضة على بُعد in_features.
  • miss_dropout (float) — احتمالية الإسقاط لطبقات MiSS.
  • mini_r (int) — ترتبط رتبة MiSS بتفكيك منخفض الرتبة على طول بُعد out_features. عند تعيين init_weights=mini، يجب عليك تعيين mini_r. يرجى التأكد من أن out_features قابل للقسمة على mini_r.
  • target_modules (Optional[Union[List[str], str]]) — أسماء الوحدات التي سيتم تطبيق المُكيّف عليها. إذا تم تحديد هذا، فسيتم استبدال الوحدات التي تحمل الأسماء المحددة فقط. عند تمرير نص، سيتم إجراء مطابقة باستخدام تعبير نمطي. عند تمرير قائمة من النصوص، سيتم إجراء مطابقة دقيقة أو يتم التحقق مما إذا كان اسم الوحدة ينتهي بأي من النصوص الممررة. إذا تم تحديده على أنه ‘all-linear’، فسيتم اختيار جميع الوحدات الخطية، باستثناء طبقة الإخراج. إذا لم يتم تحديده، فسيتم اختيار الوحدات وفقًا لبنية النموذج. إذا لم تكن البنية معروفة، فسيتم رفع خطأ — في هذه الحالة، يجب عليك تحديد الوحدات المستهدفة يدويًا.
  • exclude_modules (Optional[Union[List[str], str]]) — أسماء الوحدات التي لا يُطبَّق عليها المُكيّف. عند تمرير نص، يتم إجراء مطابقة باستخدام تعبير نمطي. عند تمرير قائمة من النصوص، يتم إجراء مطابقة دقيقة أو يُتحقق مما إذا كان اسم الوحدة ينتهي بأي من النصوص المُمرَّرة.
  • init_weights (bool | Literal[“bat”, “mini”]) — تتوافق التهيئة المختلفة مع متغيرات MiSS المختلفة. افتراضيًا (balance)، سيتم استخدام الطريقة الأكثر كفاءةً وعموميةً في MiSS. ‘bat’: في هذا الوضع، يمكنك تفعيل التحديثات غير الخطية عبر الشرائح المختلفة. ‘mini’: في هذا الوضع، يمكنك تعيين رتبة أصغر لاستخدام عدد أقل من المعلمات القابلة للتدريب، لكن يُوصى بالحفاظ على out_features % mini_r == 0.
  • layers_to_transform (Union[List[int], int]) — فهارس الطبقات المراد تحويلها. إذا تم تمرير قائمة من الأعداد الصحيحة، فسيتم تطبيق المُكيّف على فهارس الطبقات المحددة في هذه القائمة. أما إذا تم تمرير عدد صحيح واحد، فسيتم تطبيق التحويلات على الطبقة الموجودة عند هذا الفهرس.
  • layers_pattern (str) — اسم نمط الطبقة، يُستخدم فقط إذا كان layers_to_transform مختلفًا عن None.
  • bias (str) — نوع الانحياز لـ MiSS. يمكن أن يكون 'none' أو 'all' أو 'MiSS_only'.
  • modules_to_save (List[str]) — قائمة بالوحدات، بخلاف طبقات المُكيِّف (adapter)، التي يجب تعيينها قابلة للتدريب وحفظها في نقطة الفحص النهائية.

هذه هي فئة الإعدادات لتخزين إعدادات MissModel.

MissModel

فئة peft.MissModel

< >

( 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) — النموذج الذي ستُربط به طبقات مُعدِّل المُكيّف (adapter tuner).
  • config (MissConfig) — إعدادات نموذج MiSS.
  • adapter_name (str) — اسم المُكيّف، القيمة الافتراضية هي "default".
  • low_cpu_mem_usage (bool, optional, defaults to False) — إنشاء أوزان مُكيّف فارغة على جهاز meta. مفيد لتسريع عملية التحميل.

يعيد

torch.nn.Module

نموذج MiSS.

ينشئ نموذج تكيّف الانعكاس (MiSS) من نموذج مُدرَّب مسبقًا. يتم وصف الطريقة في https://huggingface.co/papers/2409.15371

مثال:

>>> from diffusers import StableDiffusionPipeline
>>> from peft import MissModel, MissConfig

>>> config_te = MissConfig(
...     r=8,
...     target_modules=["k_proj", "q_proj", "v_proj", "out_proj", "fc1", "fc2"],
...     init_weights=True,
... )
>>> config_unet = MissConfig(
...     r=8,
...     target_modules=[
...         "proj_in",
...         "proj_out",
...         "to_k",
...         "to_q",
...         "to_v",
...         "to_out.0",
...         "ff.net.0.proj",
...         "ff.net.2",
...     ],
...     init_weights=True,
... )

>>> model = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
>>> model.text_encoder = MissModel(model.text_encoder, config_te, "default")
>>> model.unet = MissModel(model.unet, config_unet, "default")

الخصائص:

  • النموذج (~torch.nn.Module) — النموذج الذي سيتم تكييفه.
  • peft_config (MissConfig): إعدادات نموذج MiSS.
Update on GitHub