# Kohya's GUI This repository provides a Windows-focused Gradio GUI for [Kohya's Stable Diffusion trainers](https://github.com/kohya-ss/sd-scripts). The GUI allows you to set the training parameters and generate and run the required CLI commands to train the model. If you run on Linux and would like to use the GUI, there is now a port of it as a docker container. You can find the project [here](https://github.com/P2Enjoy/kohya_ss-docker). ### Table of Contents - [Tutorials](#tutorials) - [Required Dependencies](#required-dependencies) - [Linux/macOS](#linux-and-macos-dependencies) - [Installation](#installation) - [Linux/macOS](#linux-and-macos) - [Default Install Locations](#install-location) - [Windows](#windows) - [CUDNN 8.6](#optional--cudnn-86) - [Upgrading](#upgrading) - [Windows](#windows-upgrade) - [Linux/macOS](#linux-and-macos-upgrade) - [Launching the GUI](#starting-gui-service) - [Windows](#launching-the-gui-on-windows) - [Linux/macOS](#launching-the-gui-on-linux-and-macos) - [Direct Launch via Python Script](#launching-the-gui-directly-using-kohyaguipy) - [Dreambooth](#dreambooth) - [Finetune](#finetune) - [Train Network](#train-network) - [LoRA](#lora) - [Troubleshooting](#troubleshooting) - [Page File Limit](#page-file-limit) - [No module called tkinter](#no-module-called-tkinter) - [FileNotFoundError](#filenotfounderror) - [Change History](#change-history) ## Tutorials [How to Create a LoRA Part 1: Dataset Preparation](https://www.youtube.com/watch?v=N4_-fB62Hwk): [![LoRA Part 1 Tutorial](https://img.youtube.com/vi/N4_-fB62Hwk/0.jpg)](https://www.youtube.com/watch?v=N4_-fB62Hwk) [How to Create a LoRA Part 2: Training the Model](https://www.youtube.com/watch?v=k5imq01uvUY): [![LoRA Part 2 Tutorial](https://img.youtube.com/vi/k5imq01uvUY/0.jpg)](https://www.youtube.com/watch?v=k5imq01uvUY) ## Required Dependencies - Install [Python 3.10](https://www.python.org/ftp/python/3.10.9/python-3.10.9-amd64.exe) - make sure to tick the box to add Python to the 'PATH' environment variable - Install [Git](https://git-scm.com/download/win) - Install [Visual Studio 2015, 2017, 2019, and 2022 redistributable](https://aka.ms/vs/17/release/vc_redist.x64.exe) ### Linux and macOS dependencies These dependencies are taken care of via `setup.sh` in the installation section. No additional steps should be needed unless the scripts inform you otherwise. ## Installation ### Runpod Follow the instructions found in this discussion: https://github.com/bmaltais/kohya_ss/discussions/379 ### Linux and macOS In the terminal, run ``` git clone https://github.com/bmaltais/kohya_ss.git cd kohya_ss # May need to chmod +x ./setup.sh if you're on a machine with stricter security. # There are additional options if needed for a runpod environment. # Call 'setup.sh -h' or 'setup.sh --help' for more information. ./setup.sh ``` Setup.sh help included here: ```bash Kohya_SS Installation Script for POSIX operating systems. The following options are useful in a runpod environment, but will not affect a local machine install. Usage: setup.sh -b dev -d /workspace/kohya_ss -g https://mycustom.repo.tld/custom_fork.git setup.sh --branch=dev --dir=/workspace/kohya_ss --git-repo=https://mycustom.repo.tld/custom_fork.git Options: -b BRANCH, --branch=BRANCH Select which branch of kohya to check out on new installs. -d DIR, --dir=DIR The full path you want kohya_ss installed to. -g REPO, --git_repo=REPO You can optionally provide a git repo to check out for runpod installation. Useful for custom forks. -h, --help Show this screen. -i, --interactive Interactively configure accelerate instead of using default config file. -n, --no-update Do not update kohya_ss repo. No git pull or clone operations. -p, --public Expose public URL in runpod mode. Won't have an effect in other modes. -r, --runpod Forces a runpod installation. Useful if detection fails for any reason. -s, --skip-space-check Skip the 10Gb minimum storage space check. -u, --no-gui Skips launching the GUI. -v, --verbose Increase verbosity levels up to 3. ``` #### Install location The default install location for Linux is where the script is located if a previous installation is detected that location. Otherwise, it will fall to `/opt/kohya_ss`. If /opt is not writeable, the fallback is `$HOME/kohya_ss`. Lastly, if all else fails it will simply install to the current folder you are in (PWD). On macOS and other non-Linux machines, it will first try to detect an install where the script is run from and then run setup there if that's detected. If a previous install isn't found at that location, then it will default install to `$HOME/kohya_ss` followed by where you're currently at if there's no access to $HOME. You can override this behavior by specifying an install directory with the -d option. If you are using the interactive mode, our default values for the accelerate config screen after running the script answer "This machine", "None", "No" for the remaining questions. These are the same answers as the Windows install. ### Windows - Install [Python 3.10](https://www.python.org/ftp/python/3.10.9/python-3.10.9-amd64.exe) - make sure to tick the box to add Python to the 'PATH' environment variable - Install [Git](https://git-scm.com/download/win) - Install [Visual Studio 2015, 2017, 2019, and 2022 redistributable](https://aka.ms/vs/17/release/vc_redist.x64.exe) In the terminal, run: ``` git clone https://github.com/bmaltais/kohya_ss.git cd kohya_ss .\setup.bat ``` If this is a 1st install answer No when asked `Do you want to uninstall previous versions of torch and associated files before installing`. Then configure accelerate with the same answers as in the MacOS instructions when prompted. ### Optional: CUDNN 8.6 This step is optional but can improve the learning speed for NVIDIA 30X0/40X0 owners. It allows for larger training batch size and faster training speed. Due to the file size, I can't host the DLLs needed for CUDNN 8.6 on Github. I strongly advise you download them for a speed boost in sample generation (almost 50% on 4090 GPU) you can download them [here](https://b1.thefileditch.ch/mwxKTEtelILoIbMbruuM.zip). To install, simply unzip the directory and place the `cudnn_windows` folder in the root of the this repo. Run the following commands to install: ``` .\venv\Scripts\activate python .\tools\cudann_1.8_install.py ``` Once the commands have completed successfully you should be ready to use the new version. MacOS support is not tested and has been mostly taken from https://gist.github.com/jstayco/9f5733f05b9dc29de95c4056a023d645 ## Upgrading The following commands will work from the root directory of the project if you'd prefer to not run scripts. These commands will work on any OS. ```bash git pull .\venv\Scripts\activate pip install --use-pep517 --upgrade -r requirements.txt ``` ### Windows Upgrade When a new release comes out, you can upgrade your repo with the following commands in the root directory: ```powershell upgrade.bat ``` ### Linux and macOS Upgrade You can cd into the root directory and simply run ```bash # Refresh and update everything ./setup.sh # This will refresh everything, but NOT clone or pull the git repo. ./setup.sh --no-git-update ``` Once the commands have completed successfully you should be ready to use the new version. # Starting GUI Service The following command line arguments can be passed to the scripts on any OS to configure the underlying service. ``` --listen: the IP address to listen on for connections to Gradio. --username: a username for authentication. --password: a password for authentication. --server_port: the port to run the server listener on. --inbrowser: opens the Gradio UI in a web browser. --share: shares the Gradio UI. ``` ### Launching the GUI on Windows The two scripts to launch the GUI on Windows are gui.ps1 and gui.bat in the root directory. You can use whichever script you prefer. To launch the Gradio UI, run the script in a terminal with the desired command line arguments, for example: `gui.ps1 --listen 127.0.0.1 --server_port 7860 --inbrowser --share` or `gui.bat --listen 127.0.0.1 --server_port 7860 --inbrowser --share` ## Launching the GUI on Linux and macOS Run the launcher script with the desired command line arguments similar to Windows. `gui.sh --listen 127.0.0.1 --server_port 7860 --inbrowser --share` ## Launching the GUI directly using kohya_gui.py To run the GUI directly bypassing the wrapper scripts, simply use this command from the root project directory: ``` .\venv\Scripts\activate python .\kohya_gui.py ``` ## Dreambooth You can find the dreambooth solution specific here: [Dreambooth README](train_db_README.md) ## Finetune You can find the finetune solution specific here: [Finetune README](fine_tune_README.md) ## Train Network You can find the train network solution specific here: [Train network README](train_network_README.md) ## LoRA Training a LoRA currently uses the `train_network.py` code. You can create a LoRA network by using the all-in-one `gui.cmd` or by running the dedicated LoRA training GUI with: ``` .\venv\Scripts\activate python lora_gui.py ``` Once you have created the LoRA network, you can generate images via auto1111 by installing [this extension](https://github.com/kohya-ss/sd-webui-additional-networks). ### Naming of LoRA The LoRA supported by `train_network.py` has been named to avoid confusion. The documentation has been updated. The following are the names of LoRA types in this repository. 1. __LoRA-LierLa__ : (LoRA for __Li__ n __e__ a __r__ __La__ yers) LoRA for Linear layers and Conv2d layers with 1x1 kernel 2. __LoRA-C3Lier__ : (LoRA for __C__ olutional layers with __3__ x3 Kernel and __Li__ n __e__ a __r__ layers) In addition to 1., LoRA for Conv2d layers with 3x3 kernel LoRA-LierLa is the default LoRA type for `train_network.py` (without `conv_dim` network arg). LoRA-LierLa can be used with [our extension](https://github.com/kohya-ss/sd-webui-additional-networks) for AUTOMATIC1111's Web UI, or with the built-in LoRA feature of the Web UI. To use LoRA-C3Liar with Web UI, please use our extension. ## Sample image generation during training A prompt file might look like this, for example ``` # prompt 1 masterpiece, best quality, (1girl), in white shirts, upper body, looking at viewer, simple background --n low quality, worst quality, bad anatomy,bad composition, poor, low effort --w 768 --h 768 --d 1 --l 7.5 --s 28 # prompt 2 masterpiece, best quality, 1boy, in business suit, standing at street, looking back --n (low quality, worst quality), bad anatomy,bad composition, poor, low effort --w 576 --h 832 --d 2 --l 5.5 --s 40 ``` Lines beginning with `#` are comments. You can specify options for the generated image with options like `--n` after the prompt. The following can be used. * `--n` Negative prompt up to the next option. * `--w` Specifies the width of the generated image. * `--h` Specifies the height of the generated image. * `--d` Specifies the seed of the generated image. * `--l` Specifies the CFG scale of the generated image. * `--s` Specifies the number of steps in the generation. The prompt weighting such as `( )` and `[ ]` are working. ## Troubleshooting ### Page File Limit - X error relating to `page file`: Increase the page file size limit in Windows. ### No module called tkinter - Re-install [Python 3.10](https://www.python.org/ftp/python/3.10.9/python-3.10.9-amd64.exe) on your system. ### FileNotFoundError This is usually related to an installation issue. Make sure you do not have any python modules installed locally that could conflict with the ones installed in the venv: 1. Open a new powershell terminal and make sure no venv is active. 2. Run the following commands: ``` pip freeze > uninstall.txt pip uninstall -r uninstall.txt ``` This will store a backup file with your current locally installed pip packages and then uninstall them. Then, redo the installation instructions within the kohya_ss venv. ## Change History * 2023/04/22 (v21.5.5) - Update LoRA merge GUI to support SD checkpoint merge and up to 4 LoRA merging - Fixed `lora_interrogator.py` not working. Please refer to [PR #392](https://github.com/kohya-ss/sd-scripts/pull/392) for details. Thank you A2va and heyalexchoi! - Fixed the handling of tags containing `_` in `tag_images_by_wd14_tagger.py`. - Add new Extract DyLoRA gui to the Utilities tab. - Add new Merge LyCORIS models into checkpoint gui to the Utilities tab. - Add new info on startup to help debug things * 2023/04/17 (v21.5.4) - Fixed a bug that caused an error when loading DyLoRA with the `--network_weight` option in `train_network.py`. - Added the `--recursive` option to each script in the `finetune` folder to process folders recursively. Please refer to [PR #400](https://github.com/kohya-ss/sd-scripts/pull/400/) for details. Thanks to Linaqruf! - Upgrade Gradio to latest release - Fix issue when Adafactor is used as optimizer and LR Warmup is not 0: https://github.com/bmaltais/kohya_ss/issues/617 - Added support for DyLoRA in `train_network.py`. Please refer to [here](./train_network_README-ja.md#dylora) for details (currently only in Japanese). - Added support for caching latents to disk in each training script. Please specify __both__ `--cache_latents` and `--cache_latents_to_disk` options. - The files are saved in the same folder as the images with the extension `.npz`. If you specify the `--flip_aug` option, the files with `_flip.npz` will also be saved. - Multi-GPU training has not been tested. - This feature is not tested with all combinations of datasets and training scripts, so there may be bugs. - Added workaround for an error that occurs when training with `fp16` or `bf16` in `fine_tune.py`. - Implemented DyLoRA GUI support. There will now be a new 'DyLoRA Unit` slider when the LoRA type is selected as `kohya DyLoRA` to specify the desired Unit value for DyLoRA training. - Update gui.bat and gui.ps1 based on: https://github.com/bmaltais/kohya_ss/issues/188 - Update `setup.bat` to install torch 2.0.0 instead of 1.2.1. If you want to upgrade from 1.2.1 to 2.0.0 run setup.bat again, select 1 to uninstall the previous torch modules, then select 2 for torch 2.0.0 * 2023/04/09 (v21.5.2) - Added support for training with weighted captions. Thanks to AI-Casanova for the great contribution! - Please refer to the PR for details: [PR #336](https://github.com/kohya-ss/sd-scripts/pull/336) - Specify the `--weighted_captions` option. It is available for all training scripts except Textual Inversion and XTI. - This option is also applicable to token strings of the DreamBooth method. - The syntax for weighted captions is almost the same as the Web UI, and you can use things like `(abc)`, `[abc]`, and `(abc:1.23)`. Nesting is also possible. - If you include a comma in the parentheses, the parentheses will not be properly matched in the prompt shuffle/dropout, so do not include a comma in the parentheses. - Run gui.sh from any place