From 4ed4f99d63618b00d6b64c171dc925b57232a967 Mon Sep 17 00:00:00 2001 From: RedCore <42092152+emirhnergn@users.noreply.github.com> Date: Mon, 24 Apr 2023 18:48:40 +0300 Subject: [PATCH 1/9] invert sampler selection process #447 --- extensions-builtin/sd-webui-controlnet | 2 +- extensions-builtin/stable-diffusion-webui-images-browser | 2 +- modules/lora | 2 +- modules/sd_samplers.py | 8 ++++---- modules/shared.py | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/extensions-builtin/sd-webui-controlnet b/extensions-builtin/sd-webui-controlnet index 1ce36722a..9eeb71a79 160000 --- a/extensions-builtin/sd-webui-controlnet +++ b/extensions-builtin/sd-webui-controlnet @@ -1 +1 @@ -Subproject commit 1ce36722acb09cf546979de3e92c53577761ef4b +Subproject commit 9eeb71a796b06f912e1e66acecf4242d165db67b diff --git a/extensions-builtin/stable-diffusion-webui-images-browser b/extensions-builtin/stable-diffusion-webui-images-browser index 0029d95a5..704e42c10 160000 --- a/extensions-builtin/stable-diffusion-webui-images-browser +++ b/extensions-builtin/stable-diffusion-webui-images-browser @@ -1 +1 @@ -Subproject commit 0029d95a5f720b387c530e916a9e166277aa66e2 +Subproject commit 704e42c10d01e6c6965493ec956a82bb8fc2da51 diff --git a/modules/lora b/modules/lora index 25c8279f2..852481e14 160000 --- a/modules/lora +++ b/modules/lora @@ -1 +1 @@ -Subproject commit 25c8279f2692983f262f7e024b52defff852ae46 +Subproject commit 852481e14d08d510377813790ade557b4e2313f5 diff --git a/modules/sd_samplers.py b/modules/sd_samplers.py index ff361f22b..7b2200115 100644 --- a/modules/sd_samplers.py +++ b/modules/sd_samplers.py @@ -31,11 +31,11 @@ def create_sampler(name, model): def set_samplers(): global samplers, samplers_for_img2img - hidden = set(shared.opts.hide_samplers) - hidden_img2img = set(shared.opts.hide_samplers + ['PLMS', 'UniPC']) + shown = set(shared.opts.show_samplers) + shown_img2img = set(shared.opts.show_samplers + ['PLMS', 'UniPC']) - samplers = [x for x in all_samplers if x.name not in hidden] - samplers_for_img2img = [x for x in all_samplers if x.name not in hidden_img2img] + samplers = [x for x in all_samplers if x.name in shown] + samplers_for_img2img = [x for x in all_samplers if x.name in shown_img2img] samplers_map.clear() for sampler in all_samplers: diff --git a/modules/shared.py b/modules/shared.py index 664620561..02600ca9a 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -432,7 +432,7 @@ options_templates.update(options_section(('ui', "Live previews"), { })) options_templates.update(options_section(('sampler-params', "Sampler parameters"), { - "hide_samplers": OptionInfo(["Euler", "LMS", "Heun", "DPM2", "DPM2 a", "DPM++ 2M", "DPM fast", "DPM adaptive", "DPM++ 2S a Karras", "DPM++ 2S a", "DPM++ SDE Karras", "DPM2 a Karras", "LMS Karras"], "Hide samplers in user interface", gr.CheckboxGroup, lambda: {"choices": [x.name for x in list_samplers()]}), + "show_samplers": OptionInfo(["Euler", "LMS", "Heun", "DPM2", "DPM2 a", "DPM++ 2M", "DPM fast", "DPM adaptive", "DPM++ 2S a Karras", "DPM++ 2S a", "DPM++ SDE Karras", "DPM2 a Karras", "LMS Karras"], "Show samplers in user interface", gr.CheckboxGroup, lambda: {"choices": [x.name for x in list_samplers()]}), "eta_ddim": OptionInfo(0.0, "eta (noise multiplier) for DDIM", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), "eta_ancestral": OptionInfo(1.0, "eta (noise multiplier) for ancestral samplers", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), "ddim_discretize": OptionInfo('uniform', "img2img DDIM discretize", gr.Radio, {"choices": ['uniform', 'quad']}), From 579da8c9d58a3c47b43f3befdffa71b03910908e Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 24 Apr 2023 12:05:21 -0400 Subject: [PATCH 2/9] add token merging and vae rollback --- TODO.md | 3 +++ modules/cmd_args.py | 5 ++-- modules/shared.py | 65 +++++++++++---------------------------------- 3 files changed, 22 insertions(+), 51 deletions(-) diff --git a/TODO.md b/TODO.md index a517659c1..2b998e5d9 100644 --- a/TODO.md +++ b/TODO.md @@ -58,6 +58,9 @@ Tech that can be integrated as part of the core workflow... - use samples format for live preview - identify race condition where generate locks up while fetching preview +- add pulldowns to x/y/z script +- add VAE rollback feature in case of NaNs +- add token merging - use **Approx NN** for live preview - create default `styles.csv` - fix setup not installing `tensorflow` dependencies diff --git a/modules/cmd_args.py b/modules/cmd_args.py index 7353a292c..e6364e7fe 100644 --- a/modules/cmd_args.py +++ b/modules/cmd_args.py @@ -44,8 +44,6 @@ parser.add_argument("--no-hashing", action='store_true', help="Disable sha256 ha parser.add_argument("--no-download-sd-model", action='store_true', help="Disable download of default model even if no model is found", default=False) parser.add_argument("--profile", action='store_true', help="Run profiler, default: %(default)s") parser.add_argument("--disable-queue", action='store_true', help="Disable Gradio queues and force use of HTTP instead of WebSockets, default: %(default)s") -parser.add_argument("--rollback-vae", action='store_true', help="trying to roll back vae when produced nan image, need to enable nan check", default=False) -parser.add_argument("--token-merging", action='store_true', help="Provides speed and memory improvements by merging redundant tokens. This has a more pronounced effect on higher resolutions.", default=False) def compatibility_args(opts, args): @@ -67,6 +65,9 @@ def compatibility_args(opts, args): parser.add_argument("--opt-channelslast", help=argparse.SUPPRESS, default=opts.opt_channelslast) parser.add_argument("--xformers", default = (opts.cross_attention_optimization == "xFormers"), action='store_true', help=argparse.SUPPRESS) parser.add_argument("--disable-nan-check", help=argparse.SUPPRESS, default=opts.disable_nan_check) + parser.add_argument("--token-merging", help=argparse.SUPPRESS, default=opts.token_merging) + parser.add_argument("--rollback-vae", help=argparse.SUPPRESS, default=opts.rollback_vae) + parser.add_argument("--no-half", help=argparse.SUPPRESS, default=opts.no_half) parser.add_argument("--no-half-vae", help=argparse.SUPPRESS, default=opts.no_half_vae) parser.add_argument("--precision", help=argparse.SUPPRESS, default=opts.precision) diff --git a/modules/shared.py b/modules/shared.py index a2e202735..68bba38ae 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -253,7 +253,6 @@ options_templates.update(options_section(('sd', "Stable Diffusion"), { "sub_quad_kv_chunk_size": OptionInfo(512, "Sub-quadratic cross-attentionkv chunk size for the sub-quadratic cross-attention layer optimization to use", gr.Slider, {"minimum": 0, "maximum": 8192, "step": 8}), "sub_quad_chunk_threshold": OptionInfo(80, "Sub-quadratic cross-attention percentage of VRAM chunking threshold", gr.Slider, {"minimum": 0, "maximum": 100, "step": 1}), "always_batch_cond_uncond": OptionInfo(False, "Disables cond/uncond batching that is enabled to save memory with --medvram or --lowvram"), - "upcast_sampling": OptionInfo(False, "Enable upcast sampling. Usually produces similar results to --no-half with better performance while using less memory"), })) options_templates.update(options_section(('system-paths', "System Paths"), { @@ -326,7 +325,9 @@ options_templates.update(options_section(('cuda', "CUDA Settings"), { "cuda_dtype": OptionInfo("FP16", "Device precision type", gr.Radio, lambda: {"choices": ["FP32", "FP16", "BF16"]}), "no_half": OptionInfo(False, "Use full precision for model (--no-half)"), "no_half_vae": OptionInfo(False, "Use full precision for VAE (--no-half-vae)"), + "upcast_sampling": OptionInfo(False, "Enable upcast sampling. Usually produces similar results to --no-half with better performance while using less memory"), "disable_nan_check": OptionInfo(True, "Do not check if produced images/latent spaces have NaN values"), + "rollback_vae": OptionInfo(False, "Attempt to roll back VAE when produced NaN values, requires NaN check"), "opt_channelslast": OptionInfo(False, "Use channels last as torch memory format "), "cudnn_benchmark": OptionInfo(False, "Enable cuDNN benchmark feature"), "cuda_allow_tf32": OptionInfo(True, "Allow TF32 math ops"), @@ -443,6 +444,20 @@ options_templates.update(options_section(('sampler-params', "Sampler parameters" 'uni_pc_lower_order_final': OptionInfo(True, "UniPC lower order final"), })) +options_templates.update(options_section(('token_merging', 'Token Merging'), { + "token_merging": OptionInfo(False, "Enable redundant token merging via tomesd. This can provide significant speed and memory improvements.", gr.Checkbox), + "token_merging_ratio": OptionInfo(0.5, "Merging Ratio", gr.Slider, {"minimum": 0, "maximum": 0.9, "step": 0.1}), + "token_merging_hr_only": OptionInfo(True, "Apply only to high-res fix pass. Disabling can yield a ~20-35% speedup on contemporary resolutions.", gr.Checkbox), + "token_merging_ratio_hr": OptionInfo(0.5, "Merging Ratio (high-res pass) - If 'Apply only to high-res' is enabled, this will always be the ratio used.", gr.Slider, {"minimum": 0, "maximum": 0.9, "step": 0.1}), + "token_merging_random": OptionInfo(False, "Use random perturbations - Can improve outputs for certain samplers. For others, it may cause visual artifacting.", gr.Checkbox), + "token_merging_merge_attention": OptionInfo(True, "Merge attention", gr.Checkbox), + "token_merging_merge_cross_attention": OptionInfo(False, "Merge cross attention", gr.Checkbox), + "token_merging_merge_mlp": OptionInfo(False, "Merge mlp", gr.Checkbox), + "token_merging_maximum_down_sampling": OptionInfo(1, "Maximum down sampling", gr.Dropdown, lambda: {"choices": ["1", "2", "4", "8"]}), + "token_merging_stride_x": OptionInfo(2, "Stride - X", gr.Slider, {"minimum": 2, "maximum": 8, "step": 2}), + "token_merging_stride_y": OptionInfo(2, "Stride - Y", gr.Slider, {"minimum": 2, "maximum": 8, "step": 2}) +})) + options_templates.update(options_section(('postprocessing', "Postprocessing"), { 'postprocessing_enable_in_main_ui': OptionInfo([], "Enable postprocessing operations in txt2img and img2img tabs", ui_components.DropdownMulti, lambda: {"choices": [x.name for x in shared_items.postprocessing_scripts()]}), 'postprocessing_operation_order': OptionInfo([], "Postprocessing operation order", ui_components.DropdownMulti, lambda: {"choices": [x.name for x in shared_items.postprocessing_scripts()]}), @@ -455,54 +470,6 @@ options_templates.update(options_section((None, "Hidden options"), { "sd_checkpoint_hash": OptionInfo("", "SHA256 hash of the current checkpoint"), })) -options_templates.update(options_section(('token_merging', 'Token Merging'), { - "token_merging": OptionInfo( - False, "Enable redundant token merging via tomesd. This can provide significant speed and memory improvements.", - gr.Checkbox - ), - "token_merging_ratio": OptionInfo( - 0.5, "Merging Ratio", - gr.Slider, {"minimum": 0, "maximum": 0.9, "step": 0.1} - ), - "token_merging_hr_only": OptionInfo( - True, "Apply only to high-res fix pass. Disabling can yield a ~20-35% speedup on contemporary resolutions.", - gr.Checkbox - ), - "token_merging_ratio_hr": OptionInfo( - 0.5, "Merging Ratio (high-res pass) - If 'Apply only to high-res' is enabled, this will always be the ratio used.", - gr.Slider, {"minimum": 0, "maximum": 0.9, "step": 0.1} - ), - # More advanced/niche settings: - "token_merging_random": OptionInfo( - False, "Use random perturbations - Can improve outputs for certain samplers. For others, it may cause visual artifacting.", - gr.Checkbox - ), - "token_merging_merge_attention": OptionInfo( - True, "Merge attention", - gr.Checkbox - ), - "token_merging_merge_cross_attention": OptionInfo( - False, "Merge cross attention", - gr.Checkbox - ), - "token_merging_merge_mlp": OptionInfo( - False, "Merge mlp", - gr.Checkbox - ), - "token_merging_maximum_down_sampling": OptionInfo( - 1, "Maximum down sampling", - gr.Dropdown, lambda: {"choices": ["1", "2", "4", "8"]} - ), - "token_merging_stride_x": OptionInfo( - 2, "Stride - X", - gr.Slider, {"minimum": 2, "maximum": 8, "step": 2} - ), - "token_merging_stride_y": OptionInfo( - 2, "Stride - Y", - gr.Slider, {"minimum": 2, "maximum": 8, "step": 2} - ) -})) - options_templates.update() From 8291fe6cf80bce81b174becd0954f9d978d36513 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 24 Apr 2023 12:17:01 -0400 Subject: [PATCH 3/9] fix sampler list --- modules/sd_samplers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/sd_samplers.py b/modules/sd_samplers.py index 7b2200115..eeaa66d9d 100644 --- a/modules/sd_samplers.py +++ b/modules/sd_samplers.py @@ -31,8 +31,8 @@ def create_sampler(name, model): def set_samplers(): global samplers, samplers_for_img2img - shown = set(shared.opts.show_samplers) - shown_img2img = set(shared.opts.show_samplers + ['PLMS', 'UniPC']) + shown_img2img = set(shared.opts.show_samplers) + shown = set(shared.opts.show_samplers + ['PLMS', 'UniPC']) samplers = [x for x in all_samplers if x.name in shown] samplers_for_img2img = [x for x in all_samplers if x.name in shown_img2img] From 85798f634a1331450d3a64e66bcaaeadcff570ed Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 24 Apr 2023 12:34:49 -0400 Subject: [PATCH 4/9] increase timeout --- javascript/progressbar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/progressbar.js b/javascript/progressbar.js index 1c64313a9..e9b6bf5d5 100644 --- a/javascript/progressbar.js +++ b/javascript/progressbar.js @@ -106,7 +106,7 @@ function requestProgress(id_task, progressbarContainer, gallery, atEnd = null, o removeProgressBar() return } - if (elapsedFromStart > 10 && !res.queued && res.progress == prevProgress) { + if (elapsedFromStart > 30 && !res.queued && res.progress == prevProgress) { removeProgressBar() return } From dbdef78785a209dfcbd930dc0d7b1370c5f141bd Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 24 Apr 2023 14:11:19 -0400 Subject: [PATCH 5/9] add rebase --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 73269b0df..33a5833a9 100644 --- a/setup.py +++ b/setup.py @@ -140,7 +140,7 @@ def update(folder): git('checkout master', folder) else: log.warning(f'Unknown branch for: {folder}') - git('pull --autostash', folder) + git('pull --autostash --rebase', folder) branch = git('branch', folder) From 20b64aad7b02f717aebd41c3d25cf335d4e0ed43 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 24 Apr 2023 16:16:52 -0400 Subject: [PATCH 6/9] update samplers --- modules/sd_models.py | 5 ++--- modules/shared.py | 12 ++++++------ modules/ui.py | 4 ---- setup.py | 2 +- webui.py | 8 ++++---- 5 files changed, 13 insertions(+), 18 deletions(-) diff --git a/modules/sd_models.py b/modules/sd_models.py index 362fad078..a2ef7a012 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -10,13 +10,12 @@ from rich import print, progress # pylint: disable=redefined-builtin import torch import safetensors.torch from omegaconf import OmegaConf +import tomesd import ldm.modules.midas as midas from ldm.util import instantiate_from_config - from modules import paths, shared, modelloader, devices, script_callbacks, sd_vae, sd_disable_initialization, errors, hashes, sd_models_config from modules.sd_hijack_inpainting import do_inpainting_hijack from modules.timer import Timer -import tomesd model_dir = "Stable-diffusion" @@ -231,7 +230,7 @@ def read_metadata_from_safetensors(filename): return res -def read_state_dict(checkpoint_file): +def read_state_dict(checkpoint_file, map_location=None): # pylint: disable=unused-argument try: with progress.open(checkpoint_file, 'rb', description=f'Loading weights: [cyan]{checkpoint_file}', auto_refresh=True) as f: _, extension = os.path.splitext(checkpoint_file) diff --git a/modules/shared.py b/modules/shared.py index a39156d56..6f362a7ca 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -327,7 +327,7 @@ options_templates.update(options_section(('cuda', "CUDA Settings"), { "no_half_vae": OptionInfo(False, "Use full precision for VAE (--no-half-vae)"), "upcast_sampling": OptionInfo(False, "Enable upcast sampling. Usually produces similar results to --no-half with better performance while using less memory"), "disable_nan_check": OptionInfo(True, "Do not check if produced images/latent spaces have NaN values"), - "rollback_vae": OptionInfo(False, "Attempt to roll back VAE when produced NaN values, requires NaN check"), + "rollback_vae": OptionInfo(False, "Attempt to roll back VAE when produced NaN values, requires NaN check (experimental)"), "opt_channelslast": OptionInfo(False, "Use channels last as torch memory format "), "cudnn_benchmark": OptionInfo(False, "Enable cuDNN benchmark feature"), "cuda_allow_tf32": OptionInfo(True, "Allow TF32 math ops"), @@ -429,14 +429,14 @@ options_templates.update(options_section(('ui', "Live previews"), { })) options_templates.update(options_section(('sampler-params', "Sampler parameters"), { - "show_samplers": OptionInfo(["Euler", "LMS", "Heun", "DPM2", "DPM2 a", "DPM++ 2M", "DPM fast", "DPM adaptive", "DPM++ 2S a Karras", "DPM++ 2S a", "DPM++ SDE Karras", "DPM2 a Karras", "LMS Karras"], "Show samplers in user interface", gr.CheckboxGroup, lambda: {"choices": [x.name for x in list_samplers()]}), - "eta_ddim": OptionInfo(0.0, "eta (noise multiplier) for DDIM", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), - "eta_ancestral": OptionInfo(1.0, "eta (noise multiplier) for ancestral samplers", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), - "ddim_discretize": OptionInfo('uniform', "img2img DDIM discretize", gr.Radio, {"choices": ['uniform', 'quad']}), + "show_samplers": OptionInfo(["Euler a", "UniPC", "DDIM", "DPM++ SDE", "DPM++ SDE", "DPM2 Karras", "DPM++ 2M Karras"], "Show samplers in user interface", gr.CheckboxGroup, lambda: {"choices": [x.name for x in list_samplers()]}), + "eta_ancestral": OptionInfo(1.0, "Noise multiplier for ancestral samplers (eta)", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), + "eta_ddim": OptionInfo(0.0, "Noise multiplier for DDIM (eta)", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), + "ddim_discretize": OptionInfo('uniform', "DDIM discretize img2img", gr.Radio, {"choices": ['uniform', 'quad']}), 's_churn': OptionInfo(0.0, "sigma churn", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), 's_tmin': OptionInfo(0.0, "sigma tmin", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), 's_noise': OptionInfo(1.0, "sigma noise", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), - 'eta_noise_seed_delta': OptionInfo(0, "Eta noise seed delta", gr.Number, {"precision": 0}), + 'eta_noise_seed_delta': OptionInfo(0, "Noise seed delta (eta)", gr.Number, {"precision": 0}), 'always_discard_next_to_last_sigma': OptionInfo(False, "Always discard next-to-last sigma"), 'uni_pc_variant': OptionInfo("bh1", "UniPC variant", gr.Radio, {"choices": ["bh1", "bh2", "vary_coeff"]}), 'uni_pc_skip_type': OptionInfo("time_uniform", "UniPC skip type", gr.Radio, {"choices": ["time_uniform", "time_quadratic", "logSNR"]}), diff --git a/modules/ui.py b/modules/ui.py index e49266c94..0077102c3 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -1514,10 +1514,6 @@ def create_ui(): with gr.TabItem(label, id=ifid, elem_id='tab_' + ifid): interface.render() - footer = shared.html("footer.html") - footer = footer.format(versions=versions_html()) - gr.HTML(footer, elem_id="footer") - text_settings = gr.Textbox(elem_id="settings_json", value=lambda: opts.dumpjson(), visible=False) settings_submit.click( fn=wrap_gradio_call(run_settings, extra_outputs=[gr.update()]), diff --git a/setup.py b/setup.py index 33a5833a9..edf1df806 100644 --- a/setup.py +++ b/setup.py @@ -217,7 +217,7 @@ def check_torch(): log.debug(f'Cannot install xformers package: {e}') try: tensorflow_package = os.environ.get('TENSORFLOW_PACKAGE', 'tensorflow==2.12.0') - install(tensorflow_package, ignore=True) + install(tensorflow_package, 'tensorflow', ignore=True) except Exception as e: log.debug(f'Cannot install tensorflow package: {e}') diff --git a/webui.py b/webui.py index b20ec7d95..80f499913 100644 --- a/webui.py +++ b/webui.py @@ -66,11 +66,11 @@ else: def check_rollback_vae(): if shared.cmd_opts.rollback_vae: - if version.parse(torch.__version__) < version.parse('2.1'): - print("If your PyTorch version is lower than PyTorch 2.1, Rollback VAE will not work.") + if not torch.__version__.startswith('2.1'): + print("Rollback VAE functionality requires Torch 2.1 or higher") shared.cmd_opts.rollback_vae = False - elif 0 < torch.cuda.get_device_capability()[0] < 8: - print('Rollback VAE will not work because your device does not support it.') + if 0 < torch.cuda.get_device_capability()[0] < 8: + print('Rollback VAE functionality device capabilities not met') shared.cmd_opts.rollback_vae = False From 82d7b45cf408b7753980c63b9f7026b2774fc858 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 24 Apr 2023 16:54:12 -0400 Subject: [PATCH 7/9] update vae --- modules/sd_vae.py | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/sd_vae.py b/modules/sd_vae.py index a7d55fd29..7f3634a99 100644 --- a/modules/sd_vae.py +++ b/modules/sd_vae.py @@ -3,6 +3,7 @@ import collections import glob from copy import deepcopy from rich import print # pylint: disable=redefined-builtin +import torch from modules import paths, shared, devices, script_callbacks, sd_models From 45079f7ce8cde17acea4fb31abe637f4ac936b5e Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 24 Apr 2023 17:18:27 -0400 Subject: [PATCH 8/9] update gpu util search paths --- TODO.md | 1 + setup.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/TODO.md b/TODO.md index 2b998e5d9..3df127171 100644 --- a/TODO.md +++ b/TODO.md @@ -18,6 +18,7 @@ Stuff to be added... - Redo Extensions tab: see - Stream-load models as option for slow storage - Autodetect nVidia and AMD: `nvidia-smi` vs `rocm-smi` +- [Temporal Weighing](https://github.com/comfyanonymous/ComfyUI/discussions/473) ## Investigate diff --git a/setup.py b/setup.py index edf1df806..ac6f969de 100644 --- a/setup.py +++ b/setup.py @@ -178,11 +178,11 @@ def check_python(): # check torch version def check_torch(): - if shutil.which('nvidia-smi') is not None: + if shutil.which('nvidia-smi') is not None or os.path.exists(os.path.join(os.environ.get('SystemRoot') or r'C:\Windows', 'System32', 'nvidia-smi.exe')): log.info('nVidia toolkit detected') torch_command = os.environ.get('TORCH_COMMAND', 'torch torchaudio torchvision --index-url https://download.pytorch.org/whl/cu118') xformers_package = os.environ.get('XFORMERS_PACKAGE', 'xformers==0.0.17' if opts.get('cross_attention_optimization', '') == 'xFormers' else 'none') - elif shutil.which('rocminfo') is not None: + elif shutil.which('rocminfo') is not None or os.path.exists('/opt/rocm/bin/rocminfo'): log.info('AMD toolkit detected') os.environ.setdefault('HSA_OVERRIDE_GFX_VERSION', '10.3.0') torch_command = os.environ.get('TORCH_COMMAND', 'torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2') From 023e13b3714d34b02de5d23fcdb6cb3e5f63e5ab Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 24 Apr 2023 19:20:48 -0400 Subject: [PATCH 9/9] disable git status check --- TODO.md | 10 +--------- setup.py | 8 ++++---- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/TODO.md b/TODO.md index 3df127171..fc4bdc1c5 100644 --- a/TODO.md +++ b/TODO.md @@ -57,12 +57,4 @@ Tech that can be integrated as part of the core workflow... ### Pending Code Updates -- use samples format for live preview -- identify race condition where generate locks up while fetching preview -- add pulldowns to x/y/z script -- add VAE rollback feature in case of NaNs -- add token merging -- use **Approx NN** for live preview -- create default `styles.csv` -- fix setup not installing `tensorflow` dependencies -- update default git flags to reduce number of warnings +- update GPU utility search paths for better GPU type detection diff --git a/setup.py b/setup.py index ac6f969de..59eb0a65e 100644 --- a/setup.py +++ b/setup.py @@ -396,10 +396,10 @@ def check_version(): if not os.path.exists('.git'): log.error('Not a git repository') exit(1) - status = git('status') - if 'branch' not in status: - log.error('Cannot get git repository status') - exit(1) + _status = git('status') + # if 'branch' not in status: + # log.error('Cannot get git repository status') + # exit(1) ver = git('log -1 --pretty=format:"%h %ad"') log.info(f'Version: {ver}') commit = git('rev-parse HEAD')