add CHANGELOG.md
parent
40d5afd7cb
commit
2c98129bb1
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Change Log
|
||||||
|
Formatting: [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
|
||||||
|
|
||||||
|
## [2.0.0] - 2024-1-24
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- A changelog
|
||||||
|
- Faster model loading by hooking the model dropdown and immediately sending sync requests
|
||||||
|
- Popups in UI to lessen the need to check the status tab
|
||||||
|
- A debug option for resetting error correction at runtime
|
||||||
|
- Experimental "Pixel Cap" setting under worker config UI tab for limiting pixels allocated to a given worker
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- From a selectable script to an **AlwaysOn** style extension
|
||||||
|
- Thin-client mode will lack function for now
|
||||||
|
- Renamed main extension file from `extension.py` -> `distributed.py` to help with config grouping
|
||||||
|
- The log file (`distributed.log`) will max out at a size of 10MB and rotate over
|
||||||
|
- All relevant UI components are returned by ui() which has implications for API usage
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Connection check ping not always being sent on startup
|
||||||
|
- Old issue where benchmarking could become inaccurate due to models not being loaded on every machine [#11](https://github.com/papuSpartan/stable-diffusion-webui-distributed/issues/11)
|
||||||
|
- Worker randomly disconnecting when under high load due to handling a previous request
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- Certain superfluous warnings in logs related to third party extensions
|
||||||
|
|
@ -347,7 +347,7 @@ class UI:
|
||||||
with gradio.Tab('Settings'):
|
with gradio.Tab('Settings'):
|
||||||
thin_client_cbx = gradio.Checkbox(
|
thin_client_cbx = gradio.Checkbox(
|
||||||
label='Thin-client mode (experimental)',
|
label='Thin-client mode (experimental)',
|
||||||
info="Only generate images using remote workers. There will be no previews when enabled.",
|
info="(BROKEN) Only generate images using remote workers. There will be no previews when enabled.",
|
||||||
value=self.world.thin_client_mode
|
value=self.world.thin_client_mode
|
||||||
)
|
)
|
||||||
job_timeout = gradio.Number(
|
job_timeout = gradio.Number(
|
||||||
|
|
|
||||||
|
|
@ -511,16 +511,16 @@ class World:
|
||||||
#####################################
|
#####################################
|
||||||
|
|
||||||
# Now that this worker would (otherwise) not be doing anything, see if it can still do something.
|
# Now that this worker would (otherwise) not be doing anything, see if it can still do something.
|
||||||
# Calculate how many images it can output in the time that it takes the slowest real-time worker to do so.
|
# Calculate how many images it can output in the time that it takes the fastest real-time worker to do so.
|
||||||
|
|
||||||
for job in self.jobs:
|
for job in self.jobs:
|
||||||
if job.complementary is False:
|
if job.complementary is False:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
slowest_active_worker = self.fastest_realtime_job().worker
|
fastest_active = self.fastest_realtime_job().worker
|
||||||
for j in self.jobs:
|
for j in self.jobs:
|
||||||
if j.worker.label == slowest_active_worker.label:
|
if j.worker.label == fastest_active.label:
|
||||||
slack_time = slowest_active_worker.batch_eta(payload=payload, batch_size=j.batch_size) + self.job_timeout
|
slack_time = fastest_active.batch_eta(payload=payload, batch_size=j.batch_size) + self.job_timeout
|
||||||
logger.debug(f"There's {slack_time:.2f}s of slack time available for worker '{job.worker.label}'")
|
logger.debug(f"There's {slack_time:.2f}s of slack time available for worker '{job.worker.label}'")
|
||||||
|
|
||||||
# see how long it would take to produce only 1 image on this complementary worker
|
# see how long it would take to produce only 1 image on this complementary worker
|
||||||
|
|
@ -615,9 +615,9 @@ class World:
|
||||||
config = ConfigModel(**config_raw)
|
config = ConfigModel(**config_raw)
|
||||||
|
|
||||||
# saves config schema to <extension>/distributed-config.schema.json
|
# saves config schema to <extension>/distributed-config.schema.json
|
||||||
# print(models.Config.schema_json())
|
# print(ConfigModel.schema_json())
|
||||||
# with open(self.extension_path.joinpath("distributed-config.schema.json"), "w") as schema_file:
|
# with open(extension_path.joinpath("distributed-config.schema.json"), "w") as schema_file:
|
||||||
# json.dump(json.loads(models.Config.schema_json()), schema_file, indent=3)
|
# json.dump(json.loads(ConfigModel.schema_json()), schema_file, indent=3)
|
||||||
|
|
||||||
for w in config.workers:
|
for w in config.workers:
|
||||||
label = next(iter(w.keys()))
|
label = next(iter(w.keys()))
|
||||||
|
|
@ -628,6 +628,7 @@ class World:
|
||||||
|
|
||||||
sh.benchmark_payload = Benchmark_Payload(**config.benchmark_payload)
|
sh.benchmark_payload = Benchmark_Payload(**config.benchmark_payload)
|
||||||
self.job_timeout = config.job_timeout
|
self.job_timeout = config.job_timeout
|
||||||
|
self.enabled = config.enabled
|
||||||
|
|
||||||
logger.debug("config loaded")
|
logger.debug("config loaded")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue