From bfeafa8d5e602074fd8dc08143bfb3efc924424d Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Sun, 15 Jan 2023 17:04:14 -0500 Subject: [PATCH 1/6] improve UI of textual inversion frontend - File selection box now accepts directories that don't exist yet. - Fixed crash when resume is selected and no files available to resume from. --- ldm/invoke/textual_inversion_training.py | 38 +++++++++++++----------- scripts/textual_inversion_fe.py | 24 ++++++++++----- 2 files changed, 37 insertions(+), 25 deletions(-) diff --git a/ldm/invoke/textual_inversion_training.py b/ldm/invoke/textual_inversion_training.py index ab53f0801d..3c7ffd5663 100644 --- a/ldm/invoke/textual_inversion_training.py +++ b/ldm/invoke/textual_inversion_training.py @@ -518,10 +518,10 @@ def do_textual_inversion_training( pretrained_model_name_or_path = model_conf.get('repo_id',None) or Path(model_conf.get('path')) assert pretrained_model_name_or_path, f"models.yaml error: neither 'repo_id' nor 'path' is defined for {model}" pipeline_args = dict(cache_dir=global_cache_dir('diffusers')) - + # Load tokenizer if tokenizer_name: - tokenizer = CLIPTokenizer.from_pretrained(tokenizer_name,cache_dir=global_cache_dir('transformers')) + tokenizer = CLIPTokenizer.from_pretrained(tokenizer_name,**pipeline_args) else: tokenizer = CLIPTokenizer.from_pretrained(pretrained_model_name_or_path, subfolder="tokenizer", **pipeline_args) @@ -670,24 +670,28 @@ def do_textual_inversion_training( logger.info(f" Total optimization steps = {max_train_steps}") global_step = 0 first_epoch = 0 + resume_step = None # Potentially load in the weights and states from a previous save if resume_from_checkpoint: - if resume_from_checkpoint != "latest": - path = os.path.basename(resume_from_checkpoint) - else: - # Get the most recent checkpoint - dirs = os.listdir(output_dir) - dirs = [d for d in dirs if d.startswith("checkpoint")] - dirs = sorted(dirs, key=lambda x: int(x.split("-")[1])) - path = dirs[-1] - accelerator.print(f"Resuming from checkpoint {path}") - accelerator.load_state(os.path.join(output_dir, path)) - global_step = int(path.split("-")[1]) + try: + if resume_from_checkpoint != "latest": + path = os.path.basename(resume_from_checkpoint) + else: + # Get the most recent checkpoint + dirs = os.listdir(output_dir) + dirs = [d for d in dirs if d.startswith("checkpoint")] + dirs = sorted(dirs, key=lambda x: int(x.split("-")[1])) + path = dirs[-1] + accelerator.print(f"Resuming from checkpoint {path}") + accelerator.load_state(os.path.join(output_dir, path)) + global_step = int(path.split("-")[1]) - resume_global_step = global_step * gradient_accumulation_steps - first_epoch = resume_global_step // num_update_steps_per_epoch - resume_step = resume_global_step % num_update_steps_per_epoch + resume_global_step = global_step * gradient_accumulation_steps + first_epoch = resume_global_step // num_update_steps_per_epoch + resume_step = resume_global_step % num_update_steps_per_epoch + except: + logger.warn("No checkpoint available to resume from") # Only show the progress bar once on each machine. progress_bar = tqdm(range(global_step, max_train_steps), disable=not accelerator.is_local_main_process) @@ -700,7 +704,7 @@ def do_textual_inversion_training( text_encoder.train() for step, batch in enumerate(train_dataloader): # Skip steps until we reach the resumed step - if resume_from_checkpoint and epoch == first_epoch and step < resume_step: + if resume_step and resume_from_checkpoint and epoch == first_epoch and step < resume_step: if step % gradient_accumulation_steps == 0: progress_bar.update(1) continue diff --git a/scripts/textual_inversion_fe.py b/scripts/textual_inversion_fe.py index 941afcf613..4e31812f09 100755 --- a/scripts/textual_inversion_fe.py +++ b/scripts/textual_inversion_fe.py @@ -6,6 +6,7 @@ import sys import re import shutil import traceback +import curses from ldm.invoke.globals import Globals, global_set_root from omegaconf import OmegaConf from pathlib import Path @@ -43,6 +44,11 @@ class textualInversionForm(npyscreen.FormMultiPageAction): except: pass + self.add_widget_intelligent( + npyscreen.FixedText, + value='Use ctrl-N and ctrl-P to move to the ext and

