PEFT documentation
تكاملات PEFT
تكاملات PEFT
تتعدى الفوائد العملية لـ PEFT لتشمل مكتبات Hugging Face الأخرى مثل Diffusers و Transformers. ومن أبرز فوائد PEFT أن ملف المُكيّف (adapter) الذي يُنشئه أي أسلوب من أساليب PEFT يكون أصغر بكثير من النموذج الأصلي، مما يجعل إدارة واستخدام عدة مُكيّفات أمراً في غاية السهولة. يمكنك استخدام نموذج أساسي مُدرَّب مسبقاً واحد لأداء مهام متعددة من خلال تحميل مُكيّف جديد مُكيَّف خصيصاً للمهمة التي تعمل على حلها. أو يمكنك دمج عدة مُكيّفات مع نموذج انتشار (diffusion) لتحويل النص إلى صورة لإنشاء تأثيرات جديدة.
ستُظهر لك هذه الشرحية كيف يمكن لـ PEFT مساعدتك في إدارة المُكيّفات (adapters) في Diffusers وTransformers.
Diffusers
Diffusers هو مكتبة للذكاء الاصطناعي التوليدي لإنشاء الصور والفيديوهات من النصوص أو الصور باستخدام نماذج الانتشار. يُعدّ LoRA طريقة تدريب شائعة بشكل خاص لنماذج الانتشار، إذ يمكنك تدريب نماذج انتشار ومشاركتها بسرعة كبيرة لتوليد صور بأساليب جديدة. ولتسهيل استخدام نماذج LoRA متعددة وتجربتها، يستخدم Diffusers مكتبة PEFT للمساعدة في إدارة المحوِّلات المختلفة للاستدلال.
على سبيل المثال، حمّل نموذجًا أساسيًا ثم حمّل مُكيّف artificialguybr/3DRedmond-V1 للاستدلال باستخدام طريقة load_lora_weights. يُفعَّل الحُجّة adapter_name في طريقة التحميل بواسطة PEFT، مما يتيح لك تعيين اسم للمُكيّف ليسهل الرجوع إليه.
import torch
from diffusers import DiffusionPipeline
device = torch.accelerator.current_accelerator().type if hasattr(torch, "accelerator") else "cuda"
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to(device)
pipeline.load_lora_weights(
"peft-internal-testing/artificialguybr__3DRedmond-V1",
weight_name="3DRedmond-3DRenderStyle-3DRenderAF.safetensors",
adapter_name="3d"
)
image = pipeline("sushi rolls shaped like kawaii cat faces").images[0]
image
الآن لنجرّب نموذج LoRA مثيرًا للاهتمام آخر، وهو ostris/super-cereal-sdxl-lora. كل ما عليك فعله هو تحميل هذا المُكيّف الجديد وتحديد اسمه باستخدام adapter_name، ثم استخدام طريقة set_adapters لجعله المُكيّف النشط حاليًا.
pipeline.load_lora_weights(
"ostris/super-cereal-sdxl-lora",
weight_name="cereal_box_sdxl_v1.safetensors",
adapter_name="cereal"
)
pipeline.set_adapters("cereal")
image = pipeline("sushi rolls shaped like kawaii cat faces").images[0]
image
أخيرًا، يمكنك استدعاء الطريقة disable_lora لاستعادة النموذج الأساسي.
pipeline.disable_lora()
تعرف على المزيد حول كيفية دعم PEFT لـ Diffusers في شروحات الاستدلال باستخدام PEFT.
Transformers
🤗 Transformers هي مجموعة من النماذج المُسبقة التدريب لجميع أنواع المهام في جميع الأنماط. يمكنك تحميل هذه النماذج للتدريب أو الاستدلال. العديد من هذه النماذج هي نماذج لغوية كبيرة (LLMs)، لذا من المنطقي دمج PEFT مع Transformers لإدارة وتدريب المُكيّفات (adapters).
Load a base pretrained model to train.
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("facebook/opt-350m")في الخطوة التالية، أضف تكوين مُكيّف (adapter) لتحديد كيفية تكييف معاملات النموذج. استدعِ طريقة add_adapter() لإضافة التكوين إلى النموذج الأساسي.
from peft import LoraConfig
peft_config = LoraConfig(
lora_alpha=16,
lora_dropout=0.1,
r=64,
bias="none",
task_type="CAUSAL_LM"
)
model.add_adapter(peft_config)الآن يمكنك تدريب النموذج باستخدام فئة Trainer في Transformers أو أي إطار عمل تدريب تفضله.
للاستخدام النموذج المدرَّب حديثًا في الاستدلال، تستخدم فئة AutoModel تقنية PEFT في الخلفية لتحميل أوزان المُكيِّف وملف الإعدادات إلى نموذج مُسبَق التدريب أساسي.
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("peft-internal-testing/opt-350m-lora")بديلًا عن ذلك، يمكنك استخدام Pipelines في transformers لتحميل النموذج من أجل تشغيل الاستدلال (Inference) بسهولة:
from transformers import pipeline
model = pipeline("text-generation", "peft-internal-testing/opt-350m-lora")
print(model("Hello World"))إذا كنت مهتمًا بمقارنة أكثر من مُكيّف أو استخدامه، يمكنك استدعاء طريقة add_adapter() لإضافة تكوين المُكيّف إلى النموذج الأساسي. الشرط الوحيد هو أن يكون نوع المُكيّف متطابقًا (لا يمكنك مزج مُكيّف LoRA مع مُكيّف LoHa).
from transformers import AutoModelForCausalLM
from peft import LoraConfig
model = AutoModelForCausalLM.from_pretrained("facebook/opt-350m")
model.add_adapter(lora_config_1, adapter_name="adapter_1")استدعِ add_adapter() مرة أخرى لإرفاق مُكيّف جديد بالنموذج الأساسي.
model.add_adapter(lora_config_2, adapter_name="adapter_2")ثم يمكنك استخدام set_adapter() لتعيين المُكيّف النشط حاليًا.
model.set_adapter("adapter_1")
output = model.generate(**inputs)
print(tokenizer.decode(output_disabled[0], skip_special_tokens=True))لإلغاء تفعيل المُكيّف، استدعِ طريقة disable_adapters.
model.disable_adapters()
يمكن استخدام enable_adapters لإعادة تفعيل المُكيّفات.
إذا كنت مهتمًا، فتعرّف على المزيد من خلال شروحات تحميل وتدريب المحوِّلات باستخدام PEFT.
Update on GitHub