Çözüldü Stable Diffusion'da training yaparken "half Precision" hatası

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

38life

Kilopat
Katılım
24 Temmuz 2013
Mesajlar
103
Çözümler
1
Yer
İstanbul
Daha fazla  
Sistem Özellikleri
Asus Tuf Gamıng B550M-E * AMD Ryzen 5 5600 * Artctic Freezer 34 E-sport DUO * Intel ARC A770 * 2x 16GB Apacer Panther ddr4 3600 * Corsair MP600 PRO XT 1 TB Gen4 PCIe x4 NVMe M.2 SSD * Samsung 860 EVO 500GB SSD * Seagate Barracuda 1TB HDD * Zalman Z11 Plus
Cinsiyet
Erkek
Stable Diffusion Vladmandic forkunda Train embedding yaptığımda,

For now, XPU device does not support model training with half precision.

Hatası alıyorum. Bu half Precision kapatılabilir mi? Kapatılırsa ne olur? Bunları merak ediyorum.

İşletim Sistemi: Ubuntu 22.04
Ekran Kartı: Intel Arc A770
 
Son düzenleyen: Moderatör:
Çözüm
Bu sorun Intel ile alakalı. Şu anda float16 training desteği yok, bfloat16 kullanmalısınız.
Compute Settings ayarlarından "Device precision type" seçeneğini BF16 olarak seçin.
Ek olarak Batch Size olarak 4'ü geçmeyin, Intel sürücüleri sapıtmaya başlıyor yoksa.

GradScaler için de bu rehberdeki Training adımlarını uygulayın:
@38life GradScaler için bir ayar yok, IPEX kullandığınız zaman IPEX kodunu çalıştırıyor zaten.
Compute Settings ayarlarından "Device precision type" seçeneğini BF16 veya FP32 olarak seçin yeter.

Textual Inversion ile modelin bilmediği bir şey öğretemezsiniz. Textual Inversion, prompt kısmı ile oynuyor.
Modelin bilmediği bir şey öğretebilmek için ya Dreambooth ile direkt modeli eğitmeniz gerek.
Ya da LoRa veya HyperNetworks ile modül eğitmeniz gerek.

Ek olarak datasetiniz de GIGO büyük ihtimal.
Fotoğrafların ne olduğunu yapay zekaya teker teker anlatmak zorundasınız ve fotoğrafların tarzı aynı olmalı.


200 adımdan sonra çıkıt:

1686645954071.png


1000 adımdan sonra çıkıt:

1686647537056.png


Datasetten örnek bit .txt dosyası:

Kod:
(chibi:1.000), (hatsune_miku:1.000), (1girl:0.992), (long_hair:0.992), (very_long_hair:0.992), (twintails:0.984), (detached_sleeves:0.977), (bow:0.941), (open_mouth:0.934), (holding:0.914), (solo:0.906), (smile:0.875), (white_background:0.875), (aqua_hair:0.844), (aqua_eyes:0.836), (skirt:0.820), (shirt:0.809), (thighhighs:0.801), (bowtie:0.781), (standing:0.762), (full_body:0.668)

Dataset:
Çözünürlük 512x512.

1686645970520.png



Eğitim ayarları:

1686648056630.png


1686646133391.png
 
Son düzenleme:
@Disty Yani mesela kendi yüzümün fotoğraflarını textual inversion ile tanıtamaz mıyım? Aslında preprocess işlemi yaparak otomatik .txt dosyaları oluşturdum fotoğrafı tarif eden. Sonra da onları düzenleyip arkaplan ile ilgili tanımlamaları çıkardım. Ama geriye kalan tanımlar sadece a man with beard, a man with mustache minvalinde şeylerdi. :D yani çok da açıklayıcı değil. Fotoğraflar da aynı tarzda değil evet, hepsi farklı yerlerde, farklı açılarda, farklı ışıklarda çekilmiş. Daha önce Google Collab üzerinde Dreambooth ile bu tarz fotoğraflarla başarılı sonuç almıştım.

Benim .txt dosyalarında normal prompt gibi yazıyordu bu arada sendeki gibi ":1.000" ifadeleri yoktu.
 
