From b73ffdcc8d6a9622d3d8074862b109b20726ac73 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Mon, 18 Sep 2023 22:17:49 -0400 Subject: [PATCH] fix benchmark data in sdnext --- benchmark.py | 15 ++++++--------- scripts/system-info.py | 27 +++++++++++---------------- style.css | 1 + 3 files changed, 18 insertions(+), 25 deletions(-) create mode 100644 style.css diff --git a/benchmark.py b/benchmark.py index 9e056b8..05f28b7 100644 --- a/benchmark.py +++ b/benchmark.py @@ -1,9 +1,5 @@ import time import logging -import socket -from hashlib import sha256 -from logging.handlers import SysLogHandler - from modules import shared from modules.processing import StableDiffusionProcessingTxt2Img, Processed, process_images @@ -38,7 +34,7 @@ def run_benchmark(batch: int, extra: bool): try: _processed: Processed = process_images(p) except Exception as e: - print(f'benchmark error: {batch} {e}') + print(f'SD-System-Info: benchmark error: {batch} {e}') return 'error' t1 = time.time() shared.state.end() @@ -47,13 +43,17 @@ def run_benchmark(batch: int, extra: bool): class LogFilter(logging.Filter): + import socket hostname = socket.gethostname() def filter(self, record): record.hostname = LogFilter.hostname return True -def submit_benchmark(data, username, console_logging): +def submit_benchmark(data, username): + from logging.handlers import SysLogHandler + from hashlib import sha256 + syslog = SysLogHandler(address=('logs3.papertrailapp.com', 32554)) syslog.addFilter(LogFilter()) formatter = logging.Formatter(f'%(asctime)s %(hostname)s SDBENCHMARK: {username} %(message)s', datefmt='%b %d %H:%M:%S') @@ -67,7 +67,4 @@ def submit_benchmark(data, username, console_logging): message = '|'.join(line).replace(' ', ' ').replace('"', '').strip() hash256 = sha256(message.encode('utf-8')).hexdigest()[:6] message = message + '|' + hash256 - if console_logging: - print('benchmark submit record:', line) remote.info(message) - print('Benchmark submitted records:', len(data)) diff --git a/scripts/system-info.py b/scripts/system-info.py index 0b52c56..0cc367d 100644 --- a/scripts/system-info.py +++ b/scripts/system-info.py @@ -6,20 +6,16 @@ import platform import subprocess import datetime import logging -from hashlib import sha256 from html.parser import HTMLParser import torch import gradio as gr -import psutil from modules import paths, script_callbacks, sd_hijack, sd_models, sd_samplers, shared, extensions, devices from benchmark import run_benchmark, submit_benchmark # pylint: disable=E0401,E0611,C0411 ### system info globals -log = logging.getLogger('steps-animation') -log.setLevel(logging.INFO) - +log = logging.getLogger('sd') data = { 'date': '', 'timestamp': '', @@ -41,7 +37,6 @@ data = { 'pipeline': shared.opts.data.get('sd_backend', ''), 'model': {}, } - networks = { 'models': [], 'hypernetworks': [], @@ -57,8 +52,6 @@ bench_text = '' bench_file = os.path.join(os.path.dirname(__file__), 'benchmark-data-local.json') bench_headers = ['timestamp', 'performance', 'version', 'system', 'libraries', 'gpu', 'pipeline', 'model', 'username', 'note', 'hash'] bench_data = [] -console_logging = None - ### system info module @@ -158,6 +151,7 @@ def get_memory(): return round(val / 1024 / 1024 / 1024, 2) mem = {} try: + import psutil process = psutil.Process(os.getpid()) res = process.memory_info() ram_total = 100 * res.rss / process.memory_percent() @@ -494,8 +488,6 @@ def create_ui(blocks: gr.Blocks = None): note = gr.Textbox('', label = 'Note', placeholder='enter any additional notes', elem_id='system_info_tab_note') with gr.Column(scale=1): with gr.Row(): - global console_logging # pylint: disable=global-statement - console_logging = gr.Checkbox(label = 'Console logging', value = False, elem_id = 'system_info_tab_console', interactive = True) warmup = gr.Checkbox(label = 'Perform warmup', value = True, elem_id = 'system_info_tab_warmup') extra = gr.Checkbox(label = 'Extra steps', value = False, elem_id = 'system_info_tab_extra') level = gr.Radio(['quick', 'normal', 'extensive'], value = 'normal', label = 'Benchmark level', elem_id = 'system_info_tab_level') @@ -544,25 +536,28 @@ def create_ui(blocks: gr.Blocks = None): def bench_submit(username: str): if username is None or username == '': - log.debug('SD-System-Info: username is required to submit results') + log.error('SD-System-Info: username is required to submit results') return - submit_benchmark(bench_data, username, console_logging.value) - log.debug(f'SD-System-Info: benchmark data submitted: {len(bench_data)} records') + submit_benchmark(bench_data, username) + log.info(f'SD-System-Info: benchmark data submitted: {len(bench_data)} records') def bench_run(batches: list = [1], extra: bool = False): results = [] for batch in batches: - log.debug(f'SD-System-Info: benchmark running for batch size {batch}') + log.debug(f'SD-System-Info: benchmark starting: batch-size={batch}') res = run_benchmark(batch, extra) - log.debug(f'SD-System-Info: benchmark results batch size {batch}: {res} it/s') + log.info(f'SD-System-Info: benchmark batch-size={batch} it/s={res}') results.append(str(res)) its = ' / '.join(results) return its def bench_init(username: str, note: str, warmup: bool, level: str, extra: bool): + from hashlib import sha256 + log.debug('SD-System-Info: benchmark starting') + get_full_data() hash256 = sha256((dict2str(data['platform']) + data['torch'] + dict2str(data['libs']) + dict2str(data['gpu']) + ','.join(data['optimizations']) + data['crossattention']).encode('utf-8')).hexdigest()[:6] existing = [x for x in bench_data if (x[-1] is not None and x[-1][:6] == hash256)] if len(existing) > 0: @@ -606,7 +601,7 @@ def bench_init(username: str, note: str, warmup: bool, level: str, extra: bool): d[10] = hash256 md = '| ' + ' | '.join(d) + ' |' - log.debug(f'SD-System-Info: benchmark result: {md}') + log.info(f'SD-System-Info: benchmark result: {md}') bench_save() return bench_data diff --git a/style.css b/style.css new file mode 100644 index 0000000..2ffba6f --- /dev/null +++ b/style.css @@ -0,0 +1 @@ +#system_info_benchmark_data .table-wrap { height: unset; margin-bottom: 2em; }