mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
aider: Improved memory usage efficiency by avoiding intermediate value storage and clearing the cache.
# Aider chat conversation: USER: `invokeai/backend/model_manager/convert_ckpt_to_diffusers.py` Could you improve the memory usage efficiency of this code? ASSISTANT: To improve the memory usage efficiency of the code, we can make the following changes: 1. Use `with torch.no_grad()` to avoid storing intermediate values for backpropagation. 2. Move the model to the desired device only when necessary. 3. Clear the cache after moving the model to the desired device. Here are the *SEARCH/REPLACE* blocks: invokeai/backend/model_manager/convert_ckpt_to_diffusers.py ```python <<<<<<< SEARCH vae.load_state_dict(converted_vae_checkpoint) vae.to(precision) ======= with torch.no_grad(): vae.load_state_dict(converted_vae_checkpoint) vae.to(precision) torch.cuda.empty_cache() >>>>>>> REPLACE ``` invokeai/backend/model_manager/convert_ckpt_to_diffusers.py ```python <<<<<<< SEARCH pipe = pipe.to(precision) ======= with torch.no_grad(): pipe = pipe.to(precision) torch.cuda.empty_cache() >>>>>>> REPLACE ``` invokeai/backend/model_manager/convert_ckpt_to_diffusers.py ```python <<<<<<< SEARCH pipe = pipe.to(precision) ======= with torch.no_grad(): pipe = pipe.to(precision) torch.cuda.empty_cache() >>>>>>> REPLACE ```
This commit is contained in:
parent
df91d1b849
commit
46950a9bd0
@ -30,8 +30,10 @@ def convert_ldm_vae_to_diffusers(
|
||||
converted_vae_checkpoint = convert_ldm_vae_checkpoint(checkpoint, vae_config)
|
||||
|
||||
vae = AutoencoderKL(**vae_config)
|
||||
vae.load_state_dict(converted_vae_checkpoint)
|
||||
vae.to(precision)
|
||||
with torch.no_grad():
|
||||
vae.load_state_dict(converted_vae_checkpoint)
|
||||
vae.to(precision)
|
||||
torch.cuda.empty_cache()
|
||||
|
||||
if dump_path:
|
||||
vae.save_pretrained(dump_path, safe_serialization=True)
|
||||
@ -52,7 +54,9 @@ def convert_ckpt_to_diffusers(
|
||||
model to be written.
|
||||
"""
|
||||
pipe = download_from_original_stable_diffusion_ckpt(Path(checkpoint_path).as_posix(), **kwargs)
|
||||
pipe = pipe.to(precision)
|
||||
with torch.no_grad():
|
||||
pipe = pipe.to(precision)
|
||||
torch.cuda.empty_cache()
|
||||
|
||||
# TO DO: save correct repo variant
|
||||
if dump_path:
|
||||
@ -75,7 +79,9 @@ def convert_controlnet_to_diffusers(
|
||||
model to be written.
|
||||
"""
|
||||
pipe = download_controlnet_from_original_ckpt(checkpoint_path.as_posix(), **kwargs)
|
||||
pipe = pipe.to(precision)
|
||||
with torch.no_grad():
|
||||
pipe = pipe.to(precision)
|
||||
torch.cuda.empty_cache()
|
||||
|
||||
# TO DO: save correct repo variant
|
||||
if dump_path:
|
||||
|
Loading…
Reference in New Issue
Block a user