PEFT documentation

الخرطوش

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

الخرطوش

تُعدّ الكرتريدجات (Cartridges) طريقة لتعلم الأوامر (prompt-learning) تخزّن تمثيلاً مضغوطاً للسياق الطويل كبادئة (prefix) لمخزن KV-cache مُعاملات (parameterized). تستمد الفكرة الأساسية من ورقة Cartridges: Lightweight and general-purpose long context representations via self-study.

لمراجعة عامة على مستوى عالٍ وللمعرفة بدوافع هذا النهج، راجع منشور المدونة Cartridges: Storing long contexts in tiny caches with self-study.

كيف تختلف الكراتريدج عن ضبط البادئة

يتم تقديم كل من Prefix Tuning و Cartridges عن طريق حقن past_key_values (ذاكرة تخزين KV بادئة) في النموذج الأساسي.

  • يتعلّم Prefix Tuning تضمينات الرموز الافتراضية (وإسقاط MLP اختياريًا) وينتج بادئة KV.
  • تتعلم الخرطوشات بادئة KV نفسها مباشرةً (متجهات المفتاح/القيمة لكل طبقة لـp رموز افتراضية)، وهي مصممة لتُهيأ من بادئة KV حقيقية (على سبيل المثال، أول p رموز من مجموعة بيانات/موجّه نظام).

توصي الورقة أيضاً بتجميد الرمز الأول كحوض انتباه من أجل الاستقرار (الافتراضي هو num_frozen_tokens=1).

الاستخدام (الاستدلال)

I cannot translate this text because it is not a block of a web page in the specified light markup format. It is a plain sentence. Please provide the text with the appropriate tags (e.g., , ) so I can translate it according to your instructions.

from transformers import AutoModelForCausalLM, AutoTokenizer

from peft import PeftModel

model_id = "Qwen/Qwen2.5-0.5B-Instruct"
adapter_path = "path/to/cartridge_adapter"

base = AutoModelForCausalLM.from_pretrained(model_id)
model = PeftModel.from_pretrained(base, adapter_path)

tok = AutoTokenizer.from_pretrained(model_id)
if tok.pad_token is None:
    tok.pad_token = tok.eos_token

out = model.generate(**tok("Question about the corpus:", return_tensors="pt"), max_new_tokens=64)
print(tok.decode(out[0], skip_special_tokens=True))

إذا كنت بحاجة إلى إنشاء cartridge وتهيئته قبل التدريب، فراجع خيارات التهيئة أدناه.

خيارات التهيئة

تناقش الورقة بعض استراتيجيات التهيئة العملية:

  • KV عشوائي (الافتراضي): أنشئ CartridgeConfig وابدأ التدريب. يقوم هذا بتبديل بادئة KV بشكل عشوائي.
  • KV من الرموز الأولى في الموجه/المجموعة: استخدم initialize_kv_prefix_from_text(model, tokenizer, text=...). يؤدي هذا إلى تنفيذ prefill على text ثم نسخ ذاكرة KV الناتجة لأول num_virtual_tokens إلى المُكيّف.
  • KV من ذاكرة مؤقتة موجودة مسبقًا: استخدم initialize_kv_prefix_from_past_key_values(model, past_key_values=...) إذا كان لديك بالفعل كائن past_key_values من عملية التعبئة المسبقة لنموذج أساسي.

التدريب

تقترح ورقة Cartridges هدف تقطير ذاتي التعلّم (حيث يوفر النموذج الأساسي المجمّد قيم التنبؤات التعليمية، ويُدرَّب مُكيّف CARTRIDGE بحيث يطابق النموذج الطالب توزيع الرمز التالي للمعلم على المقطع المستهدف). يُبقي PEFT منطق التدريب خارج المكتبة الأساسية؛ راجع https://github.com/huggingface/peft/tree/main/examples/cartridge_self_study للحصول على سير عمل مرجعي. تستخدم سكربتات المثال النموذج الأساسي المجمّد كمعلم والنموذج المُكيّف كطالب، لذا يتشاركان نفس نقطة الفحص الأساسية.

التركيب

لدمج الوحدات المستقلة المدربة في مُكيّف واحد، استخدم compose_cartridge_adapters(...).

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

CartridgeConfig

فئة peft.CartridgeConfig

< >

( 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 = Falsenum_virtual_tokens: int = Nonetoken_dim: int = Nonenum_transformer_submodules: Optional[int] = Nonenum_attention_heads: Optional[int] = Nonenum_layers: Optional[int] = Nonemodules_to_save: Optional[list[str]] = Nonenum_frozen_tokens: int = 1 )