revious fields, cursor arrows to make a selection, and space to toggle checkboxes.' + ) + self.model = self.add_widget_intelligent( npyscreen.TitleSelectOne, name='Model Name:', @@ -82,18 +88,18 @@ class textualInversionForm(npyscreen.FormMultiPageAction): max_height=4, ) self.train_data_dir = self.add_widget_intelligent( - npyscreen.TitleFilenameCombo, + npyscreen.TitleFilename, name='Data Training Directory:', select_dir=True, - must_exist=True, - value=saved_args.get('train_data_dir',Path(Globals.root) / TRAINING_DATA / default_placeholder_token) + must_exist=False, + value=str(saved_args.get('train_data_dir',Path(Globals.root) / TRAINING_DATA / default_placeholder_token)) ) self.output_dir = self.add_widget_intelligent( - npyscreen.TitleFilenameCombo, + npyscreen.TitleFilename, name='Output Destination Directory:', select_dir=True, must_exist=False, - value=saved_args.get('output_dir',Path(Globals.root) / TRAINING_DIR / default_placeholder_token) + value=str(saved_args.get('output_dir',Path(Globals.root) / TRAINING_DIR / default_placeholder_token)) ) self.resolution = self.add_widget_intelligent( npyscreen.TitleSelectOne, @@ -174,8 +180,8 @@ class textualInversionForm(npyscreen.FormMultiPageAction): def initializer_changed(self): placeholder = self.placeholder_token.value self.prompt_token.value = f'(Trigger by using <{placeholder}> in your prompts)' - self.train_data_dir.value = Path(Globals.root) / TRAINING_DATA / placeholder - self.output_dir.value = Path(Globals.root) / TRAINING_DIR / placeholder + self.train_data_dir.value = str(Path(Globals.root) / TRAINING_DATA / placeholder) + self.output_dir.value = str(Path(Globals.root) / TRAINING_DIR / placeholder) self.resume_from_checkpoint.value = Path(self.output_dir.value).exists() def on_ok(self): @@ -280,7 +286,9 @@ def save_args(args:dict): ''' Save the current argument values to an omegaconf file ''' - conf_file = Path(Globals.root) / TRAINING_DIR / CONF_FILE + dest_dir = Path(Globals.root) / TRAINING_DIR + os.makedirs(dest_dir, exist_ok=True) + conf_file = dest_dir / CONF_FILE conf = OmegaConf.create(args) OmegaConf.save(config=conf, f=conf_file) From 195294e74f345b0ae19a2d332db75ac804c4e65e Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Fri, 20 Jan 2023 15:17:54 -0500 Subject: [PATCH 2/6] sort models alphabetically --- ldm/modules/textual_inversion_manager.py | 8 +++++--- scripts/textual_inversion_fe.py | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ldm/modules/textual_inversion_manager.py b/ldm/modules/textual_inversion_manager.py index f7ced79a52..e2e9b25c27 100644 --- a/ldm/modules/textual_inversion_manager.py +++ b/ldm/modules/textual_inversion_manager.py @@ -66,8 +66,9 @@ class TextualInversionManager(): self._add_textual_inversion(embedding_info['name'], embedding_info['embedding'], defer_injecting_tokens=defer_injecting_tokens) - except ValueError: - print(f' | ignoring incompatible embedding {embedding_info["name"]}') + except ValueError as e: + print(f' | Ignoring incompatible embedding {embedding_info["name"]}') + print(f' | The error was {str(e)}') else: print(f'>> Failed to load embedding located at {ckpt_path}. Unsupported file.') @@ -151,7 +152,8 @@ class TextualInversionManager(): try: self._inject_tokens_and_assign_embeddings(ti) except ValueError as e: - print(f' | ignoring incompatible embedding trigger {ti.trigger_string}') + print(f' | Ignoring incompatible embedding trigger {ti.trigger_string}') + print(f' | The error was {str(e)}') continue injected_token_ids.append(ti.trigger_token_id) injected_token_ids.extend(ti.pad_token_ids) diff --git a/scripts/textual_inversion_fe.py b/scripts/textual_inversion_fe.py index 4e31812f09..0bde21c95c 100755 --- a/scripts/textual_inversion_fe.py +++ b/scripts/textual_inversion_fe.py @@ -219,7 +219,7 @@ class textualInversionForm(npyscreen.FormMultiPageAction): def get_model_names(self)->(List[str],int): conf = OmegaConf.load(os.path.join(Globals.root,'configs/models.yaml')) - model_names = list(conf.keys()) + model_names = sorted(list(conf.keys())) defaults = [idx for idx in range(len(model_names)) if 'default' in conf[model_names[idx]]] return (model_names,defaults[0]) From 080fc4b3805dbbec8268786319eb6cb256fad0d3 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Fri, 20 Jan 2023 16:55:50 -0500 Subject: [PATCH 3/6] add documentation and minor bug fixes - Added new documentation for textual inversion training process - Move `main.py` into the deprecated scripts folder - Fix bug in `textual_inversion.py` which was causing it to not load the globals module correctly. - Sort models alphabetically in console front end - Only show diffusers models in console front end --- docs/assets/textual-inversion/ti-frontend.png | Bin 0 -> 127229 bytes docs/features/TEXTUAL_INVERSION.md | 290 ++++++++++++++---- scripts/configure_invokeai.py | 2 +- main.py => scripts/orig_scripts/main.py | 0 scripts/textual_inversion.py | 4 +- scripts/textual_inversion_fe.py | 6 +- 6 files changed, 239 insertions(+), 63 deletions(-) create mode 100644 docs/assets/textual-inversion/ti-frontend.png rename main.py => scripts/orig_scripts/main.py (100%) diff --git a/docs/assets/textual-inversion/ti-frontend.png b/docs/assets/textual-inversion/ti-frontend.png new file mode 100644 index 0000000000000000000000000000000000000000..0500e9b13291d8e5111dabfb72371b133adf8a5a GIT binary patch literal 127229 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 z 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 cKFq}0{yo59AHGo#`Xv}CF?rDf5q and its associated notebooks. + and its associated +notebooks. -## **Training** +## **Hardware and Software Requirements** -To train, prepare a folder that contains images sized at 512x512 and execute the -following: +You will need a GPU to perform training in a reasonable length of +time, and at least 12 GB of VRAM. We recommend using the [`xformers` +library](../installation/070_INSTALL_XFORMERS) to accelerate the +training process further. During training, about ~8 GB is temporarily +needed in order to store intermediate models, checkpoints and logs. -### WINDOWS +## **Preparing for Training** -As the default backend is not available on Windows, if you're using that -platform, set the environment variable `PL_TORCH_DISTRIBUTED_BACKEND` to `gloo` +To train, prepare a folder that contains 3-5 images that illustrate +the object or concept. It is good to provide a variety of examples or +poses to avoid overtraining the system. Format these images as PNG +(preferred) or JPG. You do not need to resize or crop the images in +advance, but for more control you may wish to do so. -```bash -python3 ./main.py -t \ - --base ./configs/stable-diffusion/v1-finetune.yaml \ - --actual_resume ./models/ldm/stable-diffusion-v1/model.ckpt \ - -n my_cat \ - --gpus 0 \ - --data_root D:/textual-inversion/my_cat \ - --init_word 'cat' +Place the training images in a directory on the machine InvokeAI runs +on. We recommend placing them in a subdirectory of the +`text-inversion-training-data` folder located in the InvokeAI root +directory, ordinarily `~/invokeai` (Linux/Mac), or +`C:\Users\your_name\invokeai` (Windows). For example, to create an +embedding for the "psychedelic" style, you'd place the training images +into the directory +`~invokeai/text-inversion-training-data/psychedelic`. + +## **Launching Training Using the Console Front End** + +InvokeAI 2.3 and higher comes with a text console-based training front +end. From within the `invoke.sh`/`invoke.bat` Invoke launcher script, +start the front end by selecting choice (3): + +```sh +Do you want to generate images using the +1. command-line +2. browser-based UI +3. textual inversion training +4. open the developer console +Please enter 1, 2, 3, or 4: [1] 3 ``` -During the training process, files will be created in -`/logs/[project][time][project]/` where you can see the process. +From the command line, with the InvokeAI virtual environment active, +you can launch the front end with the command +`textual_inversion_fe`. -Conditioning contains the training prompts inputs, reconstruction the input -images for the training epoch samples, samples scaled for a sample of the prompt -and one with the init word provided. +This will launch a text-based front end that will look like this: -On a RTX3090, the process for SD will take ~1h @1.6 iterations/sec. +

+![ti-frontend](../assets/textual-inversion/ti-frontend.png) +
-!!! note +The interface is keyboard-based. Move from field to field using +control-N (^N) to move to the next field and control-P (^P) to the +previous one. and work as well. Once a field is +active, use the cursor keys. In a checkbox group, use the up and down +cursor keys to move from choice to choice, and to select a +choice. In a scrollbar, use the left and right cursor keys to increase +and decrease the value of the scroll. In textfields, type the desired +values. - According to the associated paper, the optimal number of - images is 3-5. Your model may not converge if you use more images than - that. +The number of parameters may look intimidating, but in most cases the +predefined defaults work fine. The red circled fields in the above +illustration are the ones you will adjust most frequently. -Training will run indefinitely, but you may wish to stop it (with ctrl-c) before -the heat death of the universe, when you find a low loss epoch or around ~5000 -iterations. Note that you can set a fixed limit on the number of training steps -by decreasing the "max_steps" option in -configs/stable_diffusion/v1-finetune.yaml (currently set to 4000000) +### Model Name -## **Run the Model** +This will list all the diffusers models that are currently +installed. Select the one you wish to use as the basis for your +embedding. Be aware that if you use a SD-1.X-based model for your +training, you will only be able to use this embedding with other +SD-1.X-based models. Similarly, if you train on SD-2.X, you will only +be able to use the embeddings with models based on SD-2.X. -Once the model is trained, specify the trained .pt or .bin file when starting -invoke using +### Trigger Term -```bash -python3 ./scripts/invoke.py \ - --embedding_path /path/to/embedding.pt +This is the prompt term you will use to trigger the embedding. Type a +single word or phrase you wish to use as the trigger, example +"psychedelic" (without angle brackets). Within InvokeAI, you will then +be able to activate the trigger using the syntax ``. + +### Initializer + +This is a single character that is used internally during the training +process as a placeholder for the trigger term. It defaults to "*" and +can usually be left alone. + +### Resume from last saved checkpoint + +As training proceeds, textual inversion will write a series of +intermediate files that can be used to resume training from where it +was left off in the case of an interruption. This checkbox will be +automatically selected if you provide a previously used trigger term +and at least one checkpoint file is found on disk. + +Note that as of 20 January 2023, resume does not seem to be working +properly due to an issue with the upstream code. + +### Data Training Directory + +This is the location of the images to be used for training. When you +select a trigger term like "my-trigger", the frontend will prepopulate +this field with `~/invokeai/text-inversion-training-data/my-trigger`, +but you can change the path to wherever you want. + +### Output Destination Directory + +This is the location of the logs, checkpoint files, and embedding +files created during training. When you select a trigger term like +"my-trigger", the frontend will prepopulate this field with +`~/invokeai/text-inversion-output/my-trigger`, but you can change the +path to wherever you want. + +### Image resolution + +The images in the training directory will be automatically scaled to +the value you use here. For best results, you will want to use the +same default resolution of the underlying model (512 pixels for +SD-1.5, 768 for the larger version of SD-2.1). + +### Center crop images + +If this is selected, your images will be center cropped to make them +square before resizing them to the desired resolution. Center cropping +can indiscriminately cut off the top of subjects' heads for portrait +aspect images, so if you have images like this, you may wish to use a +photoeditor to manually crop them to a square aspect ratio. + +### Mixed precision + +Select the floating point precision for the embedding. "no" will +result in a full 32-bit precision, "fp16" will provide 16-bit +precision, and "bf16" will provide mixed precision (only available +when XFormers is used). + +### Max training steps + +How many steps the training will take before the model converges. Most +training sets will converge with 2000-3000 steps. + +### Batch size + +This adjusts how many training images are processed simultaneously in +each step. Higher values will cause the training process to run more +quickly, but use more memory. The default size will run with GPUs with +as little as 12 GB. + +### Learning rate + +The rate at which the system adjusts its internal weights during +training. Higher values risk overtraining (getting the same image each +time), and lower values will take more steps to train a good +model. The default of 0.0005 is conservative; you may wish to increase +it to 0.005 to speed up training. + +### Scale learning rate by number of GPUs, steps and batch size + +If this is selected (the default) the system will adjust the provided +learning rate to improve performance. + +### Use xformers acceleration + +This will activate XFormers memory-efficient attention. You need to +have XFormers installed for this to have an effect. + +### Learning rate scheduler + +This adjusts how the learning rate changes over the course of +training. The default "constant" means to use a constant learning rate +for the entire training session. The other values scale the learning +rate according to various formulas. + +Only "constant" is supported by the XFormers library. + +### Gradient accumulation steps + +This is a parameter that allows you to use bigger batch sizes than +your GPU's VRAM would ordinarily accommodate, at the cost of some +performance. + +### Warmup steps + +If "constant_with_warmup" is selected in the learning rate scheduler, +then this provides the number of warmup steps. Warmup steps have a +very low learning rate, and are one way of preventing early +overtraining. + +## The training run + +Start the training run by advancing to the OK button (bottom right) +and pressing . A series of progress messages will be displayed +as the training process proceeds. This may take an hour or two, +depending on settings and the speed of your system. Various log and +checkpoint files will be written into the output directory (ordinarily +`~/invokeai/text-inversion-output/my-model/`) + +At the end of successful training, the system will copy the file +`learned_embeds.bin` into the InvokeAI root directory's `embeddings` +directory, using a subdirectory named after the trigger token. For +example, if the trigger token was `psychedelic`, then look for the +embeddings file in +`~/invokeai/embeddings/psychedelic/learned_embeds.bin` + +You may now launch InvokeAI and try out a prompt that uses the trigger +term. For example `a plate of banana sushi in style`. + +## **Training with the Command-Line Script** + +InvokeAI also comes with a traditional command-line script for +launching textual inversion training. It is named +`textual_inversion`, and can be launched from within the +"developer's console", or from the command line after activating +InvokeAI's virtual environment. + +It accepts a large number of arguments, which can be summarized by +passing the `--help` argument: + +```sh +textual_inversion --help ``` -Then, to utilize your subject at the invoke prompt - -```bash -invoke> "a photo of *" +Typical usage is shown here: +```sh +python textual_inversion.py \ + --model=stable-diffusion-1.5 \ + --resolution=512 \ + --learnable_property=style \ + --initializer_token='*' \ + --placeholder_token='' \ + --train_data_dir=/home/lstein/invokeai/training-data/psychedelic \ + --output_dir=/home/lstein/invokeai/text-inversion-training/psychedelic \ + --scale_lr \ + --train_batch_size=8 \ + --gradient_accumulation_steps=4 \ + --max_train_steps=3000 \ + --learning_rate=0.0005 \ + --resume_from_checkpoint=latest \ + --lr_scheduler=constant \ + --mixed_precision=fp16 \ + --only_save_embeds ``` -This also works with image2image +## Reading -```bash -invoke> "waterfall and rainbow in the style of *" --init_img=./init-images/crude_drawing.png --strength=0.5 -s100 -n4 -``` +For more information on textual inversion, please see the following +resources: -For .pt files it's also possible to train multiple tokens (modify the -placeholder string in `configs/stable-diffusion/v1-finetune.yaml`) and combine -LDM checkpoints using: +* The [textual inversion repository](https://github.com/rinongal/textual_inversion) and + associated paper for details and limitations. +* [HuggingFace's textual inversion training + page](https://huggingface.co/docs/diffusers/training/text_inversion) -```bash -python3 ./scripts/merge_embeddings.py \ - --manager_ckpts /path/to/first/embedding.pt \ - [,[...]] \ - --output_path /path/to/output/embedding.pt -``` +--- -Credit goes to rinongal and the repository - -Please see [the repository](https://github.com/rinongal/textual_inversion) and -associated paper for details and limitations. +copyright (c) 2023, Lincoln Stein and the InvokeAI Development Team \ No newline at end of file diff --git a/scripts/configure_invokeai.py b/scripts/configure_invokeai.py index 9d17a73317..9030ed6b4c 100755 --- a/scripts/configure_invokeai.py +++ b/scripts/configure_invokeai.py @@ -746,7 +746,7 @@ def initialize_rootdir(root:str,yes_to_all:bool=False): safety_checker = '--nsfw_checker' if enable_safety_checker else '--no-nsfw_checker' - for name in ('models','configs','embeddings'): + for name in ('models','configs','embeddings','text-inversion-data','text-inversion-training-data'): os.makedirs(os.path.join(root,name), exist_ok=True) for src in (['configs']): dest = os.path.join(root,src) diff --git a/main.py b/scripts/orig_scripts/main.py similarity index 100% rename from main.py rename to scripts/orig_scripts/main.py diff --git a/scripts/textual_inversion.py b/scripts/textual_inversion.py index fb176a5eec..a7aae8f40f 100755 --- a/scripts/textual_inversion.py +++ b/scripts/textual_inversion.py @@ -1,11 +1,11 @@ #!/usr/bin/env python # Copyright 2023, Lincoln Stein @lstein -from ldm.invoke.globals import Globals, set_root +from ldm.invoke.globals import Globals, global_set_root from ldm.invoke.textual_inversion_training import parse_args, do_textual_inversion_training if __name__ == "__main__": args = parse_args() - set_root(args.root_dir or Globals.root) + global_set_root(args.root_dir or Globals.root) kwargs = vars(args) do_textual_inversion_training(**kwargs) diff --git a/scripts/textual_inversion_fe.py b/scripts/textual_inversion_fe.py index 0bde21c95c..cc260057c2 100755 --- a/scripts/textual_inversion_fe.py +++ b/scripts/textual_inversion_fe.py @@ -13,8 +13,8 @@ from pathlib import Path from typing import List import argparse -TRAINING_DATA = 'training-data' -TRAINING_DIR = 'text-inversion-training' +TRAINING_DATA = 'text-inversion-training-data' +TRAINING_DIR = 'text-inversion-output' CONF_FILE = 'preferences.conf' class textualInversionForm(npyscreen.FormMultiPageAction): @@ -219,7 +219,7 @@ class textualInversionForm(npyscreen.FormMultiPageAction): def get_model_names(self)->(List[str],int): conf = OmegaConf.load(os.path.join(Globals.root,'configs/models.yaml')) - model_names = sorted(list(conf.keys())) + model_names = [idx for idx in sorted(list(conf.keys())) if conf[idx].get('format',None)=='diffusers'] defaults = [idx for idx in range(len(model_names)) if 'default' in conf[model_names[idx]]] return (model_names,defaults[0]) From 4b8aebabfb0b18a4210f65a07339e35dbfe41ae7 Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Fri, 20 Jan 2023 16:59:34 -0500 Subject: [PATCH 4/6] add diffusers repo as a reference for further reading --- docs/features/TEXTUAL_INVERSION.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/features/TEXTUAL_INVERSION.md b/docs/features/TEXTUAL_INVERSION.md index 2413659099..7d54ea971c 100644 --- a/docs/features/TEXTUAL_INVERSION.md +++ b/docs/features/TEXTUAL_INVERSION.md @@ -262,6 +262,10 @@ resources: associated paper for details and limitations. * [HuggingFace's textual inversion training page](https://huggingface.co/docs/diffusers/training/text_inversion) +* [HuggingFace example script + documentation](https://github.com/huggingface/diffusers/tree/main/examples/textual_inversion) + (Note that this script is similar to, but not identical, to + `textual_inversion`, but produces embed files that are completely compatible. --- From c3aa3d48a08a2054860f653820a7ee7f95e182bd Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Fri, 20 Jan 2023 17:13:32 -0500 Subject: [PATCH 5/6] ignore .DS_Store files when scanning Mac embeddings --- ldm/modules/textual_inversion_manager.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ldm/modules/textual_inversion_manager.py b/ldm/modules/textual_inversion_manager.py index e2e9b25c27..2dbc1de2f5 100644 --- a/ldm/modules/textual_inversion_manager.py +++ b/ldm/modules/textual_inversion_manager.py @@ -50,6 +50,8 @@ class TextualInversionManager(): return [ti.trigger_string for ti in self.textual_inversions] def load_textual_inversion(self, ckpt_path, defer_injecting_tokens: bool=False): + if str(ckpt_path).endswith('.DS_Store'): + return try: scan_result = scan_file_path(ckpt_path) if scan_result.infected_files == 1: From 98e97211012f40ece33d35b2a6ddb501691e3eee Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Mon, 23 Jan 2023 21:04:07 -0500 Subject: [PATCH 6/6] correct fail-to-resume error - applied https://github.com/huggingface/diffusers/pull/2072 to fix error in epoch calculation that caused script not to resume from latest checkpoint when asked to. --- ldm/invoke/textual_inversion_training.py | 44 +++++++++++++++--------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/ldm/invoke/textual_inversion_training.py b/ldm/invoke/textual_inversion_training.py index 3c7ffd5663..7003a149fb 100644 --- a/ldm/invoke/textual_inversion_training.py +++ b/ldm/invoke/textual_inversion_training.py @@ -4,7 +4,6 @@ # and modified slightly by Lincoln Stein (@lstein) to work with InvokeAI import argparse -from argparse import Namespace import logging import math import os @@ -207,6 +206,12 @@ def parse_args(): parser.add_argument("--adam_epsilon", type=float, default=1e-08, help="Epsilon value for the Adam optimizer") parser.add_argument("--push_to_hub", action="store_true", help="Whether or not to push the model to the Hub.") parser.add_argument("--hub_token", type=str, default=None, help="The token to use to push to the Model Hub.") + parser.add_argument( + "--hub_model_id", + type=str, + default=None, + help="The name of the repository to keep in sync with the local `output_dir`.", + ) parser.add_argument( "--logging_dir", type=Path, @@ -455,7 +460,8 @@ def do_textual_inversion_training( checkpointing_steps:int=500, resume_from_checkpoint:Path=None, enable_xformers_memory_efficient_attention:bool=False, - root_dir:Path=None + root_dir:Path=None, + hub_model_id:str=None, ): env_local_rank = int(os.environ.get("LOCAL_RANK", -1)) if env_local_rank != -1 and env_local_rank != local_rank: @@ -631,7 +637,7 @@ def do_textual_inversion_training( text_encoder, optimizer, train_dataloader, lr_scheduler ) - # For mixed precision training we cast the text_encoder and vae weights to half-precision + # For mixed precision training we cast the unet and vae weights to half-precision # as these models are only used for inference, keeping weights in full precision is not required. weight_dtype = torch.float32 if accelerator.mixed_precision == "fp16": @@ -674,25 +680,29 @@ def do_textual_inversion_training( # Potentially load in the weights and states from a previous save if resume_from_checkpoint: - try: - if resume_from_checkpoint != "latest": - path = os.path.basename(resume_from_checkpoint) - else: - # Get the most recent checkpoint - dirs = os.listdir(output_dir) - dirs = [d for d in dirs if d.startswith("checkpoint")] - dirs = sorted(dirs, key=lambda x: int(x.split("-")[1])) - path = dirs[-1] + if resume_from_checkpoint != "latest": + path = os.path.basename(resume_from_checkpoint) + else: + # Get the most recent checkpoint + dirs = os.listdir(output_dir) + dirs = [d for d in dirs if d.startswith("checkpoint")] + dirs = sorted(dirs, key=lambda x: int(x.split("-")[1])) + path = dirs[-1] if len(dirs) > 0 else None + + if path is None: + accelerator.print( + f"Checkpoint '{resume_from_checkpoint}' does not exist. Starting a new training run." + ) + resume_from_checkpoint = None + else: accelerator.print(f"Resuming from checkpoint {path}") accelerator.load_state(os.path.join(output_dir, path)) global_step = int(path.split("-")[1]) resume_global_step = global_step * gradient_accumulation_steps - first_epoch = resume_global_step // num_update_steps_per_epoch - resume_step = resume_global_step % num_update_steps_per_epoch - except: - logger.warn("No checkpoint available to resume from") - + first_epoch = global_step // num_update_steps_per_epoch + resume_step = resume_global_step % (num_update_steps_per_epoch * gradient_accumulation_steps) + # Only show the progress bar once on each machine. progress_bar = tqdm(range(global_step, max_train_steps), disable=not accelerator.is_local_main_process) progress_bar.set_description("Steps")