Buckets:

mishig's picture
|
download
raw
10.8 kB

Metinden görüntüye

Metinden görüntüye betiği deneyseldir ve aşırı öğrenme (overfitting) ile katastrofik unutma gibi sorunlara düşmek kolaydır. Veri setinizde en iyi sonuçları almak için farklı hiperparametreleri denemenizi öneririz.

Stable Diffusion gibi metinden görüntüye modeller, bir metin komutu verildiğinde görüntü üretmek üzere koşullandırılmıştır.

Bir model eğitmek donanımınız üzerinde zorlayıcı olabilir, ancak gradient_checkpointing ve mixed_precision özelliklerini etkinleştirirseniz, bir modeli tek bir 24GB GPU üzerinde eğitmek mümkündür. Daha büyük batch boyutlarıyla eğitim yapıyorsanız veya daha hızlı eğitim almak istiyorsanız, 30GB'tan fazla belleğe sahip GPU'lar kullanmak daha iyidir. xFormers ile bellek verimli dikkati (memory-efficient attention) etkinleştirerek bellek kullanımınızı azaltabilirsiniz.

Bu kılavuz, train_text_to_image.py eğitim betiğini inceleyerek onu tanımanıza ve kendi kullanım senaryonuza nasıl uyarlayabileceğinizi göstermenize yardımcı olacaktır.

Betik çalıştırmadan önce, kütüphanenin kaynak kodundan yüklendiğinden emin olun:

git clone https://github.com/huggingface/diffusers
cd diffusers
pip install .

Ardından, eğitim betiğini içeren örnek klasörüne gidin ve kullandığınız betik için gerekli bağımlılıkları yükleyin:

cd examples/text_to_image
pip install -r requirements.txt

🤗 Accelerate, birden fazla GPU/TPU ile veya karma hassasiyetle eğitim yapmanıza yardımcı olmak için tasarlanmış bir kütüphanedir. Donanımınıza ve ortamınıza göre eğitim kurulumunuzu otomatik olarak yapılandırır. Daha fazla bilgi edinmek için 🤗 Accelerate Hızlı tur sayfasına göz atın.

Bir 🤗 Accelerate ortamı başlatın:

accelerate config

Herhangi bir yapılandırma seçmeden varsayılan bir 🤗 Accelerate ortamı kurmak için:

accelerate config default

Ya da ortamınız, bir notebook gibi, etkileşimli bir kabuğu desteklemiyorsa, şunu kullanabilirsiniz:

from accelerate.utils import write_basic_config

write_basic_config()

Son olarak, kendi veri setiniz üzerinde bir model eğitmek istiyorsanız, eğitim scriptiyle uyumlu bir veri seti oluşturma yöntemini öğrenmek için Eğitim için veri seti oluşturma kılavuzuna göz atın.

Betik parametreleri

Aşağıdaki bölümler, betiğin nasıl değiştirileceğini anlamak için önemli olan eğitim betiğinin kısımlarını vurgular, ancak betiğin her yönünü ayrıntılı olarak kapsamaz. Daha fazla bilgi edinmek isterseniz, betiği okumaktan çekinmeyin ve herhangi bir sorunuz veya endişeniz varsa bize bildirin.

Eğitim betiği, eğitim çalışmanızı özelleştirmenize yardımcı olmak için birçok parametre sağlar. Tüm parametreler ve açıklamaları parse_args() fonksiyonunda bulunur. Bu fonksiyon, eğitim batch boyutu ve öğrenme oranı gibi her parametre için varsayılan değerler sağlar, ancak isterseniz kendi değerlerinizi eğitim komutunda da belirleyebilirsiniz.

Örneğin, fp16 biçimini kullanarak karma hassasiyetle eğitimi hızlandırmak için eğitim komutuna --mixed_precision parametresini ekleyin:

accelerate launch train_text_to_image.py \
  --mixed_precision="fp16"

Bazı temel ve önemli parametreler şunlardır:

  • --pretrained_model_name_or_path: Hub'daki modelin adı veya önceden eğitilmiş modele yerel bir yol
  • --dataset_name: Hub'daki veri setinin adı veya eğitim için kullanılacak veri setine yerel bir yol
  • --image_column: eğitim için kullanılacak veri setindeki görüntü sütununun adı
  • --caption_column: eğitim için kullanılacak veri setindeki metin sütununun adı
  • --output_dir: eğitilen modelin kaydedileceği yer
  • --push_to_hub: eğitilen modelin Hub'a gönderilip gönderilmeyeceği
  • --checkpointing_steps: modelin eğitim sırasında checkpoint kaydetme sıklığı; eğitim herhangi bir nedenle yarıda kesilirse, eğitim komutunuza --resume_from_checkpoint ekleyerek bu checkpoint'ten eğitim devam ettirebilirsiniz

Min-SNR ağırlıklandırma

Min-SNR ağırlıklandırma stratejisi, kaybı yeniden dengeleyerek daha hızlı yakınsama elde edilmesine yardımcı olarak eğitime katkıda bulunabilir. Eğitim betiği, epsilon (gürültü) veya v_prediction tahmin etmeyi destekler, ancak Min-SNR her iki tahmin türüyle de uyumludur. Bu ağırlıklandırma stratejisi yalnızca PyTorch tarafından desteklenir.

--snr_gamma parametresini ekleyin ve önerilen değer olan 5.0 olarak ayarlayın:

