Une chaîne d'outils pour la création et la formation de diffusion stable 1.x, la diffusion stable 2.x et les modèles de diffusion XL stables avec des ensembles de données personnalisés.
Avec cette chaîne d'outils, vous pouvez:
>=3.8>=22.0.0 Vous trouverez ci-dessous un résumé de chaque étape du processus de génération de jeux de données. Pour un exemple complet de qualité de production, voir E621-Rising-Configs (NSFW).
# install DatasetRising
pip3 install DatasetRising
# start MongoDB database; use `dr-db-down` to stop
dr-db-up DataSet Rising a un robot ( dr-crawl ) pour télécharger les métadonnées (= publications et tags) à partir de cartes d'image de style Booru.
Vous devez sélectionner une chaîne d'agent utilisateur unique pour votre robot ( --agent AGENT_STRING ). Cette chaîne sera transmise à la carte d'image avec chaque demande HTTP. Si vous ne choisissez pas un agent utilisateur qui vous identifie de manière unique, les cartes d'image bloqueront probablement vos demandes. Par exemple:
--agent 'my-imageboard-crawler/1.0 (user @my-username-on-the-imageboard)'
Le Crawler gérera automatiquement les limites de taux et les tentatives. Si vous souhaitez reprendre automatiquement une analyse précédente (échouée), utilisez --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> 'Cette section nécessite une base de données MongoDB en cours d'exécution, que vous pouvez commencer par la commande
dr-db-up.
Une fois que vous avez suffisamment de métadonnées de publication et de balise, il est temps d'importer les données dans une base de données.
DataSet Rising utilise MongoDB comme magasin pour les métadonnées publiques et tag. Utilisez dr-import pour importer les métadonnées téléchargées à l'étape précédente dans MongoDB.
Si vous souhaitez ajuster la façon dont les métadonnées de la balise sont traitées pendant l'importation, examinez les fichiers dans <dataset-rising>/examples/tag_normalizer et définissez les paramètres facultatifs --prefilter FILE , --rewrites FILE , --aspect-ratios FILE , --category-weights FILE et --symbols FILE en conséquence.
dr-import --tags /tmp/e926.net-tags.jsonl --posts /tmp/e926.net-posts.jsonl --source e926Cette section nécessite une base de données MongoDB en cours d'exécution, que vous pouvez commencer par la commande
dr-db-up.
Une fois les métadonnées importées dans une base de données, vous pouvez utiliser des fichiers sélecteurs pour sélectionner un sous-ensemble des messages dans un ensemble de données.
Votre objectif n'est pas d'inclure toutes les images, mais de produire un ensemble d'échantillons de haute qualité . Les sélecteurs sont le mécanisme pour cela.
Chaque sélecteur contient une liste positive et négative des balises. Un message sera inclus par le sélecteur, s'il contient au moins une balise de la liste positive et aucune des balises de la liste négative .
Notez qu'un excellent ensemble de données contiendra des exemples positifs et négatifs. Si vous ne formez que votre ensemble de données avec des échantillons positifs, votre modèle ne pourra pas bien utiliser des invites négatives. C'est pourquoi les exemples ci-dessous incluent quatre types différents de sélecteurs.
DataSet Rising a des exemples de sélecteurs disponibles dans <dataset-rising>/examples/select .
Pour vous assurer que vos sélecteurs produisent le type d'échantillons que vous souhaitez, utilisez le script 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-artistsCette section nécessite une base de données MongoDB en cours d'exécution, que vous pouvez commencer par la commande
dr-db-up.
Lorsque vous êtes convaincu que les sélecteurs produisent le bon type d'échantillons, il est temps de sélectionner les publications pour la construction d'un ensemble de données. Utilisez dr-select pour sélectionner les publications dans la base de données et les stocker dans un fichier 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 Après avoir sélectionné les publications de l'ensemble de données, utilisez dr-join pour combiner les sélections et dr-build pour télécharger les images et créer l'ensemble de données réel.
Par défaut, le script de construction élagage toutes les balises qui ont moins de 100 échantillons. Pour ajuster cette limite, utilisez --min-posts-per-tag LIMIT .
Le script de construction élaguera également toutes les images qui ont moins de 10 balises. Pour ajuster cette limite, utilisez --min-tags-per-post LIMIT .
L'ajout d'un pourcentage à la fin d'une --source indique au script de construction de choisir autant d'échantillons de l'ensemble de données total de la source donnée, par exemple --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 ' Après avoir construit votre ensemble de données, téléchargez-le sur Huggingface.
L'ensemble de données construit par le script dr-build est maintenant prêt à être utilisé pour la formation. DataSet Rising utilise un accélération de HuggingFace pour former des modèles de diffusion stables.
Pour former un modèle, vous devrez choisir un modèle de base pour commencer. Le --base-model peut être n'importe quel modèle compatible des diffuseurs, tel que:
Notez que vos résultats de formation seront considérablement améliorés si vous définissez --image-width et --image-height pour correspondre à la résolution avec laquelle le modèle de base a été formé.
Notez que l'étape de formation suppose que vous avez déjà téléchargé votre ensemble de données sur HuggingFace.
Cet exemple ne s'étend pas sur plusieurs GPU. Voir la section thèmes avancés pour la formation multi-GPU.
Cet exemple utilise
dr-train-xl, qui est conçu pour la formation de modèles XL de diffusion stable. Si vous souhaitez former des modèles stables de diffusion 1.x ou stable de diffusion 2.x, utilisez plutôtdr-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 0Cette étape n'a pas encore été mise en œuvre. Il est sûr de sauter cette étape.
Après la formation, vous pouvez utiliser le script dr-generate pour vérifier que le modèle fonctionne comme prévu.
dr-generate
--model ' /tmp/dataset-rising-v3-model '
--output ' /tmp/samples '
--prompt ' cat playing chess with a horse '
--samples 100 Afin d'utiliser le modèle avec une diffusion stable WebUI, il doit être converti au 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 ' La seule partie de l'ensemble de données qui nécessite une désinstallation est la base de données MongoDB. Vous pouvez désinstaller la base de données avec les commandes suivantes:
# Shut down MongoDB instance
dr-db-down
# Remove MongoDB container and its data -- warning! data loss will occur
dr-db-uninstallPour réinitialiser la base de données, exécutez les commandes suivantes.
Avertissement: vous perdrez toutes les données dans la base de données.
dr-db-uninstall && dr-db-up && dr-db-create Le script append vous permet d'importer des publications à partir de sources supplémentaires.
Utilisez import pour importer la première source et définissez l'espace de noms de balise, puis utilisez append pour importer des sources supplémentaires.
# main sources and tags
dr-import ...
# additional sources
dr-append --input /tmp/gelbooru-posts.jsonl --source gelbooruLa formation multi-GPU peut être effectuée avec la bibliothèque Accelerate Accelerate.
Avant la formation, exécutez accelerate config pour configurer votre environnement multi-GPU.
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 ) Certaines configurations nécessiteront NCCL_P2P_DISABLE=1 et / ou NCCL_IB_DISABLE=1 variables d'environnement à définir.
export NCCL_P2P_DISABLE=1
export NCCL_IB_DISABLE=1
dr-train-xl ... HF_MODULES_CACHE HF_DATASETS_CACHE
export HF_DATASETS_CACHE=/workspace/cache/huggingface/datasets
export HF_MODULES_CACHE=/workspace/cache/huggingface/modules
dr-train-xl ...Crée un environnement virtuel, installe des packages et configure une base de données MongoDB sur Docker.
cd < dataset-rising >
./up.sh Arrête le conteneur de la base de données MongoDB. La base de données peut être redémarrée en exécutant ./up.sh à nouveau.
cd < dataset-rising >
./down.shAVERTISSEMENT: Cette étape supprime le conteneur de la base de données MongoDB et toutes les données stockées dessus.
cd < dataset-rising >
./uninstall.shpython3 -m pip install --upgrade build twine
python3 -m build
python3 -m twine upload dist/ * Organigramme TD
Crawl [Crawl / Téléchargez des messages, des balises et des alias étiquettes] - JSONL -> Importer
Importer [Importer des messages, des balises et des alias de balises] -> Store
Ajouter [Ajouter des messages supplémentaires] -> Store
Store [base de données] -> Aperçu
Store -> SELECT1
Store -> select2
Store -> SELECT3
Aperçu [Aperçu des sélecteurs] -> HTML (HTML)
SELECT1 [SELECT SEMPLES] - JSONL -> JOIN
SELECT2 [Sélectionner des échantillons] - JSONL -> JOIN
SELECT3 [SELECT SEMPLES] - JSONL -> JOIN
Rejoignez [Rejoignez et taillez les échantillons] - JSONL -> Build
Build [Build DataSet] - HF DataSet / Parquet -> Train
Train [Train Model] -> Modèle [modèle]