mirror of
https://github.com/huggingface/diffusers.git
synced 2025-12-07 04:54:47 +08:00
* add poc for benchmarking workflow. * import * fix argument * fix: argument * fix: path * fix * fix * path * output csv files. * workflow cleanup * append token * add utility to push to hf dataset * fix: kw arg * better reporting * fix: headers * better formatting of the numbers. * better type annotation * fix: formatting * moentarily disable check * push results. * remove disable check * introduce base classes. * img2img class * add inpainting pipeline * intoduce base benchmark class. * add img2img and inpainting * feat: utility to compare changes * fix * fix import * add args * basepath * better exception handling * better path handling * fix * fix * remove * ifx * fix * add: support for controlnet. * image_url -> url * move images to huggingface hub * correct urls. * root_ckpt * flush before benchmarking * don't install accelerate from source * add runner * simplify Diffusers Benchmarking step * change runner * fix: subprocess call. * filter percentage values * fix controlnet benchmark * add t2i adapters. * fix filter columns * fix t2i adapter benchmark * fix init. * fix * remove safetensors flag * fix args print * fix * feat: run_command * add adapter resolution mapping * benchmark t2i adapter fix. * fix adapter input * fix * convert to L. * add flush() add appropriate places * better filtering * okay * get env for torch * convert to float * fix * filter out nans. * better coment * sdxl * sdxl for other benchmarks. * fix: condition * fix: condition for inpainting * fix: mapping for resolution * fix * include kandinsky and wuerstchen * fix: Wuerstchen * Empty-Commit * [Community] AnimateDiff + Controlnet Pipeline (#5928) * begin work on animatediff + controlnet pipeline * complete todos, uncomment multicontrolnet, input checks Co-Authored-By: EdoardoBotta <botta.edoardo@gmail.com> * update Co-Authored-By: EdoardoBotta <botta.edoardo@gmail.com> * add example * update community README * Update examples/community/README.md --------- Co-authored-by: EdoardoBotta <botta.edoardo@gmail.com> Co-authored-by: Patrick von Platen <patrick.v.platen@gmail.com> * EulerDiscreteScheduler add `rescale_betas_zero_snr` (#6024) * EulerDiscreteScheduler add `rescale_betas_zero_snr` * Revert "[Community] AnimateDiff + Controlnet Pipeline (#5928)" This reverts commit821726d7c0. * Revert "EulerDiscreteScheduler add `rescale_betas_zero_snr` (#6024)" This reverts commit3dc2362b5a. * add SDXL turbo * add lcm lora to the mix as well. * fix * increase steps to 2 when running turbo i2i * debug * debug * debug * fix for good * fix and isolate better * fuse lora so that torch compile works with peft * fix: LCMLoRA * better identification for LCM * change to cron job --------- Co-authored-by: Patrick von Platen <patrick.v.platen@gmail.com> Co-authored-by: Dhruv Nair <dhruv.nair@gmail.com> Co-authored-by: Aryan V S <contact.aryanvs@gmail.com> Co-authored-by: EdoardoBotta <botta.edoardo@gmail.com> Co-authored-by: Beinsezii <39478211+Beinsezii@users.noreply.github.com>
99 lines
2.8 KiB
Python
99 lines
2.8 KiB
Python
import argparse
|
|
import csv
|
|
import gc
|
|
import os
|
|
from dataclasses import dataclass
|
|
from typing import Dict, List, Union
|
|
|
|
import torch
|
|
import torch.utils.benchmark as benchmark
|
|
|
|
|
|
GITHUB_SHA = os.getenv("GITHUB_SHA", None)
|
|
BENCHMARK_FIELDS = [
|
|
"pipeline_cls",
|
|
"ckpt_id",
|
|
"batch_size",
|
|
"num_inference_steps",
|
|
"model_cpu_offload",
|
|
"run_compile",
|
|
"time (secs)",
|
|
"memory (gbs)",
|
|
"actual_gpu_memory (gbs)",
|
|
"github_sha",
|
|
]
|
|
|
|
PROMPT = "ghibli style, a fantasy landscape with castles"
|
|
BASE_PATH = os.getenv("BASE_PATH", ".")
|
|
TOTAL_GPU_MEMORY = float(os.getenv("TOTAL_GPU_MEMORY", torch.cuda.get_device_properties(0).total_memory / (1024**3)))
|
|
|
|
REPO_ID = "diffusers/benchmarks"
|
|
FINAL_CSV_FILE = "collated_results.csv"
|
|
|
|
|
|
@dataclass
|
|
class BenchmarkInfo:
|
|
time: float
|
|
memory: float
|
|
|
|
|
|
def flush():
|
|
"""Wipes off memory."""
|
|
gc.collect()
|
|
torch.cuda.empty_cache()
|
|
torch.cuda.reset_max_memory_allocated()
|
|
torch.cuda.reset_peak_memory_stats()
|
|
|
|
|
|
def bytes_to_giga_bytes(bytes):
|
|
return f"{(bytes / 1024 / 1024 / 1024):.3f}"
|
|
|
|
|
|
def benchmark_fn(f, *args, **kwargs):
|
|
t0 = benchmark.Timer(
|
|
stmt="f(*args, **kwargs)",
|
|
globals={"args": args, "kwargs": kwargs, "f": f},
|
|
num_threads=torch.get_num_threads(),
|
|
)
|
|
return f"{(t0.blocked_autorange().mean):.3f}"
|
|
|
|
|
|
def generate_csv_dict(
|
|
pipeline_cls: str, ckpt: str, args: argparse.Namespace, benchmark_info: BenchmarkInfo
|
|
) -> Dict[str, Union[str, bool, float]]:
|
|
"""Packs benchmarking data into a dictionary for latter serialization."""
|
|
data_dict = {
|
|
"pipeline_cls": pipeline_cls,
|
|
"ckpt_id": ckpt,
|
|
"batch_size": args.batch_size,
|
|
"num_inference_steps": args.num_inference_steps,
|
|
"model_cpu_offload": args.model_cpu_offload,
|
|
"run_compile": args.run_compile,
|
|
"time (secs)": benchmark_info.time,
|
|
"memory (gbs)": benchmark_info.memory,
|
|
"actual_gpu_memory (gbs)": f"{(TOTAL_GPU_MEMORY):.3f}",
|
|
"github_sha": GITHUB_SHA,
|
|
}
|
|
return data_dict
|
|
|
|
|
|
def write_to_csv(file_name: str, data_dict: Dict[str, Union[str, bool, float]]):
|
|
"""Serializes a dictionary into a CSV file."""
|
|
with open(file_name, mode="w", newline="") as csvfile:
|
|
writer = csv.DictWriter(csvfile, fieldnames=BENCHMARK_FIELDS)
|
|
writer.writeheader()
|
|
writer.writerow(data_dict)
|
|
|
|
|
|
def collate_csv(input_files: List[str], output_file: str):
|
|
"""Collates multiple identically structured CSVs into a single CSV file."""
|
|
with open(output_file, mode="w", newline="") as outfile:
|
|
writer = csv.DictWriter(outfile, fieldnames=BENCHMARK_FIELDS)
|
|
writer.writeheader()
|
|
|
|
for file in input_files:
|
|
with open(file, mode="r") as infile:
|
|
reader = csv.DictReader(infile)
|
|
for row in reader:
|
|
writer.writerow(row)
|