Skip to content

Commit 006756f

Browse files
author
Fampai
committed
Added TI training optimizations
option to use xattention optimizations when training option to unload vae when training
1 parent 700162a commit 006756f

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

modules/shared.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,11 +256,12 @@ def options_section(section_identifier, options_dict):
256256
}))
257257

258258
options_templates.update(options_section(('training', "Training"), {
259-
"unload_models_when_training": OptionInfo(False, "Move VAE and CLIP to RAM when training hypernetwork. Saves VRAM."),
259+
"unload_models_when_training": OptionInfo(False, "Move VAE and CLIP to RAM when training if possible. Saves VRAM."),
260260
"dataset_filename_word_regex": OptionInfo("", "Filename word regex"),
261261
"dataset_filename_join_string": OptionInfo(" ", "Filename join string"),
262262
"training_image_repeats_per_epoch": OptionInfo(1, "Number of repeats for a single input image per epoch; used only for displaying epoch number", gr.Number, {"precision": 0}),
263263
"training_write_csv_every": OptionInfo(500, "Save an csv containing the loss to log directory every N steps, 0 to disable"),
264+
"training_xattention_optimizations": OptionInfo(False, "Use cross attention optimizations while training"),
264265
}))
265266

266267
options_templates.update(options_section(('sd', "Stable Diffusion"), {

modules/textual_inversion/textual_inversion.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_direc
214214
filename = os.path.join(shared.cmd_opts.embeddings_dir, f'{embedding_name}.pt')
215215

216216
log_directory = os.path.join(log_directory, datetime.datetime.now().strftime("%Y-%m-%d"), embedding_name)
217+
unload = shared.opts.unload_models_when_training
217218

218219
if save_embedding_every > 0:
219220
embedding_dir = os.path.join(log_directory, "embeddings")
@@ -238,6 +239,8 @@ def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_direc
238239
shared.state.textinfo = f"Preparing dataset from {html.escape(data_root)}..."
239240
with torch.autocast("cuda"):
240241
ds = modules.textual_inversion.dataset.PersonalizedBase(data_root=data_root, width=training_width, height=training_height, repeats=shared.opts.training_image_repeats_per_epoch, placeholder_token=embedding_name, model=shared.sd_model, device=devices.device, template_file=template_file, batch_size=batch_size)
242+
if unload:
243+
shared.sd_model.first_stage_model.to(devices.cpu)
241244

242245
hijack = sd_hijack.model_hijack
243246

@@ -303,6 +306,9 @@ def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_direc
303306
if images_dir is not None and steps_done % create_image_every == 0:
304307
forced_filename = f'{embedding_name}-{steps_done}'
305308
last_saved_image = os.path.join(images_dir, forced_filename)
309+
310+
shared.sd_model.first_stage_model.to(devices.device)
311+
306312
p = processing.StableDiffusionProcessingTxt2Img(
307313
sd_model=shared.sd_model,
308314
do_not_save_grid=True,
@@ -330,6 +336,9 @@ def train_embedding(embedding_name, learn_rate, batch_size, data_root, log_direc
330336
processed = processing.process_images(p)
331337
image = processed.images[0]
332338

339+
if unload:
340+
shared.sd_model.first_stage_model.to(devices.cpu)
341+
333342
shared.state.current_image = image
334343

335344
if save_image_with_stored_embedding and os.path.exists(last_saved_file) and embedding_yet_to_be_embedded:

modules/textual_inversion/ui.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@ def train_embedding(*args):
2525

2626
assert not shared.cmd_opts.lowvram, 'Training models with lowvram not possible'
2727

28+
apply_optimizations = shared.opts.training_xattention_optimizations
2829
try:
29-
sd_hijack.undo_optimizations()
30+
if not apply_optimizations:
31+
sd_hijack.undo_optimizations()
3032

3133
embedding, filename = modules.textual_inversion.textual_inversion.train_embedding(*args)
3234

@@ -38,5 +40,6 @@ def train_embedding(*args):
3840
except Exception:
3941
raise
4042
finally:
41-
sd_hijack.apply_optimizations()
43+
if not apply_optimizations:
44+
sd_hijack.apply_optimizations()
4245

0 commit comments

Comments
 (0)