Diffusers documentation
PEFT
PEFT
يدعم Diffusers تحميل المُكيّفات (adapters) مثل LoRA باستخدام مكتبة PEFT من خلال فئة PeftAdapterMixin. وهذا يتيح لفئات النمذجة في Diffusers مثل UNet2DConditionModel وSD3Transformer2DModel العمل مع مُكيّف.
راجع شروحات الاستدلال باستخدام PEFT للحصول على نظرة عامة حول كيفية استخدام PEFT في Diffusers للاستدلال.
PeftAdapterMixin
فئة تحتوي على جميع الدوال الخاصة بتحميل واستخدام أوزان المحوِّلات (adapters) المدعومة في مكتبة PEFT. لمزيد من التفاصيل حول المحوِّلات وحقنها في النموذج الأساسي، راجع التوثيق الخاص بـ PEFT.
قم بتثبيت أحدث إصدار من PEFT، واستخدم هذا المكوّن المدمج (mixin) للقيام بما يلي:
- إرفاق محوِّلات جديدة في النموذج.
- إرفاق عدة محددات وتفعيلها/تعطيلها بشكل متكرر.
- تفعيل/تعطيل جميع المُكيّفات من النموذج.
- احصل على قائمة بالمُكيِّفات النشطة.
يحصل على القائمة الحالية للمُكيِّفات النشطة للنموذج.
إذا لم تكن على دراية بالمُكيِّفات (Adapters) وطرق PEFT، ندعوك إلى قراءة المزيد عنها في التوثيق الخاص بـ PEFT.
add_adapter
< source >( adapter_configadapter_name: str = 'default' )
المعاملات
- adapter_config (
[~peft.PeftConfig]) — إعدادات المُكيّف (adapter) المُراد إضافته؛ المُكيّفات المدعومة هي طرق الضبط غير البادئة (non-prefix tuning) و prompts التكيفية (adaption prompt). - adapter_name (
str، اختياري، الافتراضي"default") — اسم المُكيّف (adapter) الذي سيتم إضافته. إذا لم يتم تمرير اسم، فسيتم تعيين اسم افتراضي للمُكيّف.
يضيف مُكيّفًا جديدًا إلى النموذج الحالي للتدريب. إذا لم يتم تمرير اسم للمكيّف، يُسند اسم افتراضي للمكيّف لاتباع اتفاقية مكتبة PEFT.
إذا لم تكن على دراية بالمُكيِّفات (Adapters) وطرق PEFT، ندعوك إلى قراءة المزيد عنها في التوثيق الخاص بـ PEFT.
delete_adapters
< source >( adapter_names: list[str] | str )
احذف طبقات LoRA الخاصة بالمُكيّف من النموذج الأساسي.
مثال:
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
"jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_names="cinematic"
)
pipeline.unet.delete_adapters("cinematic")تعطيل جميع المُكيّفات (adapters) المرتبطة بالنموذج والعودة إلى الاستدلال باستخدام النموذج الأساسي فقط.
إذا لم تكن على دراية بالمُكيِّفات (Adapters) وطرق PEFT، ندعوك إلى قراءة المزيد عنها في التوثيق الخاص بـ PEFT.
يعطّل طبقات LoRA النشطة في النموذج الأساسي.
مثال:
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
"jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.unet.disable_lora()تفعيل المُكيّفات (adapters) المرتبطة بالنموذج. يستخدم النموذج self.active_adapters() لاسترجاع قائمة المُكيّفات التي يجب تفعيلها.
إذا لم تكن على دراية بالمُكيِّفات (Adapters) وطرق PEFT، ندعوك إلى قراءة المزيد عنها في التوثيق الخاص بـ PEFT.
يُفعّل طبقات LoRA النشطة في النموذج الأساسي.
مثال:
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
"jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.unet.enable_lora()enable_lora_hotswap
< source >( target_rank: int = 128check_compiled: typing.Literal['error', 'warn', 'ignore'] = 'error' )
المعاملات
- target_rank (
int، اختياري، القيمة الافتراضية128) — أعلى رتبة بين جميع المحوِّلات التي سيتم تحميلها. - check_compiled (
str, اختياري, الافتراضي هو"error") — كيفية التعامل مع الحالة التي يكون فيها النموذج مُجمَّعًا مسبقًا، وهو ما ينبغي تجنّبه بشكل عام. الخيارات هي:- “error” (الافتراضي): يرمي خطأ
- “warn”: إصدار تحذير
- “ignore”: لا تفعل شيئًا
يتيح إمكانية تبديل محولات LoRA بشكل فوري.
لا يُشترط استدعاء هذه الطريقة إلا عند تبديل المحولات (adapters) بشكل مباشر، وفي حال كان النموذج مُجمَّعًا (compiled) أو إذا اختلفت رتب المحولات المُحمَّلة.
load_lora_adapter
< source >( pretrained_model_name_or_path_or_dictprefix = 'transformer'hotswap: bool = False**kwargs )
المعاملات
- pretrained_model_name_or_path_or_dict (
strأوos.PathLikeأوdict) — يمكن أن يكون أحد ما يلي:- سلسلة نصية، وهي معرف النموذج (على سبيل المثال
google/ddpm-celebahq-256) لنموذج مُدرَّب مسبقًا مستضاف على الـ Hub. - مسار إلى مجلد (على سبيل المثال
./my_model_directory) يحتوي على أوزان النموذج المحفوظة باستخدام ModelMixin.save_pretrained(). - حالة torch.
- سلسلة نصية، وهي معرف النموذج (على سبيل المثال
- prefix (
str، اختياري) — بادئة لتصفية state dict. - cache_dir (
str | os.PathLike، اختياري) — المسار إلى مجلد حيث يتم تخزين إعدادات النموذج المُدرَّب مسبقًا المُحمَّل مؤقتًا إذا لم يُستخدم المجلد المؤقت القياسي. - force_download (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب إجبار إعادة تنزيل أوزان النموذج وملفات الإعداد، مع تجاوز النسخ المخزنة مؤقتًا إذا كانت موجودة. - proxies (
dict[str, str]، اختياري) — قاموس لخوادم الوكيل (proxy) للاستخدام حسب البروتوكول أو نقطة النهاية، على سبيل المثال{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. تُستخدم هذه الوكلاء في كل طلب. - local_files_only (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم تحميل أوزان النموذج وملفات الإعداد المحلية فقط أم لا. إذا تم ضبطه علىTrue، فلن يتم تنزيل النموذج من Hub. - token (
strأو bool، اختياري) — الرمز الذي يُستخدم كتفويض حامل HTTP للملفات البعيدة. إذا كانTrue، يُستخدم الرمز المولّد منdiffusers-cli login(المخزّن في~/.huggingface). - revision (
str، اختياري، القيمة الافتراضية"main") — الإصدار المحدد من النموذج الذي سيتم استخدامه. يمكن أن يكون اسم فرع، أو اسم وسم، أو معرف commit، أو أي معرّف مسموح به بواسطة Git. - subfolder (
str، اختياري، الافتراضي"") — موقع المجلد الفرعي لملف النموذج داخل مستودع نموذج أكبر على Hub أو محليًا. - network_alphas (
dict[str, float]) — قيمة ألفا للشبكة المستخدمة للتعلم المستقر ومنع النقص. تحمل هذه القيمة نفس معنى الخيار--network_alphaفي سكربت المدرب kohya-ss. راجع هذا الرابط. - low_cpu_mem_usage (
bool، اختياري) — تسريع تحميل النموذج من خلال تحميل أوزان LoRA المُدرَّبة مسبقًا فقط دون تهيئة الأوزان العشوائية. - hotswap — (
bool, اختياري) القيمة الافتراضية هيFalse. ما إذا كان يجب استبدال مُكيّف (LoRA) موجود بمُكيّف جديد تم تحميله في مكانه. وهذا يعني أنه، بدلاً من تحميل مُكيّف إضافي، سيتم أخذ أوزان المُكيّف الحالي واستبدالها بأوزان المُكيّف الجديد. يمكن أن يكون هذا أسرع وأكثر كفاءة في استخدام الذاكرة. ومع ذلك، فإن الميزة الرئيسية للاستبدال السريع هي أنه عند تجميع النموذج باستخدام torch.compile، لا يتطلب تحميل المُكيّف الجديد إعادة تجميع النموذج. عند استخدام الاستبدال السريع، يجب أن يكونadapter_nameاسم مُكيّف تم تحميله بالفعل.إذا كان للمُكيّف الجديد والمُكيّف القديم رتب مختلفة و/أو قيم LoRA alphas مختلفة (أي معاملات التوسيع)، فستحتاج إلى استدعاء طريقة إضافية قبل تحميل المُكيّف:
يحمّل مُكيّف LoRA في النموذج الأساسي.
save_lora_adapter
< source >( save_directoryadapter_name: str = 'default'upcast_before_saving: bool = Falsesafe_serialization: bool = Trueweight_name: str | None = None )
المعاملات
- save_directory (
strأوos.PathLike) — المجلد الذي سيتم حفظ معاملات LoRA فيه. سيتم إنشاؤه إذا لم يكن موجودًا. - adapter_name — (
str، القيمة الافتراضية هي “default”): اسم المُكيّف الذي سيتم تسلسله. يكون مفيدًا عندما يحتوي النموذج الأساسي على عدة مُكيّفات محمّلة. - upcast_before_saving (
bool، القيمة الافتراضيةFalse) — ما إذا كان يجب تحويل النموذج الأساسي إلىtorch.float32قبل التسلسل. - safe_serialization (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم حفظ النموذج باستخدامsafetensorsأو بالطريقة التقليدية الخاصة بـ PyTorch باستخدامpickle. - weight_name — (
str، اختياري، القيمة الافتراضيةNone): اسم الملف الذي سيتم من خلاله تسلسل قاموس الحالة.
احفظ معاملات LoRA المقابلة للنموذج الأساسي.
set_adapter
< source >( adapter_name: str | list[str] )
يُعيّن مُكيّفًا محددًا من خلال إجبار النموذج على استخدام ذلك المُكيّف فقط، مع تعطيل المُكيّفات الأخرى.
إذا لم تكن على دراية بالمُكيِّفات (Adapters) وطرق PEFT، ندعوك إلى قراءة المزيد عنها في التوثيق الخاص بـ PEFT.
set_adapters
< source >( adapter_names: list[str] | strweights: float | dict | list[float] | list[dict] | list[None] | None = None )
اضبط المُكيِّفات (adapters) النشطة حاليًا للاستخدام في شبكة الانتشار (مثل unet وtransformer وغيرها).
مثال:
from diffusers import AutoPipelineForText2Image
import torch
pipeline = AutoPipelineForText2Image.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
).to("cuda")
pipeline.load_lora_weights(
"jbilcke-hf/sdxl-cinematic-1", weight_name="pytorch_lora_weights.safetensors", adapter_name="cinematic"
)
pipeline.load_lora_weights("nerijs/pixel-art-xl", weight_name="pixel-art-xl.safetensors", adapter_name="pixel")
pipeline.unet.set_adapters(["cinematic", "pixel"], weights=[0.5, 0.5])