Merge branch 'AUTOMATIC1111:master' into master

This commit is contained in:
discus0434 2022-10-20 00:48:13 +09:00 committed by GitHub
commit 365d4b1650
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 49 additions and 23 deletions

View file

@ -275,7 +275,7 @@ re_attention = re.compile(r"""
def parse_prompt_attention(text): def parse_prompt_attention(text):
""" """
Parses a string with attention tokens and returns a list of pairs: text and its assoicated weight. Parses a string with attention tokens and returns a list of pairs: text and its associated weight.
Accepted tokens are: Accepted tokens are:
(abc) - increases attention to abc by a multiplier of 1.1 (abc) - increases attention to abc by a multiplier of 1.1
(abc:3.12) - increases attention to abc by a multiplier of 3.12 (abc:3.12) - increases attention to abc by a multiplier of 3.12

View file

@ -181,7 +181,7 @@ def einsum_op_cuda(q, k, v):
mem_free_torch = mem_reserved - mem_active mem_free_torch = mem_reserved - mem_active
mem_free_total = mem_free_cuda + mem_free_torch mem_free_total = mem_free_cuda + mem_free_torch
# Divide factor of safety as there's copying and fragmentation # Divide factor of safety as there's copying and fragmentation
return self.einsum_op_tensor_mem(q, k, v, mem_free_total / 3.3 / (1 << 20)) return einsum_op_tensor_mem(q, k, v, mem_free_total / 3.3 / (1 << 20))
def einsum_op(q, k, v): def einsum_op(q, k, v):
if q.device.type == 'cuda': if q.device.type == 'cuda':

View file

@ -148,7 +148,10 @@ def get_state_dict_from_checkpoint(pl_sd):
if new_key is not None: if new_key is not None:
sd[new_key] = v sd[new_key] = v
return sd pl_sd.clear()
pl_sd.update(sd)
return pl_sd
def load_model_weights(model, checkpoint_info): def load_model_weights(model, checkpoint_info):

View file

@ -12,7 +12,7 @@ import time
import traceback import traceback
import platform import platform
import subprocess as sp import subprocess as sp
from functools import reduce from functools import partial, reduce
import numpy as np import numpy as np
import torch import torch
@ -261,6 +261,19 @@ def wrap_gradio_call(func, extra_outputs=None):
return f return f
def calc_time_left(progress, threshold, label, force_display):
if progress == 0:
return ""
else:
time_since_start = time.time() - shared.state.time_start
eta = (time_since_start/progress)
eta_relative = eta-time_since_start
if (eta_relative > threshold and progress > 0.02) or force_display:
return label + time.strftime('%H:%M:%S', time.gmtime(eta_relative))
else:
return ""
def check_progress_call(id_part): def check_progress_call(id_part):
if shared.state.job_count == 0: if shared.state.job_count == 0:
return "", gr_show(False), gr_show(False), gr_show(False) return "", gr_show(False), gr_show(False), gr_show(False)
@ -272,11 +285,15 @@ def check_progress_call(id_part):
if shared.state.sampling_steps > 0: if shared.state.sampling_steps > 0:
progress += 1 / shared.state.job_count * shared.state.sampling_step / shared.state.sampling_steps progress += 1 / shared.state.job_count * shared.state.sampling_step / shared.state.sampling_steps
time_left = calc_time_left( progress, 60, " ETA:", shared.state.time_left_force_display )
if time_left != "":
shared.state.time_left_force_display = True
progress = min(progress, 1) progress = min(progress, 1)
progressbar = "" progressbar = ""
if opts.show_progressbar: if opts.show_progressbar:
progressbar = f"""<div class='progressDiv'><div class='progress' style="width:{progress * 100}%">{str(int(progress*100))+"%" if progress > 0.01 else ""}</div></div>""" progressbar = f"""<div class='progressDiv'><div class='progress' style="overflow:hidden;width:{progress * 100}%">{str(int(progress*100))+"%"+time_left if progress > 0.01 else ""}</div></div>"""
image = gr_show(False) image = gr_show(False)
preview_visibility = gr_show(False) preview_visibility = gr_show(False)
@ -308,6 +325,8 @@ def check_progress_call_initial(id_part):
shared.state.current_latent = None shared.state.current_latent = None
shared.state.current_image = None shared.state.current_image = None
shared.state.textinfo = None shared.state.textinfo = None
shared.state.time_start = time.time()
shared.state.time_left_force_display = False
return check_progress_call(id_part) return check_progress_call(id_part)
@ -1543,6 +1562,7 @@ Requested path was: {f}
def reload_scripts(): def reload_scripts():
modules.scripts.reload_script_body_only() modules.scripts.reload_script_body_only()
reload_javascript() # need to refresh the html page
reload_script_bodies.click( reload_script_bodies.click(
fn=reload_scripts, fn=reload_scripts,
@ -1801,26 +1821,30 @@ Requested path was: {f}
return demo return demo
with open(os.path.join(script_path, "script.js"), "r", encoding="utf8") as jsfile: def load_javascript(raw_response):
with open(os.path.join(script_path, "script.js"), "r", encoding="utf8") as jsfile:
javascript = f'<script>{jsfile.read()}</script>' javascript = f'<script>{jsfile.read()}</script>'
jsdir = os.path.join(script_path, "javascript") jsdir = os.path.join(script_path, "javascript")
for filename in sorted(os.listdir(jsdir)): for filename in sorted(os.listdir(jsdir)):
with open(os.path.join(jsdir, filename), "r", encoding="utf8") as jsfile: with open(os.path.join(jsdir, filename), "r", encoding="utf8") as jsfile:
javascript += f"\n<script>{jsfile.read()}</script>" javascript += f"\n<!-- {filename} --><script>{jsfile.read()}</script>"
if cmd_opts.theme is not None: if cmd_opts.theme is not None:
javascript += f"\n<script>set_theme('{cmd_opts.theme}');</script>\n" javascript += f"\n<script>set_theme('{cmd_opts.theme}');</script>\n"
javascript += f"\n<script>{localization.localization_js(shared.opts.localization)}</script>" javascript += f"\n<script>{localization.localization_js(shared.opts.localization)}</script>"
if 'gradio_routes_templates_response' not in globals():
def template_response(*args, **kwargs): def template_response(*args, **kwargs):
res = gradio_routes_templates_response(*args, **kwargs) res = raw_response(*args, **kwargs)
res.body = res.body.replace(b'</head>', f'{javascript}</head>'.encode("utf8")) res.body = res.body.replace(
b'</head>', f'{javascript}</head>'.encode("utf8"))
res.init_headers() res.init_headers()
return res return res
gradio_routes_templates_response = gradio.routes.templates.TemplateResponse
gradio.routes.templates.TemplateResponse = template_response gradio.routes.templates.TemplateResponse = template_response
reload_javascript = partial(load_javascript,
gradio.routes.templates.TemplateResponse)
reload_javascript()

View file

@ -34,9 +34,10 @@
.performance { .performance {
font-size: 0.85em; font-size: 0.85em;
color: #444; color: #444;
display: flex; }
justify-content: space-between;
white-space: nowrap; .performance p{
display: inline-block;
} }
.performance .time { .performance .time {
@ -44,8 +45,6 @@
} }
.performance .vram { .performance .vram {
margin-left: 0;
text-align: right;
} }
#txt2img_generate, #img2img_generate { #txt2img_generate, #img2img_generate {