fix benchmark data in sdnext

pull/35/head
Vladimir Mandic 2023-09-18 22:17:49 -04:00
parent 83dd4d8f65
commit b73ffdcc8d
3 changed files with 18 additions and 25 deletions

View File

@ -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))

View File

@ -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

1
style.css Normal file
View File

@ -0,0 +1 @@
#system_info_benchmark_data .table-wrap { height: unset; margin-bottom: 2em; }