From 6bd25a6f90cdef6b70b2267a49b77a3d47b7a532 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sat, 23 Nov 2024 09:07:43 -0500 Subject: [PATCH] js pbar improvements Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 3 ++- javascript/progressBar.js | 40 +++++++++++++++++++++++++++++++-------- modules/sd_models.py | 8 ++++---- 3 files changed, 38 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc6cd163b..0dabf0d7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log for SD.Next -## Update for 2024-11-22 +## Update for 2024-11-23 - Model loader improvements: - detect model components on model load fail @@ -16,6 +16,7 @@ - fix README links - fix sdxl controlnet single-file loader - relax settings validator + - improve js progress calls resiliency ## Update for 2024-11-21 diff --git a/javascript/progressBar.js b/javascript/progressBar.js index a9ecb31e9..3f954e13b 100644 --- a/javascript/progressBar.js +++ b/javascript/progressBar.js @@ -4,23 +4,37 @@ function request(url, data, handler, errorHandler) { const xhr = new XMLHttpRequest(); xhr.open('POST', url, true); xhr.setRequestHeader('Content-Type', 'application/json'); + xhr.timeout = 5000; + xhr.ontimeout = () => { + console.error('xhr.ontimeout', xhr); + errorHandler(); + }; + xhr.onerror = () => { + console.error('xhr.onerror', xhr); + errorHandler(); + }; + xhr.onabort = () => { + console.error('xhr.onabort', xhr); + errorHandler(); + }; xhr.onreadystatechange = () => { if (xhr.readyState === 4) { if (xhr.status === 200) { try { - const js = JSON.parse(xhr.responseText); - handler(js); - } catch (error) { - console.error(error); + const json = JSON.parse(xhr.responseText); + handler(json); + } catch (err) { + console.error('xhr.onreadystatechange', xhr, err); errorHandler(); } } else { + console.error('xhr.onreadystatechange', xhr); errorHandler(); } } }; - const js = JSON.stringify(data); - xhr.send(js); + const req = JSON.stringify(data); + xhr.send(req); } function pad2(x) { @@ -118,11 +132,14 @@ function requestProgress(id_task, progressEl, galleryEl, atEnd = null, onProgres const start = (id_task, id_live_preview) => { // eslint-disable-line no-shadow if (!opts.live_previews_enable || opts.live_preview_refresh_period === 0 || opts.show_progress_every_n_steps === 0) return; - request('./internal/progress', { id_task, id_live_preview }, (res) => { + + const onProgressHandler = (res) => { + // debug('onProgress', res); lastState = res; const elapsedFromStart = (new Date() - dateStart) / 1000; hasStarted |= res.active; if (res.completed || (!res.active && (hasStarted || once)) || (elapsedFromStart > 30 && !res.queued && res.progress === prevProgress)) { + debug('onProgressEnd', res); done(); return; } @@ -131,7 +148,14 @@ function requestProgress(id_task, progressEl, galleryEl, atEnd = null, onProgres if (res.live_preview && galleryEl) img.src = res.live_preview; if (onProgress) onProgress(res); setTimeout(() => start(id_task, id_live_preview), opts.live_preview_refresh_period || 500); - }, done); + }; + + const onProgressErrorHandler = (err) => { + console.error('onProgressError', err); + done(); + }; + + request('./internal/progress', { id_task, id_live_preview }, onProgressHandler, onProgressErrorHandler); }; start(id_task, 0); } diff --git a/modules/sd_models.py b/modules/sd_models.py index cf1921a36..a6ff19b6f 100644 --- a/modules/sd_models.py +++ b/modules/sd_models.py @@ -319,12 +319,12 @@ def set_diffuser_offload(sd_model, op: str = 'model'): if not (hasattr(sd_model, "has_accelerate") and sd_model.has_accelerate): sd_model.has_accelerate = False if hasattr(sd_model, 'maybe_free_model_hooks') and shared.opts.diffusers_offload_mode == "none": - shared.log.debug(f'Setting {op}: offload={shared.opts.diffusers_offload_mode}') + shared.log.debug(f'Setting {op}: offload={shared.opts.diffusers_offload_mode} limit={shared.opts.cuda_mem_fraction}') sd_model.maybe_free_model_hooks() sd_model.has_accelerate = False if hasattr(sd_model, "enable_model_cpu_offload") and shared.opts.diffusers_offload_mode == "model": try: - shared.log.debug(f'Setting {op}: offload={shared.opts.diffusers_offload_mode}') + shared.log.debug(f'Setting {op}: offload={shared.opts.diffusers_offload_mode} limit={shared.opts.cuda_mem_fraction}') if shared.opts.diffusers_move_base or shared.opts.diffusers_move_unet or shared.opts.diffusers_move_refiner: shared.opts.diffusers_move_base = False shared.opts.diffusers_move_unet = False @@ -339,7 +339,7 @@ def set_diffuser_offload(sd_model, op: str = 'model'): shared.log.error(f'Setting {op}: offload={shared.opts.diffusers_offload_mode} {e}') if hasattr(sd_model, "enable_sequential_cpu_offload") and shared.opts.diffusers_offload_mode == "sequential": try: - shared.log.debug(f'Setting {op}: offload={shared.opts.diffusers_offload_mode}') + shared.log.debug(f'Setting {op}: offload={shared.opts.diffusers_offload_mode} limit={shared.opts.cuda_mem_fraction}') if shared.opts.diffusers_move_base or shared.opts.diffusers_move_unet or shared.opts.diffusers_move_refiner: shared.opts.diffusers_move_base = False shared.opts.diffusers_move_unet = False @@ -359,7 +359,7 @@ def set_diffuser_offload(sd_model, op: str = 'model'): shared.log.error(f'Setting {op}: offload={shared.opts.diffusers_offload_mode} {e}') if shared.opts.diffusers_offload_mode == "balanced": try: - shared.log.debug(f'Setting {op}: offload={shared.opts.diffusers_offload_mode}') + shared.log.debug(f'Setting {op}: offload={shared.opts.diffusers_offload_mode} threshold={shared.opts.diffusers_offload_max_gpu_memory} limit={shared.opts.cuda_mem_fraction}') sd_model = apply_balanced_offload(sd_model) except Exception as e: shared.log.error(f'Setting {op}: offload={shared.opts.diffusers_offload_mode} {e}')