Toolchain untuk membuat dan melatih difusi stabil 1.x, difusi stabil 2.x, dan model XL difusi stabil dengan kumpulan data khusus.
Dengan toolchain ini, Anda dapat:
>=3.8>=22.0.0 Di bawah ini adalah ringkasan dari setiap langkah dalam proses pembuatan dataset. Untuk contoh berkualitas produksi penuh, lihat E621-Rising-Configs (NSFW).
# install DatasetRising
pip3 install DatasetRising
# start MongoDB database; use `dr-db-down` to stop
dr-db-up Dataset Rising memiliki crawler ( dr-crawl ) untuk mengunduh metadata (= posting dan tag) dari papan gambar bergaya booru.
Anda harus memilih string agen pengguna yang unik untuk crawler Anda ( --agent AGENT_STRING ). String ini akan diteruskan ke papan gambar dengan setiap permintaan HTTP. Jika Anda tidak memilih agen pengguna yang secara unik mengidentifikasi Anda, papan gambar kemungkinan akan memblokir permintaan Anda. Misalnya:
--agent 'my-imageboard-crawler/1.0 (user @my-username-on-the-imageboard)'
Crawler akan secara otomatis mengelola batas dan coba lagi. Jika Anda ingin secara otomatis melanjutkan merangkak sebelumnya (gagal), gunakan --recover .
# # download tag metadata to /tmp/tags.jsonl
dr-crawl --output /tmp/e962-tags.jsonl --type tags --source e926 --recover --agent ' <AGENT_STRING> '
# # download posts metadata to /tmp/e926.net-posts.jsonl
dr-crawl --output /tmp/e926.net-posts.jsonl --type posts --source e926 --recover --agent ' <AGENT_STRING> 'Bagian ini membutuhkan basis data MongoDB yang sedang berjalan, yang dapat Anda mulai dengan perintah
dr-db-up.
Setelah Anda memiliki cukup pos dan tag metadata, saatnya untuk mengimpor data ke dalam database.
Dataset Rising menggunakan MongoDB sebagai toko untuk postingan dan tag metadata. Gunakan dr-import untuk mengimpor metadata yang diunduh pada langkah sebelumnya ke MongoDB.
Jika Anda ingin menyesuaikan cara metadata tag diperlakukan selama impor, tinjau file dalam <dataset-rising>/examples/tag_normalizer dan atur file parameter opsional --prefilter FILE , --rewrites FILE , --aspect-ratios FILE , --category-weights FILE , dan --symbols FILE yang sesuai.
dr-import --tags /tmp/e926.net-tags.jsonl --posts /tmp/e926.net-posts.jsonl --source e926Bagian ini membutuhkan basis data MongoDB yang sedang berjalan, yang dapat Anda mulai dengan perintah
dr-db-up.
Setelah metadata diimpor ke dalam database, Anda dapat menggunakan file pemilih untuk memilih subset posting dalam dataset.
Tujuan Anda bukan untuk memasukkan semua gambar, tetapi untuk menghasilkan satu set sampel berkualitas tinggi . Selector adalah mekanisme untuk itu.
Setiap pemilih berisi daftar tag yang positif dan negatif . Posting akan dimasukkan oleh pemilih, jika berisi setidaknya satu tag dari daftar positif dan tidak ada tag dalam daftar negatif .
Perhatikan bahwa dataset yang hebat akan berisi contoh -contoh positif dan negatif. Jika Anda hanya melatih dataset dengan sampel positif, model Anda tidak akan dapat menggunakan petunjuk negatif dengan baik. Itu sebabnya contoh di bawah ini mencakup empat jenis pemilih yang berbeda.
Dataset Rising memiliki contoh selektor yang tersedia dalam <dataset-rising>/examples/select .
Untuk memastikan pemilih Anda memproduksi jenis sampel yang Anda inginkan, gunakan skrip dr-preview :
# generate a HTML preview of how the selector will perform (note: --aggregate is required):
dr-preview --selector ./examples/select/tier-1/tier-1.yaml --output /tmp/preview/tier-1 --limit 1000 --output --aggregate
# generate a HTML preview of how each sub-selector will perform:
dr-preview --selector ./examples/select/tier-1/helpers/artists.yaml --output /tmp/preview/tier-1-artistsBagian ini membutuhkan basis data MongoDB yang sedang berjalan, yang dapat Anda mulai dengan perintah
dr-db-up.
Ketika Anda yakin bahwa para penyeleksi memproduksi sampel jenis yang tepat, saatnya untuk memilih posting untuk membangun dataset. Gunakan dr-select untuk memilih posting dari database dan menyimpannya dalam file JSONL.
cd < dataset-rising > /database
dr-select --selector ./examples/select/tier-1/tier-1.yaml --output /tmp/tier-1.jsonl
dr-select --selector ./examples/select/tier-2/tier-2.yaml --output /tmp/tier-2.jsonl Setelah memilih posting untuk dataset, gunakan dr-join untuk menggabungkan pilihan dan dr-build untuk mengunduh gambar dan membangun dataset yang sebenarnya.
Secara default, skrip build memangkas semua tag yang memiliki kurang dari 100 sampel. Untuk menyesuaikan batas ini, gunakan --min-posts-per-tag LIMIT .
Skrip build juga akan memangkas semua gambar yang memiliki kurang dari 10 tag. Untuk menyesuaikan batas ini, gunakan --min-tags-per-post LIMIT .
Menambahkan persentase di akhir --source memberi tahu skrip build untuk memilih banyak sampel dari total dataset dari sumber yang diberikan, misalnya --source ./my.jsonl:50% .
dr-join
--samples ' /tmp/tier-1.jsonl:80% '
--samples ' /tmp/tier-2.jsonl:20% '
--output ' /tmp/joined.jsonl '
dr-build
--source ' /tmp/joined.jsonl '
--output ' /tmp/my-dataset ' Setelah membangun dataset Anda, unggah ke Huggingface.
Dataset yang dibangun oleh skrip dr-build sekarang siap digunakan untuk pelatihan. Dataset Rising menggunakan Huggingface Accelerate untuk melatih model difusi yang stabil.
Untuk melatih model, Anda harus memilih model dasar untuk memulai. --base-model dapat berupa model yang kompatibel dengan difuser, seperti: seperti:
Perhatikan bahwa hasil pelatihan Anda akan ditingkatkan secara signifikan jika Anda menetapkan --image-width dan --image-height untuk mencocokkan resolusi yang dilatih oleh model dasar.
Perhatikan bahwa tahap pelatihan mengasumsikan bahwa Anda telah mengunggah dataset Anda ke Huggingface.
Contoh ini tidak skala ke beberapa GPU. Lihat bagian Topik Lanjutan untuk pelatihan multi-GPU.
Contoh ini menggunakan
dr-train-xl, yang dirancang untuk melatih model XL difusi stabil. Jika Anda ingin melatih difusi stabil 1.x atau model difusi 2.x yang stabil, gunakandr-trainsebagai gantinya.
dr-train-xl
--pretrained-model-name-or-path ' stabilityai/stable-diffusion-xl-base-1.0 '
--dataset-name ' username/dataset-name '
--output ' /tmp/dataset-rising-v3-model '
--resolution 1024
--maintain-aspect-ratio
--reshuffle-tags
--tag-separator ' '
--random-flip
--train-batch-size 32
--learning-rate 4e-6
--use-ema
--max-grad-norm 1
--checkpointing-steps 1000
--lr-scheduler constant
--lr-warmup-steps 0Langkah ini belum diterapkan. Aman untuk melewatkan langkah ini.
Setelah pelatihan, Anda dapat menggunakan skrip dr-generate untuk memverifikasi bahwa model berfungsi seperti yang diharapkan.
dr-generate
--model ' /tmp/dataset-rising-v3-model '
--output ' /tmp/samples '
--prompt ' cat playing chess with a horse '
--samples 100 Untuk menggunakan model dengan WebUI difusi yang stabil, ia harus dikonversi ke format safetensors .
# Stable Diffusion XL models:
dr-convert-sdxl
--model_path ' /tmp/dataset-rising-v3-model '
--checkpoint_path ' /tmp/dataset-rising-v3-model.safetensors '
--use_safetensors
# Other Stable Diffusion models:
dr-convert-sd
--model_path ' /tmp/dataset-rising-v3-model '
--checkpoint_path ' /tmp/dataset-rising-v3-model.safetensors '
--use_safetensors
# Copy the model to the WebUI models directory:
cp ' /tmp/dataset-rising-v3-model.safetensors ' ' <webui-root>/models/Stable-diffusion ' Satu -satunya bagian dari dataset yang meningkat yang membutuhkan penghancuran adalah database MongoDB. Anda dapat menghapus database dengan perintah berikut:
# Shut down MongoDB instance
dr-db-down
# Remove MongoDB container and its data -- warning! data loss will occur
dr-db-uninstallUntuk mengatur ulang database, jalankan perintah berikut.
Peringatan: Anda akan kehilangan semua data dalam database.
dr-db-uninstall && dr-db-up && dr-db-create Script append memungkinkan Anda untuk mengimpor posting dari sumber tambahan.
Gunakan import untuk mengimpor sumber pertama dan tentukan tag namespace, lalu gunakan append untuk mengimpor sumber tambahan.
# main sources and tags
dr-import ...
# additional sources
dr-append --input /tmp/gelbooru-posts.jsonl --source gelbooruPelatihan Multi-GPU dapat dilakukan dengan Perpustakaan Accelerate Huggingface.
Sebelum pelatihan, jalankan accelerate config untuk mengatur lingkungan multi-GPU Anda.
cd < dataset-rising > /train
# set up environment
accelerate config
# run training
accelerate launch
--multi_gpu
--mixed_precision= ${PRECISION}
dr_train.py
--pretrained-model-name-or-path ' stabilityai/stable-diffusion-xl-base-1.0 '
--dataset-name ' username/dataset-name '
--resolution 1024
--maintain-aspect-ratio
--reshuffle-tags
--tag-separator ' '
--random-flip
--train-batch-size 32
--learning-rate 4e-6
--use-ema
--max-grad-norm 1
--checkpointing-steps 1000
--lr-scheduler constant
--lr-warmup-steps 0dataset-risinghuggingface-cli login )accelerate config )aws configure ) Beberapa konfigurasi akan memerlukan NCCL_P2P_DISABLE=1 dan/atau NCCL_IB_DISABLE=1 variabel lingkungan yang akan diatur.
export NCCL_P2P_DISABLE=1
export NCCL_IB_DISABLE=1
dr-train-xl ... Gunakan HF_DATASETS_CACHE dan HF_MODULES_CACHE untuk mengontrol di mana huggingface menyimpan file cache -nya
export HF_DATASETS_CACHE=/workspace/cache/huggingface/datasets
export HF_MODULES_CACHE=/workspace/cache/huggingface/modules
dr-train-xl ...Membuat lingkungan virtual, menginstal paket, dan mengatur database MongoDB di Docker.
cd < dataset-rising >
./up.sh Menghentikan wadah basis data MongoDB. Basis data dapat dimulai kembali dengan menjalankan ./up.sh lagi.
cd < dataset-rising >
./down.shPERINGATAN: Langkah ini menghapus wadah database MongoDB dan semua data yang disimpan di atasnya.
cd < dataset-rising >
./uninstall.shpython3 -m pip install --upgrade build twine
python3 -m build
python3 -m twine upload dist/ * Flowchart TD
Crawl [merangkak/unduh posting, tag, dan tag alias] -jsonl -> impor
Impor [Posting Impor, Tag, dan Tag Alias] -> Store
Tambahkan [Tambahkan Posting Tambahan] -> Store
Simpan [Database] -> Pratinjau
Store -> Select1
Store -> Select2
Store -> Select3
Pratinjau [Selektor Pratinjau] -> HTML (HTML)
SELECT1 [SELECT SAMPLES] -JSONL -> BERGABUNG
SELECT2 [SELECT SAMPLES] -JSONL -> BERGABUNG
SELECT3 [SELECT SAMPLES] -JSONL -> BERGABUNG
Bergabunglah [bergabung dan pangkas sampel] -jsonl -> build
Bangun [Bangun Dataset] -HF Dataset/Parket -> Train
Kereta [model kereta] -> model [model]