Una cadena de herramientas para crear y capacitar a la difusión estable 1.x, difusión estable 2.x y modelos de difusión estable XL con conjuntos de datos personalizados.
Con esta cadena de herramientas, puedes:
>=3.8>=22.0.0 A continuación se muestra un resumen de cada paso en el proceso de generación de conjuntos de datos. Para un ejemplo completo de calidad de producción, consulte E621-Rising-Configs (NSFW).
# install DatasetRising
pip3 install DatasetRising
# start MongoDB database; use `dr-db-down` to stop
dr-db-up DataSet Rising tiene un Crawler ( dr-crawl ) para descargar metadatos (= publicaciones y etiquetas) de tableros de imágenes de estilo Booru.
Debe seleccionar una cadena de agente de usuario única para su rastreador ( --agent AGENT_STRING ). Esta cadena se pasará al tablero de imágenes con cada solicitud HTTP. Si no elige a un agente de usuario que lo identifique de manera única, los tableros de imágenes probablemente bloquearán sus solicitudes. Por ejemplo:
--agent 'my-imageboard-crawler/1.0 (user @my-username-on-the-imageboard)'
El rastreador administrará automáticamente los límites de velocidad y los reintentos. Si desea reanudar automáticamente un rastreo anterior (fallido), use --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> 'Esta sección requiere una base de datos MongoDB, que puede comenzar con el comando
dr-db-up.
Una vez que tenga suficientes metadatos de publicación y etiqueta, es hora de importar los datos a una base de datos.
DataSet Rising utiliza MongoDB como una tienda para los metadatos de publicación y etiqueta. Use dr-import para importar los metadatos descargados en el paso anterior en MongoDB.
Si desea ajustar cómo se tratan los metadatos de la etiqueta durante la importación, revise los archivos en <dataset-rising>/examples/tag_normalizer y establezca el archivo de parámetros opcionales --prefilter FILE , --rewrites FILE --aspect-ratios FILE , el --category-weights FILE y --symbols FILE en consecuencia.
dr-import --tags /tmp/e926.net-tags.jsonl --posts /tmp/e926.net-posts.jsonl --source e926Esta sección requiere una base de datos MongoDB, que puede comenzar con el comando
dr-db-up.
Después de que los metadatos se hayan importado en una base de datos, puede usar archivos selectores para seleccionar un subconjunto de las publicaciones en un conjunto de datos.
Su objetivo no es incluir todas las imágenes, sino producir un conjunto de muestras de alta calidad . Los selectores son el mecanismo para eso.
Cada selector contiene una lista positiva y negativa de etiquetas. El selector incluirá una publicación, si contiene al menos una etiqueta de la lista positiva y ninguna de las etiquetas en la lista negativa .
Tenga en cuenta que un gran conjunto de datos contendrá ejemplos positivos y negativos. Si solo capacita su conjunto de datos con muestras positivas, su modelo no podrá usar bien las indicaciones negativas. Es por eso que los ejemplos a continuación incluyen cuatro tipos diferentes de selectores.
DataSet Rising tiene selectores de ejemplo disponibles en <dataset-rising>/examples/select .
Para asegurarse de que sus selectores estén produciendo el tipo de muestras que desea, use el 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-artistsEsta sección requiere una base de datos MongoDB, que puede comenzar con el comando
dr-db-up.
Cuando confía en que los selectores están produciendo el tipo correcto de muestras, es hora de seleccionar las publicaciones para construir un conjunto de datos. Use dr-select para seleccionar publicaciones de la base de datos y guárdelas en un archivo 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 Después de seleccionar las publicaciones para el conjunto de datos, use dr-join para combinar las selecciones y dr-build para descargar las imágenes y construir el conjunto de datos real.
Por defecto, el script de compilación poda todas las etiquetas que tienen menos de 100 muestras. Para ajustar este límite, use --min-posts-per-tag LIMIT .
El script de compilación también podará todas las imágenes que tienen menos de 10 etiquetas. Para ajustar este límite, use --min-tags-per-post LIMIT .
Agregar un porcentaje al final de A --source le dice al script de compilación que elija que muchas muestras del conjunto de datos total de la fuente dada, por ejemplo, --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 ' Después de construir su conjunto de datos, cárguelo a Huggingface.
El conjunto de datos creado por el script dr-build ahora está listo para ser utilizado para el entrenamiento. DataSet Rising utiliza Huggingface Accelerate para entrenar modelos de difusión estables.
Para entrenar un modelo, deberá elegir un modelo base para comenzar. El --base-model puede ser cualquier modelo compatible con difusores, como:
Tenga en cuenta que los resultados de su entrenamiento mejorará significativamente si establece --image-width y --image-height para que coincida con la resolución con la que se entrenó el modelo base.
Tenga en cuenta que la etapa de entrenamiento supone que ya ha cargado su conjunto de datos a Huggingface.
Este ejemplo no escala a múltiples GPU. Consulte la sección de temas avanzados para la capacitación de múltiples GPU.
Este ejemplo utiliza
dr-train-xl, que está diseñado para capacitar a los modelos XL de difusión estable. Si desea entrenar la difusión estable 1.x o los modelos de difusión 2.X estable, usedr-trainen su lugar.
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 0Este paso aún no se ha implementado. Es seguro omitir este paso.
Después del entrenamiento, puede usar el script dr-generate para verificar que el modelo funcione como se esperaba.
dr-generate
--model ' /tmp/dataset-rising-v3-model '
--output ' /tmp/samples '
--prompt ' cat playing chess with a horse '
--samples 100 Para usar el modelo con WebUI de difusión estable, debe convertirse en el formato 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 única parte del conjunto de datos que requiere desinstalación es la base de datos MongoDB. Puede desinstalar la base de datos con los siguientes comandos:
# Shut down MongoDB instance
dr-db-down
# Remove MongoDB container and its data -- warning! data loss will occur
dr-db-uninstallPara restablecer la base de datos, ejecute los siguientes comandos.
Advertencia: perderá todos los datos en la base de datos.
dr-db-uninstall && dr-db-up && dr-db-create El script append le permite importar publicaciones de fuentes adicionales.
Use import para importar la primera fuente y defina el espacio de nombres de la etiqueta, luego use append para importar fuentes adicionales.
# main sources and tags
dr-import ...
# additional sources
dr-append --input /tmp/gelbooru-posts.jsonl --source gelbooruEl entrenamiento multi-GPU se puede llevar a cabo con Huggingface Accelerate Library.
Antes del entrenamiento, ejecute accelerate config para configurar su entorno 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 ) Algunas configuraciones requerirán NCCL_P2P_DISABLE=1 y/o NCCL_IB_DISABLE=1 Variables de entorno a establecer.
export NCCL_P2P_DISABLE=1
export NCCL_IB_DISABLE=1
dr-train-xl ... Use HF_DATASETS_CACHE y HF_MODULES_CACHE para controlar dónde huggingface almacena sus archivos de caché
export HF_DATASETS_CACHE=/workspace/cache/huggingface/datasets
export HF_MODULES_CACHE=/workspace/cache/huggingface/modules
dr-train-xl ...Crea un entorno virtual, instala paquetes y configura una base de datos MongoDB en Docker.
cd < dataset-rising >
./up.sh Detiene el contenedor de base de datos MongoDB. La base de datos se puede reiniciar ejecutándose ./up.sh nuevamente.
cd < dataset-rising >
./down.shAdvertencia: este paso elimina el contenedor de la base de datos MongoDB y todos los datos almacenados en él.
cd < dataset-rising >
./uninstall.shpython3 -m pip install --upgrade build twine
python3 -m build
python3 -m twine upload dist/ * TD de diagrama de flujo
Crawl [Crawl/descarga publicaciones, etiquetas y alias de etiqueta] -Jsonl -> importar
Importar [importar publicaciones, etiquetas y alias de etiqueta] -> almacenar
Agregar [agregar publicaciones adicionales] -> almacenar
Almacenar [base de datos] -> Vista previa
Almacenar -> Seleccionar1
Almacenar -> select2
Almacenar -> select3
Vista previa [Selectores de vista previa] -> HTML (HTML)
Seleccionar1 [Seleccionar muestras] -JSONL -> Únete
Select2 [Seleccionar muestras] -JSONL -> Únete
Select3 [seleccionar muestras] -jsonl -> unirse
Únete a [Muestras de unir y podar] -JSONL -> construir
Build [Build DataSet] -HF DataSet/Parquet -> Train
Train [modelo de tren] -> modelo [modelo]