안정된 확산 1.X, 안정적인 확산 2.X 및 사용자 정의 데이터 세트를 사용한 안정적인 확산 XL 모델을 생성하고 훈련하기위한 도구 체인.
이 도구 체인을 사용하면 다음을 수행 할 수 있습니다.
>=3.8>=22.0.0 아래는 데이터 세트 생성 프로세스의 각 단계에 대한 요약입니다. 전체 생산 품질 예제는 E621 REISING-CONFIGS (NSFW)를 참조하십시오.
# install DatasetRising
pip3 install DatasetRising
# start MongoDB database; use `dr-db-down` to stop
dr-db-up 데이터 세트 상승에는 Booru 스타일 이미지 보드에서 메타 데이터 (= 게시물 및 태그)를 다운로드 할 수있는 크롤러 ( dr-crawl )가 있습니다.
크롤러 ( --agent AGENT_STRING )에 대한 고유 한 사용자 에이전트 문자열을 선택해야합니다. 이 문자열은 모든 HTTP 요청이 있으면 이미지 보드로 전달됩니다. 독특하게 식별하는 사용자 에이전트를 선택하지 않으면 이미지 보드가 귀하의 요청을 차단할 것입니다. 예를 들어:
--agent 'my-imageboard-crawler/1.0 (user @my-username-on-the-imageboard)'
크롤러는 자동으로 요율 제한 및 재시험을 관리합니다. 이전 (실패한) 크롤링을 자동으로 재개하려면 --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> '이 섹션에는 실행중인 MongoDB 데이터베이스가 필요하며
dr-db-up명령으로 시작할 수 있습니다.
게시물 및 태그 메타 데이터가 충분하면 데이터를 데이터베이스로 가져올 차례입니다.
Dataset Rising은 MongoDB를 게시물 및 태그 메타 데이터의 저장소로 사용합니다. dr-import 사용하여 이전 단계에서 MongoDB로 다운로드 된 메타 데이터를 가져옵니다.
가져 오기 중에 태그 메타 데이터가 처리되는 방법을 조정하려면 <dataset-rising>/examples/tag_normalizer 에서 파일을 검토하고 옵션 매개 변수를 설정하고 --prefilter FILE , --aspect-ratios FILE --rewrites FILE --category-weights FILE 및 --symbols FILE 설정하십시오.
dr-import --tags /tmp/e926.net-tags.jsonl --posts /tmp/e926.net-posts.jsonl --source e926이 섹션에는 실행중인 MongoDB 데이터베이스가 필요하며
dr-db-up명령으로 시작할 수 있습니다.
메타 데이터가 데이터베이스로 가져 오면 선택기 파일을 사용하여 데이터 세트에서 게시물의 하위 집합을 선택할 수 있습니다.
귀하의 목표는 모든 이미지를 포함하는 것이 아니라 고품질 샘플 세트를 생성하는 것입니다. 선택기는이 메커니즘입니다.
각 선택기에는 긍정적 및 부정적인 태그 목록이 포함되어 있습니다. 포스트는 셀렉터가 포함됩니다. 양수 목록에서 적어도 하나의 태그가 포함되어 있고 음수 목록의 태그가 없으면 게시물이 포함됩니다.
훌륭한 데이터 세트에는 긍정적 이고 부정적인 예가 포함됩니다. 양의 샘플로 데이터 세트 만 훈련하는 경우 모델이 부정적인 프롬프트를 잘 사용할 수 없습니다. 그렇기 때문에 아래 예제에는 네 가지 유형의 선택기가 포함됩니다.
DataSet Rising에는 <dataset-rising>/examples/select 에서 사용할 수있는 예제기가 있습니다.
선택기가 원하는 샘플의 종류를 생성하는지 확인하려면 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-artists이 섹션에는 실행중인 MongoDB 데이터베이스가 필요하며
dr-db-up명령으로 시작할 수 있습니다.
선택기가 올바른 종류의 샘플을 생성한다고 확신하면 데이터 세트를 작성하기위한 게시물을 선택할 때입니다. dr-select 사용하여 데이터베이스에서 게시물을 선택하고 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 데이터 세트의 게시물을 선택한 후 dr-join 사용하여 선택을 결합하고 dr-build 결합하여 이미지를 다운로드하고 실제 데이터 세트를 작성하십시오.
기본적으로 빌드 스크립트는 100 개 미만의 샘플이있는 모든 태그를 제목합니다. 이 한계를 조정하려면 --min-posts-per-tag LIMIT 사용하십시오.
빌드 스크립트는 또한 10 개의 태그 미만의 모든 이미지를 가지게합니다. 이 한계를 조정하려면 --min-tags-per-post LIMIT 사용하십시오.
--source 소스 끝에 백분율을 추가하면 빌드 스크립트에 주어진 --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 ' 데이터 세트를 구축 한 후에는 HuggingFace에 업로드하십시오.
dr-build 스크립트로 구축 된 데이터 세트는 이제 교육에 사용할 준비가되었습니다. 데이터 세트 상승은 안정된 확산 모델을 훈련시키는 데 Huggingface를 사용합니다.
모델을 훈련 시키려면 기본 모델을 선택해야합니다. --base-model 다음과 같은 디퓨저 호환 모델 일 수 있습니다.
기본 모델이 훈련 된 해상도와 일치하도록 --image-width 및 --image-height 설정하면 교육 결과가 크게 향상됩니다.
교육 단계는 이미 데이터 세트를 Huggingface에 업로드했다고 가정합니다.
이 예제는 여러 GPU로 확장되지 않습니다. 멀티 GPU 교육을위한 고급 주제 섹션을 참조하십시오.
이 예제는 안정적인 확산 XL 모델을 훈련하도록 설계된
dr-train-xl사용합니다. 안정적인 확산 1.x 또는 안정적인 확산 2.x 모델을 훈련 시키려면dr-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 0이 단계는 아직 구현되지 않았습니다. 이 단계를 건너 뛰는 것이 안전합니다.
교육 후 dr-generate 스크립트를 사용하여 모델이 예상대로 작동하는지 확인할 수 있습니다.
dr-generate
--model ' /tmp/dataset-rising-v3-model '
--output ' /tmp/samples '
--prompt ' cat playing chess with a horse '
--samples 100 안정적인 확산 webui와 함께 모델을 사용하려면 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 ' 제거가 필요한 데이터 세트 상승의 유일한 부분은 MongoDB 데이터베이스입니다. 다음 명령으로 데이터베이스를 제거 할 수 있습니다.
# Shut down MongoDB instance
dr-db-down
# Remove MongoDB container and its data -- warning! data loss will occur
dr-db-uninstall데이터베이스를 재설정하려면 다음 명령을 실행하십시오.
경고 : 데이터베이스의 모든 데이터를 잃게됩니다.
dr-db-uninstall && dr-db-up && dr-db-create append 스크립트를 사용하면 추가 소스에서 게시물을 가져올 수 있습니다.
import 사용하여 첫 번째 소스를 가져 와서 태그 네임 스페이스를 정의한 다음 추가 소스를 가져 오기 위해 append .
# main sources and tags
dr-import ...
# additional sources
dr-append --input /tmp/gelbooru-posts.jsonl --source gelbooruHuggingface Accelerate 라이브러리로 다중 GPU 교육을 수행 할 수 있습니다.
훈련하기 전에 accelerate config 실행하여 멀티 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-rising 설치합니다huggingface-cli login )accelerate config ) 구성aws configure ) 일부 구성에는 NCCL_P2P_DISABLE=1 및/또는 NCCL_IB_DISABLE=1 환경 변수를 설정해야합니다.
export NCCL_P2P_DISABLE=1
export NCCL_IB_DISABLE=1
dr-train-xl ... Huggingface가 캐시 파일을 저장하는 위치를 제어하려면 HF_DATASETS_CACHE 및 HF_MODULES_CACHE 사용하십시오.
export HF_DATASETS_CACHE=/workspace/cache/huggingface/datasets
export HF_MODULES_CACHE=/workspace/cache/huggingface/modules
dr-train-xl ...가상 환경을 생성하고 패키지를 설치하며 Docker에 MongoDB 데이터베이스를 설정합니다.
cd < dataset-rising >
./up.sh MongoDB 데이터베이스 컨테이너를 중지합니다. ./up.sh 다시 실행하여 데이터베이스를 다시 시작할 수 있습니다.
cd < dataset-rising >
./down.sh경고 :이 단계는 MongoDB 데이터베이스 컨테이너와 그 위에 저장된 모든 데이터를 제거합니다 .
cd < dataset-rising >
./uninstall.shpython3 -m pip install --upgrade build twine
python3 -m build
python3 -m twine upload dist/ * 흐름도 TD
크롤링 [크롤링/다운로드 게시물, 태그 및 태그 별칭] -jsonl-> 가져 오기
가져 오기 [게시물, 태그 및 태그 별명] -> 저장
[추가 게시물을 추가] -> 상점에 추가하십시오
[데이터베이스] -> 미리보기
저장 -> select1
저장 -> select2
저장 -> select3
미리보기 [미리보기 선택기] -> HTML (HTML)
select1 [샘플 선택] -jsonl-> 조인
select2 [샘플 선택] -jsonl-> 조인
select3 [샘플 선택] -jsonl-> 조인
가입 [가입 및 자두 샘플] -jsonl-> 빌드
[빌드 데이터 세트] -HF DataSet/Parquet-> Train
기차 [기차 모델] -> 모델 [모델]