Eine Toolchain zum Erstellen und Training stabiler Diffusion 1.x, stabiler Diffusion 2.x und stabilen Diffusions -XL -Modellen mit benutzerdefinierten Datensätzen.
Mit dieser Toolchain können Sie:
>=3.8>=22.0.0 Im Folgenden finden Sie eine Zusammenfassung jedes Schritts im Prozess der Datensatzgenerierung. Ein umfassendes Beispiel für Produktionsqualität finden Sie in E621-Anstiegskonfiguren (NSFW).
# install DatasetRising
pip3 install DatasetRising
# start MongoDB database; use `dr-db-down` to stop
dr-db-up DataSet Rising verfügt über einen Crawler ( dr-crawl ) zum Herunterladen von Metadaten (= Posts und Tags) von Image Boards im Booru-Stil.
Sie müssen eine eindeutige Benutzeragentenzeichenfolge für Ihren Crawler ( --agent AGENT_STRING ) auswählen. Diese Zeichenfolge wird mit jeder HTTP -Anfrage an die Bildplatine übergeben. Wenn Sie keinen Benutzeragenten auswählen, der Sie eindeutig identifiziert, blockieren die Image Boards Ihre Anfragen wahrscheinlich. Zum Beispiel:
--agent 'my-imageboard-crawler/1.0 (user @my-username-on-the-imageboard)'
Der Crawler verwaltet automatisch Tarifbegrenzungen und -versuche. Wenn Sie automatisch ein früheres (fehlgeschlagenes) Crawl fortsetzen möchten, verwenden Sie --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> 'Dieser Abschnitt erfordert eine laufende MongoDB-Datenbank, die Sie mit
dr-db-upBefehl beginnen können.
Sobald Sie über genügend Post- und Tag -Metadaten verfügen, ist es an der Zeit, die Daten in eine Datenbank zu importieren.
Dataset Rising verwendet MongoDB als Speicher für die Post- und Tag -Metadaten. Verwenden Sie dr-import , um die im vorherigen Schritt heruntergeladenen Metadaten in MongoDB zu importieren.
Wenn Sie während des Imports anpassen möchten, wie die Tag-Metadaten behandelt werden, überprüfen Sie die Dateien in <dataset-rising>/examples/tag_normalizer und setzen Sie die optionalen Parameter --prefilter FILE , --rewrites FILE , die Datei --aspect-ratios FILE , --category-weights FILE und --symbols FILE angemessen.
dr-import --tags /tmp/e926.net-tags.jsonl --posts /tmp/e926.net-posts.jsonl --source e926Dieser Abschnitt erfordert eine laufende MongoDB-Datenbank, die Sie mit
dr-db-upBefehl beginnen können.
Nachdem die Metadaten in eine Datenbank importiert wurden, können Sie Selektordateien verwenden, um eine Teilmenge der Beiträge in einem Datensatz auszuwählen.
Ihr Ziel ist es nicht , alle Bilder aufzunehmen, sondern eine Reihe hochwertiger Proben zu erstellen. Die Selektoren sind der Mechanismus dafür.
Jeder Selektor enthält eine positive und negative Liste von Tags. Ein Beitrag wird vom Selektor enthalten, wenn er mindestens ein Tag aus der positiven Liste und keiner der Tags in der negativen Liste enthält.
Beachten Sie, dass ein großartiger Datensatz positive und negative Beispiele enthält. Wenn Sie Ihren Datensatz nur mit positiven Proben trainieren, kann Ihr Modell keine negativen Eingabeaufforderungen verwenden. Aus diesem Grund enthalten die folgenden Beispiele vier verschiedene Arten von Selektoren.
Der Datensatz-Aufstieg verfügt über Beispiel-Selektoren, die in <dataset-rising>/examples/select verfügbar sind.
Um sicherzustellen, dass Ihre Selektoren die gewünschten Muster produzieren, verwenden Sie das dr-preview -Skript:
# 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-artistsDieser Abschnitt erfordert eine laufende MongoDB-Datenbank, die Sie mit
dr-db-upBefehl beginnen können.
Wenn Sie zuversichtlich sind, dass die Selektoren die richtigen Muster produzieren, ist es an der Zeit, die Beiträge zum Erstellen eines Datensatzes auszuwählen. Verwenden Sie dr-select um Beiträge aus der Datenbank auszuwählen und in einer JSONL-Datei zu speichern.
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 Verwenden Sie nach Auswahl der Beiträge für den Datensatz dr-join dr-build um die Auswahl zu kombinieren und die Bilder herunterzuladen und den tatsächlichen Datensatz zu erstellen.
Standardmäßig dreht das Build -Skript alle Tags mit weniger als 100 Beispielen. Um diese Grenze anzupassen, verwenden Sie --min-posts-per-tag LIMIT .
Das Build -Skript wird auch alle Bilder mit weniger als 10 Tags beschneiden. Um diese Grenze anzupassen, verwenden Sie --min-tags-per-post LIMIT .
Wenn Sie einen Prozentsatz am Ende einer --source hinzufügen, wird das Build -Skript angewiesen, dass viele Muster des gesamten Datensatzes aus der angegebenen Quelle, z. B. --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 ' Laden Sie nach dem Erstellen Ihres Datensatzes ihn auf das Umarmungsface hoch.
Der Datensatz, der vom dr-build -Skript erstellt wurde, ist nun für das Training bereit. Dataset Rising verwendet Huggingface Accelerate, um stabile Diffusionsmodelle zu trainieren.
Um ein Modell zu trainieren, müssen Sie zu Beginn ein Basismodell auswählen. Das --base-model kann jedes Diffusoren-kompatible Modell sein, wie z. B.:
Beachten Sie, dass Ihre Trainingsergebnisse erheblich verbessert werden, wenn Sie --image-width und --image-height um der Auflösung des Basismodells zu entsprechen.
Beachten Sie, dass die Trainingsphase davon ausgeht, dass Sie Ihren Datensatz bereits auf das Umarmungsface hochgeladen haben.
Dieses Beispiel skaliert nicht auf mehrere GPUs. Siehe Abschnitt mit fortgeschrittenen Themen für Multi-GPU-Schulungen.
In diesem Beispiel wird
dr-train-xlverwendet, das für das Training stabiler Diffusions-XL-Modelle ausgelegt ist. Wenn Sie stabile Diffusion 1.x oder stabile Diffusion 2.x-Modelle trainieren möchten, verwenden Sie stattdessendr-train.
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 0Dieser Schritt wurde noch nicht implementiert. Es ist sicher, diesen Schritt zu überspringen.
Nach dem Training können Sie das dr-generate -Skript verwenden, um zu überprüfen, ob das Modell wie erwartet funktioniert.
dr-generate
--model ' /tmp/dataset-rising-v3-model '
--output ' /tmp/samples '
--prompt ' cat playing chess with a horse '
--samples 100 Um das Modell mit stabilen Diffusions -Webui zu verwenden, muss es in das safetensors -Format umgewandelt werden.
# 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 ' Der einzige Teil des Datensatzes, der eine Deinstallation erfordert, ist die MongoDB -Datenbank. Sie können die Datenbank mit den folgenden Befehlen deinstallieren:
# Shut down MongoDB instance
dr-db-down
# Remove MongoDB container and its data -- warning! data loss will occur
dr-db-uninstallFühren Sie die folgenden Befehle aus, um die Datenbank zurückzusetzen.
Warnung: Sie werden alle Daten in der Datenbank verlieren.
dr-db-uninstall && dr-db-up && dr-db-create Mit dem append können Sie Beiträge aus zusätzlichen Quellen importieren.
Verwenden Sie import , um die erste Quelle zu importieren und den Tagspace zu definieren. Verwenden Sie dann append um zusätzliche Quellen zu importieren.
# main sources and tags
dr-import ...
# additional sources
dr-append --input /tmp/gelbooru-posts.jsonl --source gelbooruMulti-GPU-Training kann mit der Bindungsbibliothek von Huggingface Accelerate durchgeführt werden.
Führen Sie vor dem Training accelerate config aus, um Ihre Multi-GPU-Umgebung einzurichten.
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 ) Einige Konfigurationen erfordern NCCL_P2P_DISABLE=1 und/oder NCCL_IB_DISABLE=1 Umgebungsvariablen.
export NCCL_P2P_DISABLE=1
export NCCL_IB_DISABLE=1
dr-train-xl ... Verwenden Sie HF_DATASETS_CACHE und HF_MODULES_CACHE um zu steuern, wo das Huggingface seine Cache -Dateien speichert
export HF_DATASETS_CACHE=/workspace/cache/huggingface/datasets
export HF_MODULES_CACHE=/workspace/cache/huggingface/modules
dr-train-xl ...Erstellt eine virtuelle Umgebung, installiert Pakete und richtet eine MongoDB -Datenbank auf Docker ein.
cd < dataset-rising >
./up.sh Stoppt den MongoDB -Datenbankcontainer. Die Datenbank kann durch Ausführen erneut gestartet werden ./up.sh erneut.
cd < dataset-rising >
./down.shWarnung: Dieser Schritt beseitigt den MongoDB -Datenbankcontainer und alle darauf gespeicherten Daten.
cd < dataset-rising >
./uninstall.shpython3 -m pip install --upgrade build twine
python3 -m build
python3 -m twine upload dist/ * Flussdiagramm TD
CRABS [CRAB/Download Posts, Tags und Tag -Aliase] -JSONL -> Importieren
Importieren [Posts, Tags und Tag -Aliase] -> Speicher
Hängen Sie [zusätzliche Beiträge an, die Sie anhängen] -> Speichern
Store [Datenbank] -> Vorschau
Store -> SELECT1
Store -> Select2
Store -> Select3
Vorschau [Vorschau -Selektoren] -> HTML (HTML)
SELECT1 [SELECT SHOMPLE] -JSONL -> Join
Select2 [Beispiele auswählen] -JSONL -> Join
SELECT3 [SELECT SHOMPLE] -JSONL -> Join
Melden
Erstellen Sie [dataSet erstellen] -HF -Datensatz/Parquet -> Zug
Zug [Zugmodell] -> Modell [Modell]