跳转至

SD Trainer Script Installer 高级功能

高级功能

使用命令运行 SD Trainer Script Installer

SD Trainer Script Installer 支持使用命令参数设置安装 SD-Trainer-Script 的参数,支持的参数如下。

参数 作用
-Help 获取 SD Trainer Script Installer 的帮助信息。
-CorePrefix <内核路径前缀> 设置内核的路径前缀,默认路径前缀为 core
-InstallPath <安装 SD Trainer Script 的绝对路径> 指定 SD Trainer Script Installer 安装 SD Trainer Script 的路径,使用绝对路径表示。
例如:./sd_trainer_script_installer.ps1 -InstallPath "D:\Download",这将指定安装到 D:\Download 路径。
-PyTorchMirrorType 指定安装 PyTorch 时使用的镜像源类型。可指定的类型包括:cu113, cu117, cu118, cu121, cu124, cu126, cu128, cu129, cu130, rocm5.4.2, rocm5.6, rocm5.7, rocm6.0, rocm6.1, rocm6.2, rocm6.2.4, rocm6.3, rocm6.4, rocm7.1, rocm_rdna3, rocm_rdna3.5, rocm_rdna4, rocm_win, xpu, ipex_legacy_arc, cpu, directml, all
-InstallPythonVersion 指定要安装的 Python 版本。可选值:3.10, 3.11, 3.12, 3.13, 3.14
-InstallBranch <安装的 SD Trainer Script 分支> 指定安装的分支。未指定时默认安装 kohya-ss/sd-scripts
支持的分支如下:
  • sd_scripts_main: kohya-ss - sd-scripts 主分支
  • sd_scripts_dev: kohya-ss - sd-scripts 测试分支
  • sd_scripts_sd3: kohya-ss - sd-scripts SD3 分支
  • ai_toolkit_main: ostris - ai-toolkit 分支
  • finetrainers_main: a-r-r-o-w - finetrainers 分支
  • diffusion_pipe_main: tdrussell - diffusion-pipe 分支
  • musubi_tuner_main: kohya-ss - musubi-tuner 分支
  • -UseUpdateMode 指定 SD Trainer Script Installer 使用更新模式,只对管理脚本进行更新。
    -DisablePyPIMirror 禁用 SD Trainer Script Installer 使用 PyPI镜像源,改用 PyPI 官方源。
    -DisableProxy 禁用 SD Trainer Script Installer 自动设置代理服务器。
    -UseCustomProxy <代理服务器地址> 使用自定义的代理服务器地址。例如:-UseCustomProxy "http://127.0.0.1:10809"
    -DisableUV 禁用 SD Trainer Script Installer 使用 uv 安装 Python 软件包,改用 Pip 安装。
    -DisableGithubMirror 禁用 SD Trainer Script Installer 自动设置 Github 镜像源。
    -UseCustomGithubMirror 使用自定义的 Github 镜像站地址。例如:https://ghfast.top/https://github.com 等。
    -BuildMode 启用构建模式,在基础安装结束后将调用管理脚本执行剩余任务。出现错误时不再暂停而是直接退出。
    多个脚本将按以下优先级执行:
  • reinstall_pytorch.ps1:对应-BuildWithTorch/-BuildWithTorchReinstall
  • download_models.ps1:对应-BuildWithModel
  • switch_branch.ps1:对应-BuildWithBranch
  • update.ps1:对应-BuildWithUpdate
  • init.ps1:对应-BuildWithLaunch
  • -BuildWithTorch (需添加 -BuildMode) 调用 reinstall_pytorch.ps1 脚本,根据版本编号安装指定的 PyTorch 版本。编号可运行该脚本查看。
    -BuildWithTorchReinstall (需添加 -BuildMode-BuildWithTorch) 执行 PyTorch 指定版本安装时使用强制重新安装模式。
    -BuildWithModel <模型编号列表> (需添加 -BuildMode) 调用 download_models.ps1 脚本,根据编号列表下载模型。编号可运行该脚本查看。
    -BuildWithBranch (需添加 -BuildMode) 调用 switch_branch.ps1 脚本,根据分支编号切换分支。编号可运行该脚本查看。
    -BuildWithUpdate (需添加 -BuildMode) 安装流程结束后调用 update.ps1 脚本,更新 SD Trainer Script 内核。
    -BuildWithLaunch (需添加 -BuildMode) 安装流程结束后调用 launch.ps1 (对应构建列表中的 init.ps1) 脚本,执行启动前的环境检查,但跳过启动程序。
    -NoPreDownloadModel 安装 SD Trainer Script 时跳过预下载模型。
    -PyTorchPackage (需搭配 -xFormersPackage) 指定安装的 PyTorch 版本。如:-PyTorchPackage "torch==2.3.0+cu118 torchvision==0.18.0+cu118 torchaudio==2.3.0+cu118"
    -xFormersPackage (需搭配 -PyTorchPackage) 指定安装的 xFormers 版本。如:-xFormersPackage "xformers===0.0.26.post1+cu118"
    -NoCleanCache 安装结束后保留下载的 Python 软件包缓存。
    -DisableModelMirror 不使用 ModelScope 下载模型, 使用 HuggingFace 下载模型。
    -NoPause 脚本执行完成后不暂停, 直接退出。
    -DisableUpdate (仅在构建模式生效且只作用于管理脚本) 禁用 SD Trainer Script Installer 更新检查。
    -DisableHuggingFaceMirror (仅在构建模式生效且只作用于管理脚本) 禁用 HuggingFace 镜像源。
    -UseCustomHuggingFaceMirror (仅在构建模式生效且只作用于管理脚本) 使用自定义 HuggingFace 镜像源。例如:-UseCustomHuggingFaceMirror "https://hf-mirror.com"
    -LaunchArg (仅在构建模式生效且只作用于管理脚本) 设置自定义启动参数。如:-LaunchArg "--fast --auto-launch"
    -EnableShortcut (仅在构建模式生效且只作用于管理脚本) 创建 SD Trainer Script 启动快捷方式。
    -DisableCUDAMalloc (仅在构建模式生效且只作用于管理脚本) 禁用通过 PYTORCH_CUDA_ALLOC_CONF / PYTORCH_ALLOC_CONF 环境变量设置 CUDA 内存分配器。
    -DisableEnvCheck (仅在构建模式生效且只作用于管理脚本) 禁用检查 SD Trainer Script 运行环境问题。

    例如在 D:/Download 这个路径安装 bmaltais/Kohya GUI,则在 SD Trainer Script Installer 所在路径打开 PowerShell,使用参数运行 SD Trainer Script Installer。

    ./sd_trainer_script_installer.ps1 -InstallPath "D:/Download" -InstallBranch "kohya_gui"
    

    SD Trainer Script Installer 构建模式和普通安装模式

    SD Trainer Script Installer 主要由两部分构成:安装脚本和环境管理脚本。

    在 SD Trainer Script Installer 默认的普通安装模式下,只执行最基础的安装流程,而像其他的流程,如 PyTorch 版本更换,模型安装,运行环境检查和修复等并不会执行,这些步骤是在 SD Trainer Script Installer 管理脚本中进行,如执行 init.ps1reinstall_pytorch.ps1 脚本等。

    而 SD Trainer Script Installer 构建模式允许在执行基础安装流程后,调用 SD Trainer Script Installer 管理脚本完成这些步骤。基于这个特性,启用构建模式的 SD Trainer Script Installer 可用于整合包制作,搭配自动化平台可实现全自动制作整合包。

    构建模式需要使用命令行参数进行启用,具体可阅读 使用命令运行 SD Trainer Script Installer 中的参数说明。

    Info

    通常安装 SD-Trainer-Script 并不需要使用 SD Trainer Script Installer 构建模式进行安装,使用默认的普通安装模式即可。构建模式多用于自动化制作整合包。

    使用 Github Action 提供的容器可用于运行 SD Trainer Script Installer 并启用构建模式,实现自动化制作整合包,Github Action 工作流代码可参考:build_sd_scripts.yml · licyk/sd-webui-all-in-one

    编写训练脚本

    进行模型训练需要编写代码来调用训练器进行训练,下面将介绍如何进行编写。

    如何编写

    SD Trainer Script Installer 在安装时将会生成一个 train.ps1 脚本,可用于编写训练命令。该脚本的内容如下

    #################################################
    # 初始化基础环境变量,以正确识别到运行环境
    & "$PSScriptRoot/init.ps1"
    Set-Location $PSScriptRoot
    # 此处的代码不要修改或者删除,否则可能会出现意外情况
    # 
    # SD-Trainer-Script 环境初始化后提供以下变量便于使用
    # 
    # ${ROOT_PATH}               当前目录
    # ${SD_SCRIPTS_PATH}         训练脚本所在目录
    # ${DATASET_PATH}            数据集目录
    # ${MODEL_PATH}              模型下载器下载的模型路径
    # ${GIT_EXEC}                Git 路径
    # ${PYTHON_EXEC}             Python 解释器路径
    # 
    # 下方可编写训练代码
    # 编写训练命令可参考:https://github.com/licyk/sd-webui-all-in-one/blob/main/sd_trainer_script_installer.md#%E7%BC%96%E5%86%99%E8%AE%AD%E7%BB%83%E8%84%9A%E6%9C%AC
    # 编写结束后,该文件必须使用 UTF-8 with BOM 编码保存
    #################################################
    
    #################################################
    Write-Host "训练结束,退出训练脚本"
    Read-Host | Out-Null # 训练结束后保持控制台不被关闭
    

    该脚本在执行时将会运行 init.ps1 用于初始化环境(在& "$PSScriptRoot/init.ps1"部分),使训练所需的环境能够被正确识别,这是必须的步骤。在执行完 init.ps1 后将设置一些路径变量可供使用,并且将会显示出来,可以在部分路径变量指出的路径放置训练所需的文件方便使用。

    Set-Location $PSScriptRoot 将切换目录到 train.ps1 所在路径。

    必要的步骤执行后,下方的训练命令就可以执行了,这里尝试编写一个训练模型命令。以下的训练命令基于 kohya-ss/sd-scripts,不同的训练器所使用的训练参数各不同,需阅读项目的文档进行了解。

    #################################################
    # 初始化基础环境变量, 以正确识别到运行环境
    & "$PSScriptRoot/init.ps1"
    Set-Location $PSScriptRoot
    # 此处的代码不要修改或者删除, 否则可能会出现意外情况
    # 
    # SD-Trainer-Script 环境初始化后提供以下变量便于使用
    # 
    # ${ROOT_PATH}               当前目录
    # ${SD_SCRIPTS_PATH}         训练脚本所在目录
    # ${DATASET_PATH}            数据集目录
    # ${MODEL_PATH}              模型下载器下载的模型路径
    # ${OUTPUT_PATH}             保存训练模型的路径
    # ${GIT_EXEC}                Git 路径
    # ${PYTHON_EXEC}             Python 解释器路径
    # 
    # 下方可编写训练代码
    # 编写训练命令可参考: https://github.com/licyk/sd-webui-all-in-one/blob/main/sd_trainer_script_installer.md#%E7%BC%96%E5%86%99%E8%AE%AD%E7%BB%83%E8%84%9A%E6%9C%AC
    # 编写结束后, 该文件必须使用 UTF-8 with BOM 编码保存
    #################################################
    
    python "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/Illustrious-XL-v0.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/Nachoneko" `
        --output_name="Nachoneko_2" `
        --output_dir="${OUTPUT_PATH}/Nachoneko" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=40 `
        --train_batch_size=12 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.0001 `
        --unet_lr=0.0001 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="constant_with_warmup" `
        --lr_warmup_steps=100 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
            preset="full" `
        --optimizer_args `
            weight_decay=0.05 `
            betas="0.9,0.95" `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --debiased_estimation_loss `
        --vae_batch_size=4 `
        --full_fp16
    
    #################################################
    Write-Host "训练结束, 退出训练脚本"
    Read-Host | Out-Null # 训练结束后保持控制台不被关闭
    

    这是一段在 SDXL 模型上训练 LoRA 的训练命令,每一行参数使用 ` 符号进行换行,而最后一行参数则不需要该符号进行换行。

    在最后一行 Read-Host | Out-Null 是为了在训练结束后保持控制台不被关闭。

    训练命令编写完成后,将该文件保存下来,再运行 train.ps1 即可开始训练。

    除了编辑 train.ps1 进行训练,也可以自行创建 PowerShell 脚本并按照要求进行编写。

    Warning

    train.ps1 文件或者其他 PowerShell 脚本需要将保存编码设置为UTF-8 BOM,否则将出现乱码或者运行异常的问题。

    kohya-ss/sd-scripts 训练命令参考

    下面是 kohya-ss/sd-scripts 不同的训练参数例子,可用于参考。

    # 使用 lokr 算法训练 XL 画风 LoRA, 使用多卡进行训练
    # 该参数也可以用于人物 LoRA 训练
    # 
    # 在训练多画风 LoRA 或者人物 LoRA 时, 通常会打上触发词
    # 当使用了 --network_train_unet_only 后, Text Encoder 虽然不会训练, 但并不影响将触发词训练进 LoRA 模型中
    # 并且不训练 Text Encoder 避免 Text Encoder 被炼烂(Text Encoder 比较容易被炼烂)
    #
    # 这个参数在 animagine-xl-3.1.safetensors 测试, 大概在 30 ~ 40 Epoch 有比较好的效果 (在 36 Epoch 出好效果的概率比较高)
    #
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/animagine-xl-3.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/Nachoneko" `
        --output_name="Nachoneko_2" `
        --output_dir="${OUTPUT_PATH}/Nachoneko" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=50 `
        --train_batch_size=6 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.0001 `
        --unet_lr=0.0001 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="cosine_with_restarts" `
        --lr_warmup_steps=0 `
        --lr_scheduler_num_cycles=1 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --vae_batch_size=4 `
        --full_fp16
    
    # 使用 lokr 算法训练 XL 画风 LoRA, 使用多卡进行训练
    # 该参数也可以用于人物 LoRA 训练
    # 
    # 在训练多画风 LoRA 或者人物 LoRA 时, 通常会打上触发词
    # 当使用了 --network_train_unet_only 后, Text Encoder 虽然不会训练, 但并不影响将触发词训练进 LoRA 模型中
    # 并且不训练 Text Encoder 避免 Text Encoder 被炼烂(Text Encoder 比较容易被炼烂)
    #
    # 这个参数是在 Illustrious-XL-v0.1.safetensors 模型上测出来的, 大概在 32 Epoch 左右有比较好的效果
    # 用 animagine-xl-3.1.safetensors 那套参数也有不错的效果, 只是学习率比这套低了点, 学得慢一点
    #
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/Illustrious-XL-v0.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/Nachoneko" `
        --output_name="Nachoneko_2" `
        --output_dir="${OUTPUT_PATH}/Nachoneko" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=40 `
        --train_batch_size=6 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.00012 `
        --unet_lr=0.00012 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="cosine_with_restarts" `
        --lr_warmup_steps=0 `
        --lr_scheduler_num_cycles=1 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --vae_batch_size=4 `
        --full_fp16
    
    # 使用 lokr 算法训练 XL 画风 LoRA, 使用多卡进行训练
    # 该参数也可以用于人物 LoRA 训练
    # 
    # 在训练多画风 LoRA 或者人物 LoRA 时, 通常会打上触发词
    # 当使用了 --network_train_unet_only 后, Text Encoder 虽然不会训练, 但并不影响将触发词训练进 LoRA 模型中
    # 并且不训练 Text Encoder 避免 Text Encoder 被炼烂(Text Encoder 比较容易被炼烂)
    #
    # 这个参数是在 Illustrious-XL-v0.1.safetensors 模型上测出来的, 大概在 32 Epoch 左右有比较好的效果
    # 用 animagine-xl-3.1.safetensors 那套参数也有不错的效果, 只是学习率比这套低了点, 学得慢一点
    # 学习率调度器从 cosine_with_restarts 换成 constant_with_warmup, 此时学习率靠优化器(Lion8bit)进行调度
    # 拟合速度会更快
    # constant_with_warmup 用在大规模的训练上比较好, 但用在小规模训练也有不错的效果
    # 如果训练集的图比较少, 重复的图较多, 重复次数较高, 可能容易造成过拟合
    # 
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/Illustrious-XL-v0.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/Nachoneko" `
        --output_name="Nachoneko_2" `
        --output_dir="${OUTPUT_PATH}/Nachoneko" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=40 `
        --train_batch_size=6 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.00012 `
        --unet_lr=0.00012 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="constant_with_warmup" `
        --lr_warmup_steps=100 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --vae_batch_size=4 `
        --full_fp16
    
    # 使用 lokr 算法训练 XL 画风 LoRA, 使用多卡进行训练
    # 该参数也可以用于人物 LoRA 训练
    # 
    # 在训练多画风 LoRA 或者人物 LoRA 时, 通常会打上触发词
    # 当使用了 --network_train_unet_only 后, Text Encoder 虽然不会训练, 但并不影响将触发词训练进 LoRA 模型中
    # 并且不训练 Text Encoder 避免 Text Encoder 被炼烂(Text Encoder 比较容易被炼烂)
    #
    # 这个参数是在 Illustrious-XL-v0.1.safetensors 模型上测出来的, 大概在 32 Epoch 左右有比较好的效果
    # 用 animagine-xl-3.1.safetensors 那套参数也有不错的效果, 只是学习率比这套低了点, 学得慢一点
    # 学习率调度器从 cosine_with_restarts 换成 constant_with_warmup, 此时学习率靠优化器(Lion8bit)进行调度
    # 拟合速度会更快
    # constant_with_warmup 用在大规模的训练上比较好, 但用在小规模训练也有不错的效果
    # 如果训练集的图比较少, 重复的图较多, 重复次数较高, 可能容易造成过拟合
    # 
    # 在 --network_args 设置了 preset,可以调整训练网络的大小
    # 该值默认为 full,而使用 attn-mlp 可以得到更小的 LoRA 但几乎不影响 LoRA 效果
    # 可用的预设可阅读文档: https://github.com/KohakuBlueleaf/LyCORIS/blob/main/docs/Preset.md
    # 该预设也可以自行编写并指定, 编写例子可查看: https://github.com/KohakuBlueleaf/LyCORIS/blob/main/example_configs/preset_configs/example.toml
    # 
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/Illustrious-XL-v0.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/Nachoneko" `
        --output_name="Nachoneko_2" `
        --output_dir="${OUTPUT_PATH}/Nachoneko" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=40 `
        --train_batch_size=6 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.00012 `
        --unet_lr=0.00012 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="constant_with_warmup" `
        --lr_warmup_steps=100 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
            preset="attn-mlp" `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --vae_batch_size=4 `
        --full_fp16
    
    # 使用 lokr 算法训练 XL 画风 LoRA, 使用多卡进行训练
    # 该参数也可以用于人物 LoRA 训练
    # 
    # 在训练多画风 LoRA 或者人物 LoRA 时, 通常会打上触发词
    # 当使用了 --network_train_unet_only 后, Text Encoder 虽然不会训练, 但并不影响将触发词训练进 LoRA 模型中
    # 并且不训练 Text Encoder 避免 Text Encoder 被炼烂(Text Encoder 比较容易被炼烂)
    #
    # 这个参数是在 Illustrious-XL-v0.1.safetensors 模型上测出来的, 大概在 32 Epoch 左右有比较好的效果
    # 用 animagine-xl-3.1.safetensors 那套参数也有不错的效果, 只是学习率比这套低了点, 学得慢一点
    # 学习率调度器从 cosine_with_restarts 换成 constant_with_warmup, 此时学习率靠优化器(Lion8bit)进行调度
    # 拟合速度会更快
    # constant_with_warmup 用在大规模的训练上比较好, 但用在小规模训练也有不错的效果
    # 如果训练集的图比较少, 重复的图较多, 重复次数较高, 可能容易造成过拟合
    # 
    # 在 --network_args 设置了 preset,可以调整训练网络的大小
    # 该值默认为 full,而使用 attn-mlp 可以得到更小的 LoRA 但几乎不影响 LoRA 效果
    # 可用的预设可阅读文档: https://github.com/KohakuBlueleaf/LyCORIS/blob/main/docs/Preset.md
    # 该预设也可以自行编写并指定, 编写例子可查看: https://github.com/KohakuBlueleaf/LyCORIS/blob/main/example_configs/preset_configs/example.toml
    # 
    # 使用 --optimizer_args 设置 weight_decay 和 betas, 更高的 weight_decay 可以降低拟合程度, 减少过拟合
    # 如果拟合程度不够高, 可以提高 --max_train_epochs 的值, 或者适当降低 weight_decay 的值, 可自行测试
    # 较小的训练集适合使用较小的值, 如 0.05, 较大的训练集适合用 0.1
    # 当 weight_decay 设置为 0.05 时, 大概在 38 Epoch 有比较好的效果
    # 
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/Illustrious-XL-v0.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/Nachoneko" `
        --output_name="Nachoneko_2" `
        --output_dir="${OUTPUT_PATH}/Nachoneko" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=40 `
        --train_batch_size=6 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.00012 `
        --unet_lr=0.00012 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="constant_with_warmup" `
        --lr_warmup_steps=100 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
            preset="attn-mlp" `
        --optimizer_args `
            weight_decay=0.1 `
            betas="0.9,0.95" `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --vae_batch_size=4 `
        --full_fp16
    
    # (自己在用的)
    # 使用 lokr 算法训练 XL 画风 LoRA, 使用多卡进行训练
    # 该参数也可以用于人物 LoRA 训练
    # 
    # 在训练多画风 LoRA 或者人物 LoRA 时, 通常会打上触发词
    # 当使用了 --network_train_unet_only 后, Text Encoder 虽然不会训练, 但并不影响将触发词训练进 LoRA 模型中
    # 并且不训练 Text Encoder 避免 Text Encoder 被炼烂(Text Encoder 比较容易被炼烂)
    # 
    # 学习率调度器从 cosine_with_restarts 换成 constant_with_warmup, 此时学习率靠优化器(Lion8bit)进行调度
    # 拟合速度会更快
    # constant_with_warmup 用在大规模的训练上比较好, 但用在小规模训练也有不错的效果
    # 如果训练集的图比较少, 重复的图较多, 重复次数较高, 可能容易造成过拟合
    # 
    # 在 --network_args 设置了 preset, 可以调整训练网络的大小
    # 该值默认为 full, 如果使用 attn-mlp 可以得到更小的 LoRA, 但对于难学的概念使用 full 效果会更好
    # 
    # 可用的预设可阅读文档: https://github.com/KohakuBlueleaf/LyCORIS/blob/main/docs/Preset.md
    # 该预设也可以自行编写并指定, 编写例子可查看: https://github.com/KohakuBlueleaf/LyCORIS/blob/main/example_configs/preset_configs/example.toml
    # 
    # 使用 --optimizer_args 设置 weight_decay 和 betas, 更高的 weight_decay 可以降低拟合程度, 减少过拟合
    # 如果拟合程度不够高, 可以提高 --max_train_epochs 的值, 或者适当降低 weight_decay 的值, 可自行测试
    # 较小的训练集适合使用较小的值, 如 0.05, 较大的训练集适合用 0.1
    # 大概 34 Epoch 会有比较好的效果吧, 不过不好说, 看训练集
    # 自己测的时候大概在 26~40 Epoch 之间会出现好结果, 测试了很多炉基本都在这个区间里, 但也不排除意外情况 (训练参数这东西好麻烦啊, 苦い)
    # 
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/Illustrious-XL-v0.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/Nachoneko" `
        --output_name="Nachoneko_2" `
        --output_dir="${OUTPUT_PATH}/Nachoneko" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=40 `
        --train_batch_size=6 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.0001 `
        --unet_lr=0.0001 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="constant_with_warmup" `
        --lr_warmup_steps=100 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
            preset="full" `
        --optimizer_args `
            weight_decay=0.05 `
            betas="0.9,0.95" `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --vae_batch_size=4 `
        --full_fp16
    
    # (自己在用的)
    # 使用 lokr 算法训练 XL 画风 LoRA, 使用多卡进行训练
    # 该参数也可以用于人物 LoRA 训练
    # 
    # 在训练多画风 LoRA 或者人物 LoRA 时, 通常会打上触发词
    # 当使用了 --network_train_unet_only 后, Text Encoder 虽然不会训练, 但并不影响将触发词训练进 LoRA 模型中
    # 并且不训练 Text Encoder 避免 Text Encoder 被炼烂(Text Encoder 比较容易被炼烂)
    # 
    # 学习率调度器从 cosine_with_restarts 换成 constant_with_warmup, 此时学习率靠优化器(Lion8bit)进行调度
    # 拟合速度会更快
    # constant_with_warmup 用在大规模的训练上比较好, 但用在小规模训练也有不错的效果
    # 如果训练集的图比较少, 重复的图较多, 重复次数较高, 可能容易造成过拟合
    # 
    # 在 --network_args 设置了 preset, 可以调整训练网络的大小
    # 该值默认为 full, 如果使用 attn-mlp 可以得到更小的 LoRA, 但对于难学的概念使用 full 效果会更好 (最好还是 full 吧, 其他的预设效果不是很好)
    # 
    # 可用的预设可阅读文档: https://github.com/KohakuBlueleaf/LyCORIS/blob/main/docs/Preset.md
    # 该预设也可以自行编写并指定, 编写例子可查看: https://github.com/KohakuBlueleaf/LyCORIS/blob/main/example_configs/preset_configs/example.toml
    # 
    # 使用 --optimizer_args 设置 weight_decay 和 betas, 更高的 weight_decay 可以降低拟合程度, 减少过拟合
    # 如果拟合程度不够高, 可以提高 --max_train_epochs 的值, 或者适当降低 weight_decay 的值, 可自行测试
    # 较小的训练集适合使用较小的值, 如 0.05, 较大的训练集适合用 0.1
    # 大概 34 Epoch 会有比较好的效果吧, 不过不好说, 看训练集
    # 自己测的时候大概在 26~40 Epoch 之间会出现好结果, 测试了很多炉基本都在这个区间里, 但也不排除意外情况 (训练参数这东西好麻烦啊, 苦い)
    # 
    # 测试的时候发现 --debiased_estimation_loss 对于训练效果的有些改善
    # 这里有个对比: https://licyk.netlify.app/2025/02/10/debiased_estimation_loss_in_stable_diffusion_model_training
    # 启用后能提高拟合速度和颜色表现吧, 画风的学习能学得更好
    # 但, 肢体崩坏率可能会有点提高, 不过有另一套参数去优化了一下这个问题, 貌似会好一点
    # debiased estimation loss 有个相关的论文可以看看: https://arxiv.org/abs/2310.08442
    # 
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/Illustrious-XL-v0.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/Nachoneko" `
        --output_name="Nachoneko_2" `
        --output_dir="${OUTPUT_PATH}/Nachoneko" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=40 `
        --train_batch_size=6 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.0001 `
        --unet_lr=0.0001 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="constant_with_warmup" `
        --lr_warmup_steps=100 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
            preset="full" `
        --optimizer_args `
            weight_decay=0.05 `
            betas="0.9,0.95" `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --debiased_estimation_loss `
        --vae_batch_size=4 `
        --full_fp16
    
    # (自己在用的)
    # 使用 lokr 算法训练 XL 画风 LoRA, 使用多卡进行训练
    # 该参数也可以用于人物 LoRA 训练
    # 
    # 在训练多画风 LoRA 或者人物 LoRA 时, 通常会打上触发词
    # 当使用了 --network_train_unet_only 后, Text Encoder 虽然不会训练, 但并不影响将触发词训练进 LoRA 模型中
    # 并且不训练 Text Encoder 避免 Text Encoder 被炼烂(Text Encoder 比较容易被炼烂)
    # 
    # 学习率调度器从 cosine_with_restarts 换成 constant_with_warmup, 此时学习率靠优化器(Lion8bit)进行调度
    # 拟合速度会更快
    # constant_with_warmup 用在大规模的训练上比较好, 但用在小规模训练也有不错的效果
    # 如果训练集的图比较少, 重复的图较多, 重复次数较高, 可能容易造成过拟合
    # 
    # 在 --network_args 设置了 preset, 可以调整训练网络的大小
    # 该值默认为 full, 如果使用 attn-mlp 可以得到更小的 LoRA, 但对于难学的概念使用 full 效果会更好 (最好还是 full 吧, 其他的预设效果不是很好)
    # 
    # 可用的预设可阅读文档: https://github.com/KohakuBlueleaf/LyCORIS/blob/main/docs/Preset.md
    # 该预设也可以自行编写并指定, 编写例子可查看: https://github.com/KohakuBlueleaf/LyCORIS/blob/main/example_configs/preset_configs/example.toml
    # 
    # 使用 --optimizer_args 设置 weight_decay 和 betas, 更高的 weight_decay 可以降低拟合程度, 减少过拟合
    # 如果拟合程度不够高, 可以提高 --max_train_epochs 的值, 或者适当降低 weight_decay 的值, 可自行测试
    # 较小的训练集适合使用较小的值, 如 0.05, 较大的训练集适合用 0.1
    # 大概 34 Epoch 会有比较好的效果吧, 不过不好说, 看训练集
    # 自己测的时候大概在 26~40 Epoch 之间会出现好结果, 测试了很多炉基本都在这个区间里, 但也不排除意外情况 (训练参数这东西好麻烦啊, 苦い)
    # 
    # 测试的时候发现 --debiased_estimation_loss 对于训练效果的有些改善
    # 这里有个对比: https://licyk.netlify.app/2025/02/10/debiased_estimation_loss_in_stable_diffusion_model_training
    # 启用后能提高拟合速度和颜色表现吧, 画风的学习能学得更好
    # 但, 肢体崩坏率可能会有点提高, 不过有另一套参数去优化了一下这个问题, 貌似会好一点
    # 可能画风会弱化, 所以不是很确定哪个比较好用, 只能自己试了
    # debiased estimation loss 有个相关的论文可以看看: https://arxiv.org/abs/2310.08442
    # 
    # 加上 v 预测参数进行训练, 提高模型对暗处和亮处的表现效果, 并且能让模型能够直出纯黑色背景, 画面也更干净
    # 相关的论文可以看看: https://arxiv.org/abs/2305.08891
    # 
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/noobaiXLNAIXL_vPred10Version.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/Nachoneko" `
        --output_name="Nachoneko_2" `
        --output_dir="${OUTPUT_PATH}/Nachoneko" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=40 `
        --train_batch_size=6 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.0001 `
        --unet_lr=0.0001 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="constant_with_warmup" `
        --lr_warmup_steps=100 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
            preset="full" `
        --optimizer_args `
            weight_decay=0.05 `
            betas="0.9,0.95" `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --debiased_estimation_loss `
        --vae_batch_size=4 `
        --zero_terminal_snr `
        --v_parameterization `
        --scale_v_pred_loss_like_noise_pred `
        --full_fp16
    
    # 使用 lokr 算法训练 XL 画风 LoRA, 使用多卡进行训练
    # 该参数也可以用于人物 LoRA 训练
    # 
    # 在训练多画风 LoRA 或者人物 LoRA 时, 通常会打上触发词
    # 当使用了 --network_train_unet_only 后, Text Encoder 虽然不会训练, 但并不影响将触发词训练进 LoRA 模型中
    # 并且不训练 Text Encoder 避免 Text Encoder 被炼烂(Text Encoder 比较容易被炼烂)
    # 
    # 在 --network_args 设置了 preset, 可以调整训练网络的大小
    # 该值默认为 full, 如果使用 attn-mlp 可以得到更小的 LoRA, 但对于难学的概念使用 full 效果会更好 (最好还是 full 吧, 其他的预设效果不是很好)
    # 
    # 可用的预设可阅读文档: https://github.com/KohakuBlueleaf/LyCORIS/blob/main/docs/Preset.md
    # 该预设也可以自行编写并指定, 编写例子可查看: https://github.com/KohakuBlueleaf/LyCORIS/blob/main/example_configs/preset_configs/example.toml
    # 
    # 使用 --optimizer_args 设置 weight_decay 和 betas, 更高的 weight_decay 可以降低拟合程度, 减少过拟合
    # 如果拟合程度不够高, 可以提高 --max_train_epochs 的值, 或者适当降低 weight_decay 的值, 可自行测试
    # 较小的训练集适合使用较小的值, 如 0.05, 较大的训练集适合用 0.1
    # 大概 34 Epoch 会有比较好的效果吧, 不过不好说, 看训练集
    # 自己测的时候大概在 26~40 Epoch 之间会出现好结果, 测试了很多炉基本都在这个区间里, 但也不排除意外情况 (训练参数这东西好麻烦啊, 苦い)
    # 
    # 测试的时候发现 --debiased_estimation_loss 对于训练效果的有些改善
    # 这里有个对比: https://licyk.netlify.app/2025/02/10/debiased_estimation_loss_in_stable_diffusion_model_training
    # 启用后能提高拟合速度和颜色表现吧, 画风的学习能学得更好
    # 把学习率调度器 constant_with_warmup 换成了cosine, 稍微缓解了一下拟合速度过快导致肢体崩坏率增大的问题
    # 如果学的效果不够好, 拟合度不够高, 可以适当增加 --max_train_epochs 的值或者提高训练集的重复次数
    # debiased estimation loss 有个相关的论文可以看看: https://arxiv.org/abs/2310.08442
    # 
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/Illustrious-XL-v0.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/Nachoneko" `
        --output_name="Nachoneko_2" `
        --output_dir="${OUTPUT_PATH}/Nachoneko" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=40 `
        --train_batch_size=6 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.0001 `
        --unet_lr=0.0001 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="cosine" `
        --lr_warmup_steps=0 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
            preset="full" `
        --optimizer_args `
            weight_decay=0.05 `
            betas="0.9,0.95" `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --debiased_estimation_loss `
        --vae_batch_size=4 `
        --full_fp16
    
    # 使用 lokr 算法训练 XL 人物 LoRA, 使用多卡进行训练
    # 适合极少图或者单图训练集进行人物 LoRA 训练
    # 训练集使用打标器进行打标后, 要保留的人物的哪些特征, 就把对应的 Tag 删去, 触发词可加可不加
    # 
    # 该参数使用 scale_weight_norms 降低过拟合程度, 进行训练时, 可在控制台输出看到 Average key norm 这个值
    # 通常测试 LoRA 时就测试 Average key norm 值在 0.5 ~ 0.9 之间的保存的 LoRA 模型
    # max_train_epochs 设置为 200, save_every_n_epochs 设置为 1 以为了更好的挑选最好的结果
    # 
    # 可使用该方法训练一个人物 LoRA 模型用于生成人物的图片, 并将这些图片重新制作成训练集
    # 再使用不带 scale_weight_norms 的训练参数进行训练, 通过这种方式, 可以在图片极少的情况下得到比较好的 LoRA 模型
    # 
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/Illustrious-XL-v0.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/Nachoneko" `
        --output_name="Nachoneko_2" `
        --output_dir="${OUTPUT_PATH}/Nachoneko" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=200 `
        --train_batch_size=6 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.00012 `
        --unet_lr=0.00012 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="constant_with_warmup" `
        --lr_warmup_steps=1 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --scale_weight_norms=1 `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --vae_batch_size=4 `
        --full_fp16
    
    # 使用 lokr 算法训练 XL 画风 LoRA, 使用 rtx 4060 8g laptop 进行训练, 通过 fp8 降低显存占用
    # 该参数也可以用于人物 LoRA 训练
    # 
    # 在训练多画风 LoRA 或者人物 LoRA 时, 通常会打上触发词
    # 当使用了 --network_train_unet_only 后, Text Encoder 虽然不会训练, 但并不影响将触发词训练进 LoRA 模型中
    # 并且不训练 Text Encoder 避免 Text Encoder 被炼烂(Text Encoder 比较容易被炼烂)
    #
    # 这个参数是在 Illustrious-XL-v0.1.safetensors 模型上测出来的, 大概在 32 Epoch 左右有比较好的效果
    # 用 animagine-xl-3.1.safetensors 那套参数也有不错的效果, 只是学习率比这套低了点, 学得慢一点
    # 学习率调度器从 cosine_with_restarts 换成 constant_with_warmup, 此时学习率靠优化器(Lion8bit)进行调度
    # 拟合速度会更快
    # constant_with_warmup 用在大规模的训练上比较好, 但用在小规模训练也有不错的效果
    # 如果训练集的图比较少, 重复的图较多, 重复次数较高, 可能容易造成过拟合
    # 
    python "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/Illustrious-XL-v0.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/Nachoneko" `
        --output_name="Nachoneko_2" `
        --output_dir="${OUTPUT_PATH}/Nachoneko" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=40 `
        --train_batch_size=3 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.0002 `
        --unet_lr=0.0002 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="constant_with_warmup" `
        --lr_warmup_steps=100 `
        --optimizer_type="AdamW8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --vae_batch_size=4 `
        --fp8_base
    
    # 使用 lokr 算法训练 XL 画风 LoRA, 使用多卡进行训练
    # 该参数也可以用于人物 LoRA 训练
    # 
    # 在训练多画风 LoRA 或者人物 LoRA 时, 通常会打上触发词
    # 当使用了 --network_train_unet_only 后, Text Encoder 虽然不会训练, 但并不影响将触发词训练进 LoRA 模型中
    # 并且不训练 Text Encoder 避免 Text Encoder 被炼烂(Text Encoder 比较容易被炼烂)
    #
    # 这个参数是在 Illustrious-XL-v0.1.safetensors 模型上测出来的, 大概在 32 Epoch 左右有比较好的效果
    # 用 animagine-xl-3.1.safetensors 那套参数也有不错的效果, 只是学习率比这套低了点, 学得慢一点
    # 学习率调度器从 cosine_with_restarts 换成 constant_with_warmup, 此时学习率靠优化器(Lion8bit)进行调度
    # 拟合速度会更快
    # constant_with_warmup 用在大规模的训练上比较好, 但用在小规模训练也有不错的效果
    # 如果训练集的图比较少, 重复的图较多, 重复次数较高, 可能容易造成过拟合
    # 
    # 参数加上了 noise_offset, 可以提高暗处和亮处的表现, 一般使用设置成 0.05 ~ 0.1
    # 但 noise_offset 可能会导致画面泛白, 光影效果变差
    # 
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/Illustrious-XL-v0.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/Nachoneko" `
        --output_name="Nachoneko_2" `
        --output_dir="${OUTPUT_PATH}/Nachoneko" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=40 `
        --train_batch_size=6 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.00012 `
        --unet_lr=0.00012 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="constant_with_warmup" `
        --lr_warmup_steps=100 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --noise_offset=0.1 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --vae_batch_size=4 `
        --full_fp16
    
    # 使用 lokr 算法训练 XL 人物 LoRA, 使用多卡进行训练
    # 参数中使用了 --scale_weight_norms, 用于提高泛化性, 但可能会造成拟合度降低
    # 如果当训练人物 LoRA 的图片较多时, 可考虑删去该参数
    # 当训练人物 LoRA 的图片较少, 为了避免过拟合, 就可以考虑使用 --scale_weight_norms 降低过拟合概率
    #
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/animagine-xl-3.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/robin" `
        --output_name="robin_1" `
        --output_dir="${OUTPUT_PATH}/robin_1" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=50 `
        --train_batch_size=6 `
        --gradient_checkpointing `
        --learning_rate=0.0001 `
        --unet_lr=0.0001 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="cosine_with_restarts" `
        --lr_warmup_steps=0 `
        --lr_scheduler_num_cycles=1 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --scale_weight_norms=1 `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --vae_batch_size=4 `
        --full_fp16
    
    # 使用 lokr 算法训练 XL 人物 LoRA, 使用多卡进行训练
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/animagine-xl-3.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/murasame_(senren)_3" `
        --output_name="murasame_(senren)_10" `
        --output_dir="${OUTPUT_PATH}/murasame_(senren)_10" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=50 `
        --train_batch_size=6 `
        --gradient_checkpointing `
        --learning_rate=0.0001 `
        --unet_lr=0.0001 `
        --text_encoder_lr=0.00004 `
        --lr_scheduler="cosine_with_restarts" `
        --lr_warmup_steps=0 `
        --lr_scheduler_num_cycles=1 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --scale_weight_norms=1 `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --vae_batch_size=4 `
        --full_fp16
    
    # 使用 lokr 算法训练 XL 画风 LoRA, 使用单卡进行训练 (Kaggle 的单 Tesla P100 性能不如双 Tesla T4, 建议使用双卡训练)
    python "${SD_SCRIPTS_PATH}/sdxl_train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/animagine-xl-3.1.safetensors" `
        --vae="${MODEL_PATH}/sdxl_fp16_fix_vae.safetensors" `
        --train_data_dir="${DATASET_PATH}/rafa" `
        --output_name="rafa_1" `
        --output_dir="${OUTPUT_PATH}/rafa" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="1024,1024" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=4096 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=50 `
        --train_batch_size=6 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.00007 `
        --unet_lr=0.00007 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="cosine_with_restarts" `
        --lr_warmup_steps=0 `
        --lr_scheduler_num_cycles=1 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --vae_batch_size=4 `
        --full_fp16
    
    # 使用 lokr 算法训练 SD1.5 画风 LoRA, 使用双卡进行训练
    # 使用 NovelAI 1 模型进行训练
    # 
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/animefull-final-pruned.safetensors" `
        --vae="${MODEL_PATH}/vae-ft-mse-840000-ema-pruned.safetensors" `
        --train_data_dir="${DATASET_PATH}/sunfish" `
        --output_name="nai1-sunfish_5" `
        --output_dir="${OUTPUT_PATH}/nai1-sunfish_5" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="768,768" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=1024 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=40 `
        --train_batch_size=12 `
        --gradient_checkpointing `
        --network_train_unet_only `
        --learning_rate=0.00024 `
        --unet_lr=0.00024 `
        --text_encoder_lr=0.00001 `
        --lr_scheduler="constant_with_warmup" `
        --lr_warmup_steps=100 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --vae_batch_size=4 `
        --full_fp16
    
    # 使用 lokr 算法训练 SD1.5 多画风(多概念) LoRA, 使用双卡进行训练
    # 使用 NovelAI 1 模型进行训练
    # 
    # 在 SD1.5 中训练 Text Encoder 可以帮助模型更好的区分不同的画风(概念)
    # 
    python -m accelerate.commands.launch `
        --num_cpu_threads_per_process=1 `
        --multi_gpu `
        --num_processes=2 `
        "${SD_SCRIPTS_PATH}/train_network.py" `
        --pretrained_model_name_or_path="${MODEL_PATH}/animefull-final-pruned.safetensors" `
        --vae="${MODEL_PATH}/vae-ft-mse-840000-ema-pruned.safetensors" `
        --train_data_dir="${DATASET_PATH}/sunfish" `
        --output_name="nai1-sunfish_5" `
        --output_dir="${OUTPUT_PATH}/nai1-sunfish_5" `
        --wandb_run_name="Nachoneko" `
        --log_tracker_name="lora-Nachoneko" `
        --prior_loss_weight=1 `
        --resolution="768,768" `
        --enable_bucket `
        --min_bucket_reso=256 `
        --max_bucket_reso=1024 `
        --bucket_reso_steps=64 `
        --save_model_as="safetensors" `
        --save_precision="fp16" `
        --save_every_n_epochs=1 `
        --max_train_epochs=40 `
        --train_batch_size=12 `
        --gradient_checkpointing `
        --learning_rate=0.00028 `
        --unet_lr=0.00028 `
        --text_encoder_lr=0.000015 `
        --lr_scheduler="constant_with_warmup" `
        --lr_warmup_steps=100 `
        --optimizer_type="Lion8bit" `
        --network_module="lycoris.kohya" `
        --network_dim=100000 `
        --network_alpha=100000 `
        --network_args `
            conv_dim=100000 `
            conv_alpha=100000 `
            algo=lokr `
            dropout=0 `
            factor=8 `
            train_norm=True `
        --log_with="tensorboard" `
        --logging_dir="${OUTPUT_PATH}/logs" `
        --caption_extension=".txt" `
        --shuffle_caption `
        --keep_tokens=0 `
        --max_token_length=225 `
        --seed=1337 `
        --mixed_precision="fp16" `
        --xformers `
        --cache_latents `
        --cache_latents_to_disk `
        --persistent_data_loader_workers `
        --vae_batch_size=4 `
        --full_fp16
    

    使用 TensorBoard 查看训练情况

    这里可以编写一个 tensorboard.ps1 脚本用于运行 TensorBoard。

    # 初始化基础环境变量,以正确识别到运行环境
    & "$PSScriptRoot/init.ps1"
    
    # TensorBoard 日志路径
    $LOG_DIR = "${OUTPUT_PATH}/logs"
    
    python -m tensorboard.main `
        --host=127.0.0.1 `
        --port=8899 `
        --logdir="${LOG_DIR}"
    
    # 运行这个脚本后将会在 http://127.0.0.1:8899 打开 TensorBoard 的网页界面
    

    保存后右键运行即可启动。