المعاملات

  • num_frozen_tokens (int، القيمة الافتراضية 1) — عدد رموز البداية في بداية الخراطوش التي يجب إبقاؤها مجمّدة (بدون تدرّجات). يوصي مقال Cartridges بتجميد الرمز الأول كحوض انتباه من أجل الاستقرار (اضبط هذا على 1)، إذ تستخدم العديد من نماذج اللغة الكبيرة الرموز المبكرة كحواضن انتباه، وقد يؤدي تغييرها إلى الإضرار بالتدريب.

إعدادات CARTRIDGE، وهو مُكيّف بادئة مُعتمد على معاملات ذاكرة KV.

يُشبه هذا الأسلوب طريقة التقديم في prefix-tuning (حيث يُقدَّم على شكل past_key_values)، لكنه يخزّن ذاكرة KV مباشرةً كمعاملات قابلة للتدريب بدلاً من تعلّمها عبر إسقاط MLP.

التهيئة: يتناول مقال Cartridges عدة خيارات للتهيئة. في PEFT، تُعدّ التهيئة خطوة منفصلة عن إنشاء إعداد المُكيّف:

  • تهيئة عشوائية لـ KV (الخيار 2 في الورقة): أنشئ المُكيّف عبر get_peft_model(...). يتم تهيئة معاملات مُشفّر المُوجّه الخاص بـ CARTRIDGE بشكل عشوائي بواسطة PyTorch.

  • مشتقات KV من الرموز الأولى في الموجه/المجموعة (الخيار 3 في الورقة): نفّذ عملية تعبئة مسبقة بدون تدرّج على النموذج الأساسي وانسخ أول num_virtual_tokens من رموز KV المخزّنة المؤقتًا إلى المُكيّف. يوفر PEFT أدوات لهذا الغرض (قابلة للاستيراد من peft أو من peft.tuners.cartridge.utils):

    • initialize_kv_prefix_from_text(model, tokenizer, text=...)
    • initialize_kv_prefix_from_past_key_values(model, past_key_values=...)

    إذا كان لديك بالفعل متجه KV-prefix مسطّح، يمكنك تحميله مباشرةً عبر طريقة load_prompt_embeddings(...) الخاصة بترميز الموجه.

CartridgeEncoder

class peft.CartridgeEncoder

< >

( config )

ذاكرة تخزين KV بادئة مُعتمدة على المعلمات.

تُخزَّن المعاملات في نفس التخطيط المسطّح كإخراج PrefixEncoder: `[num_virtual_tokens, num_layers

  • 2 * token_dim], wheretoken_dimis per-head hidden size times number of heads (after any GQA adjustment performed by_prepare_prompt_learning_config`).

إذا كان num_frozen_tokens > 0، تُخزَّن الرموز الافتراضية الأولى num_frozen_tokens كمعامل غير قابل للتدريب، بينما تكون الرموز المتبقية قابلة للتدريب.

load_prompt_embeddings

< >

( prompt_embeddings: torch.Tensor )

حمّل تمثيلات الموجه المسطّحة التي حفظها PEFT (prompt_embeddings).

يحفظ PEFT مُكيّفات تعلّم المُوجِّهات كمُتجه واحد باسم prompt_embeddings. أما في CARTRIDGE، فنُقسّم ذلك المُتجه إلى مقاطع مجمّدة وقابلة للتدريب وفقاً لـself.num_frozen_tokens.

initialize_kv_prefix_from_past_key_values

peft.initialize_kv_prefix_from_past_key_values

< >

( modeladapter_name: Optional[str] = Nonepast_key_values: Anynum_virtual_tokens: Optional[int] = None )

تهيئة مُكيّف تعلّم بادئة KV من بادئة مخزّنة مسبقًا (past_key_values).

يعيد متجه تضمينات الاستعلام الذي تم تحميله في المُكيّف.

prompt_embeddings_from_past_key_values

peft.prompt_embeddings_from_past_key_values

< >

( past_key_values: Anynum_virtual_tokens: int )

تحويل كاش past_key_values (القديم) إلى متجه تضمينات الموجه المسطّح الذي يحفظه PEFT.

يتطابق المخرج مع التخطيط المتوقع بواسطة PeftModel.get_prompt() لتعلم المحفزات بنمط البادئة: الشكل [num_virtual_tokens, num_layers * 2 * token_dim].

Update on GitHub