accelerate launch train_text_to_image.py \
  --snr_gamma=5.0

Farklı snr_gamma değerleri için kayıp yüzeylerini bu Weights and Biases raporunda karşılaştırabilirsiniz. Daha küçük veri kümelerinde, Min-SNR'nin etkileri, daha büyük veri kümelerine kıyasla o kadar belirgin olmayabilir.

Eğitim betiği

Veri seti ön işleme kodu ve eğitim döngüsü main() fonksiyonunda bulunur. Eğitim betiğini uyarlamanız gerekiyorsa, değişikliklerinizi burada yapmanız gerekir.

train_text_to_image betiği, bir zamanlayıcıyı ve belirteç ayrıştırıcıyı yükleyerek başlar. İsterseniz burada farklı bir zamanlayıcı kullanmayı seçebilirsiniz:

noise_scheduler = DDPMScheduler.from_pretrained(args.pretrained_model_name_or_path, subfolder="scheduler")
tokenizer = CLIPTokenizer.from_pretrained(
    args.pretrained_model_name_or_path, subfolder="tokenizer", revision=args.revision
)

Ardından betik UNet modelini yükler:

load_model = UNet2DConditionModel.from_pretrained(input_dir, subfolder="unet")
model.register_to_config(**load_model.config)

model.load_state_dict(load_model.state_dict())

Ardından, veri setinin metin ve görüntü sütunlarının ön işlenmesi gerekir. tokenize_captions işlevi girdilerin tokenizasyonunu ele alır ve train_transforms işlevi, görüntüye uygulanacak dönüşümlerin türünü belirtir. Bu iki işlev preprocess_train içinde bir araya getirilir:

def preprocess_train(examples):
    images = [image.convert("RGB") for image in examples[image_column]]
    examples["pixel_values"] = [train_transforms(image) for image in images]
    examples["input_ids"] = tokenize_captions(examples)
    return examples

Son olarak, eğitim döngüsü her şeyi halleder. Görselleri latent uzaya kodlar, latentlere gürültü ekler, koşul olarak kullanılacak metin gömme değerlerini hesaplar, model parametrelerini günceller ve modeli Hub'a kaydeder ve gönderir. Eğitim döngüsünün nasıl çalıştığını daha ayrıntılı öğrenmek isterseniz, gürültü azaltma sürecinin temel kalıbını açıklayan Pipeline'ları, modelleri ve zamanlayıcıları anlama eğitim materyaline göz atın.

Betik başlat

Tüm değişikliklerinizi yaptıysanız veya varsayılan yapılandırmayla sorununuz yoksa, eğitim betiğini başlatmaya hazırsınız! 🚀

Kendi Naruto karakterlerinizi üretmek için Naruto BLIP captions veri setinde eğitim yapalım. Ortam değişkenlerini MODEL_NAME ve dataset_name olarak model ve veri setine (Hub'dan veya yerel bir yoldan) ayarlayın. Birden fazla GPU üzerinde eğitim yapıyorsanız, accelerate launch komutuna --multi_gpu parametresini ekleyin.

Yerel bir veri setinde eğitim yapmak için TRAIN_DIR ve OUTPUT_DIR ortam değişkenlerini, veri setinin yoluna ve modelin kaydedileceği konuma ayarlayın.

export MODEL_NAME="stable-diffusion-v1-5/stable-diffusion-v1-5"
export dataset_name="lambdalabs/naruto-blip-captions"

accelerate launch --mixed_precision="fp16"  train_text_to_image.py \
  --pretrained_model_name_or_path=$MODEL_NAME \
  --dataset_name=$dataset_name \
  --use_ema \
  --resolution=512 --center_crop --random_flip \
  --train_batch_size=1 \
  --gradient_accumulation_steps=4 \
  --gradient_checkpointing \
  --max_train_steps=15000 \
  --learning_rate=1e-05 \
  --max_grad_norm=1 \
  --enable_xformers_memory_efficient_attention \
  --lr_scheduler="constant" --lr_warmup_steps=0 \
  --output_dir="sd-naruto-model" \
  --push_to_hub

Eğitim tamamlandıktan sonra, yeni eğittiğiniz modeli çıkarım için kullanabilirsiniz:

from diffusers import StableDiffusionPipeline
import torch

pipeline = StableDiffusionPipeline.from_pretrained("path/to/saved_model", dtype=torch.float16, use_safetensors=True).to("cuda")  # or "mps", "xpu", "cpu"

image = pipeline(prompt="yoda").images[0]
image.save("yoda-naruto.png")

Sonraki adımlar

Kendi metinden görüntüye modelinizi eğittiğiniz için tebrikler! Yeni modelinizi nasıl kullanacağınızı öğrenmek için aşağıdaki kılavuzlar size yardımcı olabilir:

  • Modelinizi LoRA ile eğittiyseniz, çıkarım için LoRA ağırlıklarını yükleme yöntemini öğrenin.
  • Rehber ölçeği gibi belirli parametrelerin veya prompt ağırlıklandırma gibi tekniklerin çıkarımı nasıl kontrol etmenize yardımcı olabileceğini öğrenmek için Metinden görüntüye görev kılavuzuna göz atın.

Xet Storage Details

Size:
10.8 kB
·
Xet hash:
a7f5d5619752c7833a1792dfcd221063313790646726f2885d4754747edf25e1

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.