vladmandic / sd-extension-system-info

System and platform info and standardized benchmarking extension for SD.Next and WebUI
https://vladmandic.github.io/sd-extension-system-info/pages/benchmark.html
MIT License
280 stars 51 forks source link

usage of "sd_model" cause vae not loaded #17

Closed XZiar closed 1 year ago

XZiar commented 1 year ago

in benchmark.py: https://github.com/vladmandic/sd-extension-system-info/blob/79243697a23602ff4f9e441aa35fcfdc33bf0872/scripts/benchmark.py#L12

the use of sd_model cause model get loaded, and this is happening during load_scripts(for auto1111's branch), which happens before refresh_vae_list, so vae cannot be loaded correctly. https://github.com/AUTOMATIC1111/stable-diffusion-webui/blob/89f9faa63388756314e8a1d96cf86bf5e0663045/webui.py#L184-L191

    modules.scripts.load_scripts()
    startup_timer.record("load scripts")

    modelloader.load_upscalers()
    startup_timer.record("load upscalers") #Is this necessary? I don't know.

    modules.sd_vae.refresh_vae_list()
    startup_timer.record("refresh VAE")

The callstack:

  File "C:\ProgramsData\Projects\stable-diffusion-webui\launch.py", line 370, in <module>
    start()
  File "C:\ProgramsData\Projects\stable-diffusion-webui\launch.py", line 365, in start
    webui.webui()
  File "C:\ProgramsData\Projects\stable-diffusion-webui\webui.py", line 285, in webui
    initialize()
  File "C:\ProgramsData\Projects\stable-diffusion-webui\webui.py", line 184, in initialize
    modules.scripts.load_scripts()
  File "C:\ProgramsData\Projects\stable-diffusion-webui\modules\scripts.py", line 257, in load_scripts
    script_module = script_loading.load_module(scriptfile.path)
  File "C:\ProgramsData\Projects\stable-diffusion-webui\modules\script_loading.py", line 11, in load_module
    module_spec.loader.exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "C:\ProgramsData\Projects\stable-diffusion-webui\extensions\sd-extension-system-info\scripts\benchmark.py", line 12, in <module>
    'sd_model': shared.sd_model,
  File "C:\ProgramsData\Projects\stable-diffusion-webui\modules\shared.py", line 631, in sd_model
    return modules.sd_models.model_data.get_sd_model()
  File "C:\ProgramsData\Projects\stable-diffusion-webui\modules\sd_models.py", line 422, in get_sd_model
    load_model()
  File "C:\ProgramsData\Projects\stable-diffusion-webui\modules\sd_models.py", line 484, in load_model
    load_model_weights(sd_model, checkpoint_info, state_dict, timer)
  File "C:\ProgramsData\Projects\stable-diffusion-webui\modules\sd_models.py", line 341, in load_model_weights
    traceback.print_stack(file=sys.stdout)
Couldn't find VAE named vae-ft-mse-840000-ema-pruned.safetensors; using None instead

load_scripts() will execute every py file under exxtension/scripts, does benchmark.py really need to be executed during initialize time?

    scripts_list = list_scripts("scripts", ".py")
....
    for scriptfile in sorted(scripts_list, key=lambda x: [orderby(x.basedir), x]):
....
vladmandic commented 1 year ago

great job tracing it down, made a fix really easy - i just posted an update.