PEFT documentation

UniLoRA

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

UniLoRA

Uni-LoRA هو أسلوب PEFT يشارك بنك متجهات قابل للتدريب ومضغوط عبر أوزان محوّلات الرتبة المنخفضة. بدلاً من تعلّم كل عنصر في مصفوفة LoRA بشكل مستقل، يحدد UniLoRA إسقاطاً حتمياً للعناصر إلى قيم مشتركة theta_d ويتعلم المعلمات المشتركة المستخدمة في تحديث المحوّل.

البدء السريع

from peft import UniLoraConfig, get_peft_model
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-3B")

config = UniLoraConfig(
    r=32,
    theta_d_length=256,
    proj_seed=42,
    target_modules=["q_proj", "v_proj"],
    unilora_dropout=0.0,
    init_weights=True,
    task_type="CAUSAL_LM",
)

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

المعلمات المهمة

r يتحكم في بُعد مُكيّف الرتبة المنخفضة. تزيد القيم الأكبر من سعة المُكيّف واستخدام الذاكرة.

يتحكم theta_d_length في طول بنك متجهات UniLoRA المشتركة. وهذا هو التخزين القابل للتدريب الرئيسي الذي تشاركه إدخالات المُكيِّف المُسقط.

يتحكم proj_seed في توليد الفهارس الحتمية للتحويلات الثابتة إلى theta_d. يؤدي إعادة استخدام البذرة والإعداد نفسيهما إلى إمكانية إعادة إنتاج فهارس المُكيِّفات المولَّدة.

target_modules يحدد الوحدات التي تستقبل محولات UniLoRA. استخدم لاحقات الوحدات مثل ["q_proj", "v_proj"]، أو نص regex، أو "all-linear" عندما تدعمه بنية النموذج.

unilora_dropout يطبّق إسقاط (dropout) داخل طبقات مُكيّف UniLoRA أثناء التدريب.

يتحكم init_weights في تهيئة معاملات UniLoRA. اضبطه على False للحفاظ على تهيئة عشوائية لـtheta_d عندما تحتاج إلى إدارة التهيئة يدويًا.

يتحكم save_indices في ما إذا كانت نقاط الحفظ الخاصة بـ UniLoRA تحفظ متجهات الفهرس والمقياس المولّدة معًا إلى جانب المعاملات المشتركة theta_d. يُبقي تعطيل هذا الخيار نقاط الحفظ أصغر حجمًا ويعيد توليد الفهارس من proj_seed؛ بينما يجعل تفعيلها المُكيّفات المحفوظة مستقلة عن أي تغييرات مستقبلية في توليد الفهارس.

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

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

UniLoraConfig

فئة peft.UniLoraConfig

< >

( 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 = 4proj_seed: int = 42theta_d_length: int = 256target_modules: list[str] | str | None = Noneunilora_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: list[str] | None = Noneinit_theta_d_bound: float = 0.02init_weights: bool = Truesave_indices: bool = Falselayers_to_transform: list[int] | int | None = Nonelayers_pattern: list[str] | str | None = None )

