diff options
| author | Volpeon <git@volpeon.ink> | 2023-04-10 13:42:50 +0200 |
|---|---|---|
| committer | Volpeon <git@volpeon.ink> | 2023-04-10 13:42:50 +0200 |
| commit | cda7eba710dfde7b2e67964bcf76cd410c6a4a63 (patch) | |
| tree | 7fa63edba444d4c8f05e8ef8bc66ca32fbb86bbc /training | |
| parent | Fix sample gen: models sometimes weren't in eval mode (diff) | |
| download | textual-inversion-diff-cda7eba710dfde7b2e67964bcf76cd410c6a4a63.tar.gz textual-inversion-diff-cda7eba710dfde7b2e67964bcf76cd410c6a4a63.tar.bz2 textual-inversion-diff-cda7eba710dfde7b2e67964bcf76cd410c6a4a63.zip | |
Update
Diffstat (limited to 'training')
| -rw-r--r-- | training/functional.py | 45 | ||||
| -rw-r--r-- | training/strategy/dreambooth.py | 2 | ||||
| -rw-r--r-- | training/strategy/lora.py | 2 | ||||
| -rw-r--r-- | training/strategy/ti.py | 2 |
4 files changed, 27 insertions, 24 deletions
diff --git a/training/functional.py b/training/functional.py index ff6d3a9..4220c79 100644 --- a/training/functional.py +++ b/training/functional.py | |||
| @@ -143,28 +143,29 @@ def save_samples( | |||
| 143 | for prompt in batch["nprompt_ids"] | 143 | for prompt in batch["nprompt_ids"] |
| 144 | ] | 144 | ] |
| 145 | 145 | ||
| 146 | for i in range(num_batches): | 146 | with torch.inference_mode(): |
| 147 | start = i * batch_size | 147 | for i in range(num_batches): |
| 148 | end = (i + 1) * batch_size | 148 | start = i * batch_size |
| 149 | prompt = prompt_ids[start:end] | 149 | end = (i + 1) * batch_size |
| 150 | nprompt = nprompt_ids[start:end] | 150 | prompt = prompt_ids[start:end] |
| 151 | nprompt = nprompt_ids[start:end] | ||
| 151 | 152 | ||
| 152 | samples = pipeline( | 153 | samples = pipeline( |
| 153 | prompt=prompt, | 154 | prompt=prompt, |
| 154 | negative_prompt=nprompt, | 155 | negative_prompt=nprompt, |
| 155 | height=image_size, | 156 | height=image_size, |
| 156 | width=image_size, | 157 | width=image_size, |
| 157 | generator=gen, | 158 | generator=gen, |
| 158 | guidance_scale=guidance_scale, | 159 | guidance_scale=guidance_scale, |
| 159 | sag_scale=0, | 160 | sag_scale=0, |
| 160 | num_inference_steps=num_steps, | 161 | num_inference_steps=num_steps, |
| 161 | output_type='pil' | 162 | output_type='pil' |
| 162 | ).images | 163 | ).images |
| 163 | 164 | ||
| 164 | all_samples += samples | 165 | all_samples += samples |
| 165 | 166 | ||
| 166 | image_grid = make_grid(all_samples, grid_rows, grid_cols) | 167 | image_grid = make_grid(all_samples, grid_rows, grid_cols) |
| 167 | image_grid.save(file_path, quality=85) | 168 | image_grid.save(file_path, quality=85) |
| 168 | 169 | ||
| 169 | del generator | 170 | del generator |
| 170 | del pipeline | 171 | del pipeline |
| @@ -482,7 +483,8 @@ def train_loop( | |||
| 482 | local_progress_bar.clear() | 483 | local_progress_bar.clear() |
| 483 | global_progress_bar.clear() | 484 | global_progress_bar.clear() |
| 484 | 485 | ||
| 485 | on_sample(global_step + global_step_offset) | 486 | with on_eval(): |
| 487 | on_sample(global_step + global_step_offset) | ||
| 486 | 488 | ||
| 487 | if epoch % checkpoint_frequency == 0 and epoch != 0: | 489 | if epoch % checkpoint_frequency == 0 and epoch != 0: |
| 488 | local_progress_bar.clear() | 490 | local_progress_bar.clear() |
| @@ -606,7 +608,8 @@ def train_loop( | |||
| 606 | # Create the pipeline using using the trained modules and save it. | 608 | # Create the pipeline using using the trained modules and save it. |
| 607 | if accelerator.is_main_process: | 609 | if accelerator.is_main_process: |
| 608 | print("Finished!") | 610 | print("Finished!") |
| 609 | on_sample(global_step + global_step_offset) | 611 | with on_eval(): |
| 612 | on_sample(global_step + global_step_offset) | ||
| 610 | on_checkpoint(global_step + global_step_offset, "end") | 613 | on_checkpoint(global_step + global_step_offset, "end") |
| 611 | 614 | ||
| 612 | except KeyboardInterrupt: | 615 | except KeyboardInterrupt: |
diff --git a/training/strategy/dreambooth.py b/training/strategy/dreambooth.py index 7cdfc7f..fa51bc7 100644 --- a/training/strategy/dreambooth.py +++ b/training/strategy/dreambooth.py | |||
| @@ -149,7 +149,7 @@ def dreambooth_strategy_callbacks( | |||
| 149 | if torch.cuda.is_available(): | 149 | if torch.cuda.is_available(): |
| 150 | torch.cuda.empty_cache() | 150 | torch.cuda.empty_cache() |
| 151 | 151 | ||
| 152 | @on_eval() | 152 | @torch.no_grad() |
| 153 | def on_sample(step): | 153 | def on_sample(step): |
| 154 | unet_ = accelerator.unwrap_model(unet, keep_fp32_wrapper=True) | 154 | unet_ = accelerator.unwrap_model(unet, keep_fp32_wrapper=True) |
| 155 | text_encoder_ = accelerator.unwrap_model(text_encoder, keep_fp32_wrapper=True) | 155 | text_encoder_ = accelerator.unwrap_model(text_encoder, keep_fp32_wrapper=True) |
diff --git a/training/strategy/lora.py b/training/strategy/lora.py index 0f72a17..73ec8f2 100644 --- a/training/strategy/lora.py +++ b/training/strategy/lora.py | |||
| @@ -146,7 +146,7 @@ def lora_strategy_callbacks( | |||
| 146 | if torch.cuda.is_available(): | 146 | if torch.cuda.is_available(): |
| 147 | torch.cuda.empty_cache() | 147 | torch.cuda.empty_cache() |
| 148 | 148 | ||
| 149 | @on_eval() | 149 | @torch.no_grad() |
| 150 | def on_sample(step): | 150 | def on_sample(step): |
| 151 | unet_ = accelerator.unwrap_model(unet, keep_fp32_wrapper=True) | 151 | unet_ = accelerator.unwrap_model(unet, keep_fp32_wrapper=True) |
| 152 | text_encoder_ = accelerator.unwrap_model(text_encoder, keep_fp32_wrapper=True) | 152 | text_encoder_ = accelerator.unwrap_model(text_encoder, keep_fp32_wrapper=True) |
diff --git a/training/strategy/ti.py b/training/strategy/ti.py index f00045f..08af89d 100644 --- a/training/strategy/ti.py +++ b/training/strategy/ti.py | |||
| @@ -142,7 +142,7 @@ def textual_inversion_strategy_callbacks( | |||
| 142 | checkpoint_output_dir / f"{slugify(token)}_{step}_{postfix}.bin" | 142 | checkpoint_output_dir / f"{slugify(token)}_{step}_{postfix}.bin" |
| 143 | ) | 143 | ) |
| 144 | 144 | ||
| 145 | @on_eval() | 145 | @torch.no_grad() |
| 146 | def on_sample(step): | 146 | def on_sample(step): |
| 147 | unet_ = accelerator.unwrap_model(unet, keep_fp32_wrapper=True) | 147 | unet_ = accelerator.unwrap_model(unet, keep_fp32_wrapper=True) |
| 148 | text_encoder_ = accelerator.unwrap_model(text_encoder, keep_fp32_wrapper=True) | 148 | text_encoder_ = accelerator.unwrap_model(text_encoder, keep_fp32_wrapper=True) |
