一種用於創建和訓練穩定擴散1.x,穩定擴散2.x的工具鍊和具有自定義數據集的穩定擴散XL模型。
使用此工具鏈,您可以:
>=3.8>=22.0.0 以下是數據集生成過程中每個步驟的摘要。有關完整的生產質量示例,請參見E621升起的組合(NSFW)。
# install DatasetRising
pip3 install DatasetRising
# start MongoDB database; use `dr-db-down` to stop
dr-db-up DataTet Rising有一個軌道( dr-crawl ),可從Booru式圖像板下載元數據(=帖子和標籤)。
您必須為您的crawler( --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命令開始。
一旦您有足夠的帖子和標記元數據,就該將數據導入到數據庫中了。
數據集Rising使用MongoDB作為帖子和標籤元數據的商店。使用dr-import將下載的元數據導入到MongoDB中。
如果您想調整導入期間對TAG元數據進行處理的處理方式,請在<dataset-rising>/examples/tag_normalizer中查看文件,並設置可選參數--prefilter FILE , --rewrites FILE , --aspect-ratios FILE , - atepectory 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命令開始。
將元數據導入到數據庫中後,您可以使用Selector文件在數據集中選擇帖子的子集。
您的目標不是包括所有圖像,而是製作一組高質量的樣品。選擇器是這樣的機制。
每個選擇器都包含標籤的正面和負面列表。如果選擇器包含至少一個來自正面列表的標籤,而否定列表中的標籤中沒有一個標籤,則將包含一個帖子。
請注意,一個很棒的數據集將包含正面和負面的例子。如果您僅使用正面樣本訓練數據集,則您的模型將無法很好地使用負面提示。這就是為什麼下面的示例包括四種不同類型的選擇器。
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腳本構建的數據集現在可以用於培訓。數據集上升使用擁抱面加速訓練穩定的擴散模型。
要訓練模型,您將需要選擇一個基本模型。 --base-model可以是任何擴散器兼容模型,例如:
請注意,如果您設置了--image-width和--image-height ,以匹配基本模型的培訓,則您的培訓結果將得到顯著改善。
請注意,訓練階段假定您已經將數據集上傳到了擁抱面。
此示例不擴展到多個GPU。有關多GPU培訓的高級主題部分。
該示例使用
dr-train-xl,該示例專為訓練穩定的擴散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-createappend腳本允許您從其他來源導入帖子。
使用import以導入第一個源並定義標籤名稱空間,然後使用append來導入其他資源。
# main sources and tags
dr-import ...
# additional sources
dr-append --input /tmp/gelbooru-posts.jsonl --source gelbooru可以通過擁抱面加速庫進行多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-risinghuggingface-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 ...使用HF_DATASETS_CACHE和HF_MODULES_CACHE控制HuggingFace存儲其緩存文件
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數據集/parquet->火車
火車[火車模型] - >模型[模型]