المعاملات

  • r (int) — رتبة التكيف منخفض الرتبة. يتحكم هذا في السعة التعبيرية لتحديث UniLora.
  • proj_seed (int) — البذرة العشوائية المستخدمة لتوليد إسناد الفهرس الثابت. يضمن ذلك قابلية إعادة الإنتاج عبر التشغيلات.
  • theta_d_length (int) — طول متجه UniLora المشترك theta_d.
  • target_modules (Union[list[str], str], اختياري) — أسماء أو أنماط الوحدات التي تُطبَّق عليها مُكيِّفات UniLora.
    • إذا تم توفير سلسلة نصية، يتم اعتبارها تعبيرًا نمطيًا.
    • إذا تم تقديم قائمة، يتم مطابقة الوحدات بالاسم الدقيق أو باللاحقة.
    • تُطبّق القيمة الخاصة ‘all-linear’ UniLora على جميع طبقات Linear / Conv1D باستثناء طبقة الإخراج. إذا لم يتم تحديد الوحدات، فستُستنتج من بنية النموذج. وسيُستدعى خطأ إذا كانت البنية غير مدعومة.
  • unilora_dropout (float) — احتمالية Dropout المطبقة داخل طبقات UniLora.
  • fan_in_fan_out (bool) — ما إذا كانت الطبقة المستبدلة تخزّن الأوزان في صيغة (fan_in, fan_out). يجب ضبط هذا الخيار على True للنماذج مثل GPT-2 التي تستخدم طبقات Conv1D.
  • bias (str) — يحدد مصطلحات الانحياز القابلة للتدريب:
    • none: لا يتم تحديث أي معاملات انحياز
    • ‘all’: يتم تحديث جميع معاملات الانحياز
    • ‘unilora_only’: يتم تحديث الانحيازات داخل طبقات UniLora فقط ملاحظة: تفعيل تحديث الانحيازات يغيّر مخرجات النموذج حتى عند تعطيل المُكيّفات.
  • modules_to_save (list[str]، اختياري) — وحدات إضافية (خارج طبقات UniLora) يجب أن تبقى قابلة للتدريب وتُحفظ في نقطة الفحص النهائية. يُستخدم هذا بشكل شائع لرؤوس محددة للمهام مثل المصنّفات.
  • init_theta_d_bound (float) — حد التهيئة لبنك متجهات UniLora. يتم أخذ عينات من المتجهات بشكل منتظم من [-init_theta_d_bound, init_theta_d_bound]. يتم تجنّب التهيئة بالصفر لمنع تضاؤل التدرجات. يُوصى بقيم صغيرة (مثل 0.02) لتحقيق تدريب مستقر.
  • init_weights (bool) — ما إذا كان سيتم تهيئة theta_d باستخدام التهيئة الافتراضية لـ UniLora. إذا تم ضبطه على False، فإن theta_d يحتفظ بتحيز عشوائي.
  • save_indices (bool) — ما إذا كان سيتم حفظ فهارس UniLora المولّدة ومخازن المقاييس (scale buffers) إلى جانب theta_d. يؤدي هذا إلى زيادة حجم نقطة الحفظ (checkpoint)، لكنه يجعل المحوِّلات (adapters) المحفوظة مستقلة عن أي تغييرات مستقبلية في روتين توليد الفهارس.
  • layers_to_transform (Union[list[int], int], اختياري) — فهارس طبقات التحويل التي يُطبَّق عليها UniLora. إذا تم تحديدها، فسيتم تعديل هذه الطبقات فقط. هذا الخيار صالح فقط عندما يكون target_modules قائمة.
  • layers_pattern (Union[list[str], str]، اختياري) — نمط مخصص لأسماء الطبقات يُستخدم مع layers_to_transform عندما لا يتبع النموذج معايير التسمية القياسية للطبقات. يكون هذا الخيار صالحًا فقط عندما يكون target_modules قائمة.

فئة التهيئة لمُكيّفات UniLora.

تعرف هذه الفئة جميع المعلمات الفائقة المطلوبة لتبني طبقات UniLora وتطبيقها ضمن إطار عمل PEFT. تم تصميم الإعداد بشكل مقصود ليكون بسيطاً، ولا يتضمن سوى المعلمات التي تُستخدم فعلياً في تطبيق UniLora الحالي.

مرجع: Uni-LoRA: متجه واحد هو كل ما تحتاجه https://arxiv.org/abs/2506.00799

UniLoraModel

فئة peft.UniLoraModel

< >

( modelconfigadapter_namelow_cpu_mem_usage: bool = Falsestate_dict: dict[str, torch.Tensor] | None = None )

ينشئ مُكيّف UniLora حول نموذج مُدرَّب مسبقًا.

generate_index

< >

( lora_param_count: inttheta_d_length: intproj_seed: int )

سندلّ فهارس theta_d حتمية على مساحة معاملات UniLora المسطحة.

يُنتج np.random.choice(np.arange(theta_d_length), size=lora_param_count) عينةً مستقلةً لكل موضع، مما قد يؤدي إلى عدم استخدام بعض إدخالات theta_d في المُكيِّفات الأصغر حجماً. أما UniLora فتستخدم بدلاً من ذلك إسناداً حتمياً متوازناً: يظهر كل فهرس إما floor(D / d) أو ceil(D / d) مرات، حيث D هو عدد معاملات LoRA المُسطَّحة وd هو theta_d_length. يحافظ هذا على استقرار تطبيع كل فهرس على حدة، مع خلط الإسناد ما يزال باستخدام proj_seed.

Update on GitHub