تدريب لورا باستخدام تطبيق Microsoft الرسمي مع نماذج نشر مستقرة. هذه هي الطريقة الأكثر كفاءة وأسهل لتدريب Loras دون التعقيد الإضافي أثناء مشاركتها أيضًا بين المكتبات والتطبيقات.
؟ هذا الريبو لا يزال في التطوير النشط. توقع الحشرات حتى تتم إزالة علامة WIP . ؟
استنساخ هذا المستودع في مجلد التدريب الخاص بك:
git clone https://github.com/ExponentialML/Stable-LoRAتثبيت المتطلبات من هذا المستودع:
pip install -r requirements.txtيتم التدريب باستخدام مكتبة الناشرون.
انظر example_train_script.sh للحصول على نص مثال من Dreambooth.
تشغيل الأمر سهلة مثل القيام:
accelerate launch train_lora . py
- - pretrained_model_name_or_path = "runwayml/stable-diffusion-v1-5"
- - instance_data_dir = "instance_images"
- - lora_rank = 64
- - output_dir = "./output"
- - instance_prompt = "a shld dog"
- - resolution = 512
- - mixed_precision = "fp16"
- - train_text_encoder
- - learning_rate = 1e-4
- - resize = True
- - save_steps = 200
- - preview_steps = 100
- - lr_scheduler = "constant_with_warmup"
- - lr_warmup_steps = 50
- - max_train_steps = 5000
- - save_preview
- - preview_prompt = "a shld dog as a super hero"بعد التدريب ، سيتم حفظ النتائج في مجلد الإخراج الخاص بك.
بشكل افتراضي ، يتم حفظ متغير Webui Automatic1111 بجانبها (تمديد Webui قيد التطوير).
ما عليك سوى إضافته إلى النموذج الخاص بك قبل حلقة التدريب.
# Import function to add the LoRA, as well as target modules.
from stable_lora . lora import add_lora_to , UNET_REPLACE , TEXT_ENCODER_REPLACE
from diffusers import StableDiffusionPipeline
# Load a Stable Diffusion Model
pipeline = StableDiffusionPipeline . from_pretrained ( pretrained_model_name_or_path )
# Freeze the models. Remember, only the LoRA weights get trained, not the model itself.
pipeline . unet . requires_grad_ ( False )
pipeline . text_encoder . requires_grad_ ( False )
# Add LoRA to the UNET
add_lora_to (
pipeline . unet ,
target_module = UNET_REPLACE ,
search_class = [ torch . nn . Linear , torch . nn . Conv2d ],
r = 32
)
# Add LoRA to the Text Encoder
add_lora_to ( pipeline . text_encoder , target_module = TEXT_ENCODER_REPLACE , r = 32 )
# Your optimizers and training code...بعد إضافة LORA إلى النموذج الخاص بك ، يمكنك بسهولة إضافة معلمات محسّنة معلمة WISE إذا لزم الأمر.
# Example
unet_params = []
text_encoder_params = []
for n , p in unet . named_parameters ():
if 'lora' in n :
unet_params . append ({
"params" : p ,
"lr" : args . learning_rate
})
for n , p in text_encoder . named_parameters ():
if 'lora' in n :
text_encoder_params . append ({
"params" : p ,
"lr" : args . learning_rate_text
})
optimizer_params = unet_params + text_encoder_params يمكن أن يتم التوفير باستخدام Safetensors أو الطريقة التقليدية ، باستخدام ملفات .pt :
from stable_lora . lora import save_lora
save_lora ( unet , path = 'save_file_path.safetensors' )
save_lora ( text_encoder = text_encoder , use_safetensors = False , path = 'save_file_path.pt' )بالإضافة إلى ذلك ، يمكنك تعيين الوضع على التقييم أو وضع القطار.
from stable_lora . lora import set_mode
# Train mode
set_mode ( unet , is_train = True )
# Evaluation mode
set_mode ( unet , is_train = False )تم اختبار هذا على النماذج المستقرة للانتشار 1.5.
يوصى بتجربة معدلات التعلم 5e-6 و 3e-5 و 1e-4 .
المرتبة الافتراضية هي 32 ، ولكن يمكن ضبطها عن طريق تمريرها عبر المعلمة r سوف يستهلك استخدام الرتب الأدنى ذاكرة أقل ، مع وجود صفوف عالية تستهلك المزيد. هذا يساهم أيضا في ملف حفظ الأحجام.
تعتمد هذه العوامل فقط على مهمتك ، ولكنها نقطة انطلاق جيدة.
يمكنك أيضًا تمكين التحيزات للتدريب أيضًا.
اعتمادًا على بياناتك ومعدل التعلم ، قد تكون قادرًا على الضغط على أداء إضافي من التدريب.
# Example | Applicable to Unet or Text Encoder
lora_bias = 'lora_only'
add_lora_to ( pipeline . text_encoder , target_module = TEXT_ENCODER_REPLACE , r = 32 , lora_bias = lora_bias )
# Must be set here as well when saving.
save_lora ( text_encoder = text_encoder , use_safetensors = True , path = 'save_file_path.pt' , lora_bias = lora_bias )PT & safetensors ). Cloneofsimo لرمز تنفيذ Lora الخاص بهم.
Microsoft للرمز الرسمي.