@38life Dreambooth direkt modeli eğitiyor ve yüzünüzü öğretiyor.
Textual Inversion ise modeli eğitmez, modelden istediğimiz çıktıyı nasıl alabileceğimizi bulmaya çalışır.
Model sizi tanımıyorsa Textual Inversion yerine HyperNetworks / LoRa veya Dreambooth kullanmalısınız.

:1.000 ifadeleri deepbooru taglerinden otomatik geldi, ben de değiştirme ihtiyacı duymadım.

Edit:
XPU Autocast sorunlu galiba, bozuk görüntü hataları veriyor ve tam da çalışmıyor zaten.
Autocast loss'u bozsa anlarım ama direkt embedding'i siliyor.
Batch size 4'ü geçmeyin.
 
Son düzenleme:
@Disty Dreambooth ile LORA kullanarak train yapmayı denedim şimdi. "Torch not compiled with CUDA enabled" hatası verdi.
 
@Disty Dreambooth ile LORA kullanarak train yapmayı denedim şimdi. "Torch not compiled with CUDA enabled" hatası verdi.
Onlar faklı eklenti. CUDA için yazıldıklarından çalışmaması normal.
SD WebUI gibi CUDA yerine OneAPI desteğinin eklenmesi gerek.
 
HyperNetworks ile denedim yine olmadı. Verdiği çıktılar kaynak resimlerle alakasız. Sanki sadece txt dosyasındaki promotları baz alıyor gibi bir hali var. Txt dosyası olmayan kaynak klasörünü gösterdim, o zaman da tamamen alakasız çıktılar verdi. @Disty

Şimdi de sadece noise üretmeye başladı. Bi halt anlamadım bu işten.
 
Son düzenleme:
@38life
GradScaler'i çalıştırabildim sonunda. Automatic klasörü içinde bu komutu çalıştırın ve WebUI'ı güncelleyip yeniden başlatın:
Bash:
wget https://raw.githubusercontent.com/Disty0/ipex_grad_scaler/main/patch.sh && chmod +x patch.sh && ./patch.sh
 
@38life
GradScaler'i çalıştırabildim sonunda. Automatic klasörü içinde bu komutu çalıştırın ve WebUI'ı güncelleyip yeniden başlatın:
Bash:
wget https://raw.githubusercontent.com/Disty0/ipex_grad_scaler/main/patch.sh && chmod +x patch.sh && ./patch.sh
Helal olsun sana. Tebrikler :)

Diğer yandan ben hala hypernetworks ile istediğim sonucu alamıyorum. Stili anlıyor, yani mesela full siyah tişörtle çekinilmiş fotoğraflardan oluşan br dataset verdiğin zaman yine siyah tişörtlü sonuçlar veriyor hep. Ama fotoğraflardaki yüzü kesinlikle tanıyamıyor, yanından bile geçmiyor hatta. txt dosyalarında a man with beard and mustache yazıyor mesela ve çıktılarda kocaman sakal ve bıyıklar oluyor abartılı şekilde, ama yüzün detayları tamamen alakasız. Kurcalıyorum ayarları, tekrar tekrar deniyorum ama bakalım...
 
@38life GradScaler ile tekrar deneyin. Ek olarka kaç adım denediniz?
Yeni bir şey öğretiyorsanız eğitmeniz 20.000 adım, yani 4-5 saatten uzun sürer.
 
@38life GradScaler ile tekrar deneyin. Ek olarka kaç adım denediniz?
Yeni bir şey öğretiyorsanız eğitmeniz 20.000 adım, yani 4-5 saatten uzun sürer.
Önceki mesajda dediklerinizi yaptım. Kodu çalıştırdım güncellemeyi yaptım. BF16 seçili. Onun dışında train ekranında gradscaler ile ilgili bir şey yapmak gerekiyor muydu? Gradient clipping var ama o disabled durumda. Açınca hata veriyor zaten.

3000 adımda deniyorum. Ama zaten automatic/cmd_opts.data_dir/train/log/embeddings klasörü altında çıktıları takip ediyorum. Alakasız şeyler çıkınca stop ediyorum train işlemini.
 

Geri
Yukarı