29.
sizin kavramakta zorlandığınız yeni bir yazılım sahasında, ben onlarca hatayı tek seferde çözdüm, model eğitimini python la basit birkaç kodla sınırlandırdım. tüm bu satırların ne anlam ifade ettiğini, kornia, torchvision, xformers, transformers gibi kütüphaneleri, çalışma mantıklarını da öğrendim.
from pathlib import Path
import subprocess
# Dosya yollarını tanımla
pretrained_model_path = Path("/home/kratertepesi/ComfyUI/models/Stable-diffusion/sd-v1-4.ckpt")
train_data_dir = Path("/home/kratertepesi/veri/5_isa")
output_dir = Path("/home/kratertepesi")
# Komutu oluştur
command = [
"python",
"/home/kratertepesi/ComfyUI/custom_nodes/Lora-Training-in-Comfy/train.py",
f"--num_cpu_threads_per_process=16",
f"--pretrained_model_name_or_path={pretrained_model_path}",
f"--train_data_dir={train_data_dir}",
f"--resolution=512,512",
f"--output_dir={output_dir}",
f"--use_8bit_adam",
f"--xformers",
f"--logging_dir=",
f"--network_module=networks.lora",
f"--text_encoder_lr=5e-5",
f"--unet_lr=1e-3",
f"--network_dim=8",
f"--output_name=wny",
f"--learning_rate=1e-5",
f"--lr_scheduler=kosinüs",
f"--lr_warmup_steps=70",
f"--train_batch_size=1",
f"--max_train_steps=700",
f"--save_every_n_epochs=1",
f"--mixed_precision=fp16",
f"--save_precision=fp16",
f"--seed=1234",
f"--cache_latents",
f"--max_data_loader_n_workers=1",
f"--fp8_base"
]
# Komutu çalıştır
subprocess.run(command, check=True)
bir diğer örnek:
import os
import PIL
import torch
from torch.utils.data import Dataset, DataLoader
from transformers import CLIPTextModel, CLIPTokenizer
from peft import get_peft_model, LoraConfig
from diffusers import UNet2DConditionModel, StableDiffusionPipeline
from transformers import TrainingArguments, Trainer
# ROCm GPU bellek ayarları
os.environ['PYTORCH_HIP_ALLOC_CONF'] = 'expandable_segments:True'
# GPU cihazını seç
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
class CustomDataset(Dataset):
def __init__(self, img_dir, txt_dir):
self.img_dir = img_dir
self.txt_dir = txt_dir
self.img_files = sorted([f for f in os.listdir(img_dir) if f.endswith('.png'))
self.txt_files = sorted([f for f in os.listdir(txt_dir) if f.endswith('.txt'))
def __len__(self):
return len(self.img_files)
def __getitem__(self, idx):
img_path = os.path.join(self.img_dir, self.img_files[idx])
txt_path = os.path.join(self.txt_dir, self.txt_files[idx])
with open(txt_path, 'r') as file:
caption = file.read()
image = PIL.Image.open(img_path).convert("RGB")
return image, caption
def main():
model_name = "epicrealismXL_v8Kiss.safetensors"
model_dir = "/home/kratertepesi/ComfyUI/models/checkpoints/"
# Model ağırlık dosyalarının bulunduğu dizin
model_path = os.path.join(model_dir, model_name)
# Modeli yükle
if not os.path.isfile(model_path):
raise FileNotFoundError(f"Model file {model_name} not found in {model_dir}")
# Ağırlıkları doğrudan yükle
unet = UNet2DConditionModel.from_pretrained(model_path)
text_encoder = CLIPTextModel.from_pretrained(model_path)
tokenizer = CLIPTokenizer.from_pretrained(model_path) # Tokenizer yükle, eğer varsa
pipe = StableDiffusionPipeline(unet=unet, text_encoder=text_encoder, tokenizer=tokenizer)
pipe = pipe.to(device)
# Lora konfigürasyonunu ayarla
lora_config = LoraConfig(
base_model=pipe.unet,
target_modules=["cross_attention"], # Hedef modülleri kontrol edin
lora_alpha=32,
lora_dropout=0.1
)
lora_model = get_peft_model(pipe.unet, lora_config)
# Eğitim ayarlarını yapın
training_args = TrainingArguments(
output_dir="./results",
per_device_train_batch_size=2,
num_train_epochs=3,
logging_dir="./logs",
logging_steps=10,
)
# Eğitim veri kümesini oluştur
dataset = CustomDataset(img_dir="/home/kratertepesi/veri/", txt_dir="/home/kratertepesi/veri/")
dataloader = DataLoader(dataset, batch_size=training_args.per_device_train_batch_size, shuffle=True)
# Trainer'ı oluştur
trainer = Trainer(
model=lora_model,
args=training_args,
train_dataset=dataset
)
# Modeli eğit
trainer.train()
if __name__ == "__main__":
main()