Buckets:

hf-doc-build/doc / diffusers /main /tr /training /unconditional_training.md
mishig's picture
|
download
raw
8.73 kB

Koşulsuz görüntü üretimi

Koşulsuz görüntü üretim modelleri, eğitim sırasında metin veya görüntülerle koşullandırılmaz. Sadece eğitim veri dağılımına benzeyen görüntüler üretir.

Bu kılavuz, train_unconditional.py eğitim betiğini inceleyerek onu tanımanıza ve kendi kullanım senaryonuza nasıl uyarlayabileceğinizi gösterir.

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 gerekli bağımlılıkları yükleyin:

cd examples/unconditional_image_generation
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 sunar. Tüm parametreler ve açıklamaları parse_args() fonksiyonunda bulunur. Eğitim komut boyutu ve öğrenme oranı gibi her parametre için varsayılan değerler sağlar, ancak isterseniz eğitim komutunda kendi değerlerinizi de ayarlayabilirsiniz.

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

accelerate launch train_unconditional.py \
  --mixed_precision="bf16"

Belirtilmesi gereken bazı temel ve önemli parametreler şunlardır:

  • --dataset_name: Hub'daki veri setinin adı veya eğitim için kullanılacak veri setine yerel bir yol
  • --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ğitimi sırasında bir checkpoint'in kaydedilme sıklığı; eğitim yarıda kesilirse, eğitim komutunuza --resume_from_checkpoint ekleyerek bu checkpoint'ten eğitime devam edebilirsiniz

Veri setinizi getirin ve geri kalan her şeyi eğitim betiğine bırakın!

Eğitim betiği

Veri setini ön işleme ve eğitim döngüsüne ait kod, main() fonksiyonunda bulunur. Eğitim betiğini uyarlaması gerekiyorsa, değişiklikleri burada yapmanız gerekir.

train_unconditional betiği, bir model yapılandırması sağlamadığınızda UNet2DModel başlatır. İsterseniz UNet'i burada yapılandırabilirsiniz:

model = UNet2DModel(
    sample_size=args.resolution,
    in_channels=3,
    out_channels=3,
    layers_per_block=2,
    block_out_channels=(128, 128, 256, 256, 512, 512),
    down_block_types=(
        "DownBlock2D",
        "DownBlock2D",
        "DownBlock2D",
        "DownBlock2D",
        "AttnDownBlock2D",
        "DownBlock2D",
    ),
    up_block_types=(
        "UpBlock2D",
        "AttnUpBlock2D",
        "UpBlock2D",
        "UpBlock2D",
        "UpBlock2D",
        "UpBlock2D",
    ),
)

Ardından, betik bir scheduler ve optimizer başlatır:

# Initialize the scheduler
accepts_prediction_type = "prediction_type" in set(inspect.signature(DDPMScheduler.__init__).parameters.keys())
if accepts_prediction_type:
    noise_scheduler = DDPMScheduler(
        num_train_timesteps=args.ddpm_num_steps,
        beta_schedule=args.ddpm_beta_schedule,
        prediction_type=args.prediction_type,
    )
else:
    noise_scheduler = DDPMScheduler(num_train_timesteps=args.ddpm_num_steps, beta_schedule=args.ddpm_beta_schedule)

# Initialize the optimizer
optimizer = torch.optim.AdamW(
    model.parameters(),
    lr=args.learning_rate,
    betas=(args.adam_beta1, args.adam_beta2),
    weight_decay=args.adam_weight_decay,
    eps=args.adam_epsilon,
)

Ardından bir veri seti yükler ve nasıl ön işleme yapılacağını belirleyebilirsiniz:

dataset = load_dataset("imagefolder", data_dir=args.train_data_dir, cache_dir=args.cache_dir, split="train")

augmentations = transforms.Compose(
    [
        transforms.Resize(args.resolution, interpolation=transforms.InterpolationMode.BILINEAR),
        transforms.CenterCrop(args.resolution) if args.center_crop else transforms.RandomCrop(args.resolution),
        transforms.RandomHorizontalFlip() if args.random_flip else transforms.Lambda(lambda x: x),
        transforms.ToTensor(),
        transforms.Normalize([0.5], [0.5]),
    ]
)

Son olarak, eğitim döngüsü, görüntülere gürültü ekleme, gürültü artığını tahmin etme, kaybı hesaplama, belirtilen adımlarda denetim noktalarını (checkpoint) kaydetme ve modeli Hub'a kaydedip gönderme gibi diğer tüm işlemleri ele alır. 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 atabilirsiniz.

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! 🚀

Tam bir eğitim çalışması 4xV100 GPU'larda 2 saat sürer.

accelerate launch train_unconditional.py \
  --dataset_name="huggan/flowers-102-categories" \
  --output_dir="ddpm-ema-flowers-64" \
  --mixed_precision="fp16" \
  --push_to_hub

Birden fazla GPU ile eğitim yapıyorsanız, eğitim komutuna --multi_gpu parametresini ekleyin:

accelerate launch --multi_gpu train_unconditional.py \
  --dataset_name="huggan/flowers-102-categories" \
  --output_dir="ddpm-ema-flowers-64" \
  --mixed_precision="fp16" \
  --push_to_hub

Eğitim betiği, depolamanızda bir kontrol noktası dosyası oluşturur ve kaydeder. Şimdi eğittiğiniz modeli yükleyip çıkarım için kullanabilirsiniz:

from diffusers import DiffusionPipeline
import torch

pipeline = DiffusionPipeline.from_pretrained("anton-l/ddpm-butterflies-128").to("cuda")  # or "mps", "xpu", "cpu"
image = pipeline().images[0]

Xet Storage Details

Size:
8.73 kB
·
Xet hash:
d0507cc55ac5537ec00017256a467b9890a012753bd7ea6727c705a2623bb8cd

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