benchmark/muse_chart.py (83 lines of code) (raw):
from argparse import ArgumentParser
import matplotlib.pyplot as plt
import pandas as pd
"""
python benchmark/muse_chart.py --device a100
python benchmark/muse_chart.py --device 4090
"""
bar_width = 0.10
def main():
parser = ArgumentParser()
parser.add_argument("--device", choices=["4090", "a100"], required=True)
parser.add_argument("--batch-size", type=int, choices=[1, 8], required=True)
args = parser.parse_args()
df = pd.read_csv("benchmark/artifacts/all.csv")
df["Median"] = df["Median"].apply(lambda x: round(x / 1000, 2))
fig, axs = plt.subplots(1, 1, sharey="row")
chart(df=df, device=args.device, batch_size=args.batch_size, plot_on=axs)
axs.set_ylabel("Median Time (s)")
axs.set_title(f"{args.device} Batch size: {args.batch_size}")
plt.show()
def chart(df, device, batch_size, plot_on):
fdf = df[
(df["Device"] == device)
& (df["Use Xformers"] == True)
& ((df["Use Fused Residual Norm"] == True) | (df["Use Fused Residual Norm"].isna()))
& (df["Batch Size"] == batch_size)
]
chart_values = {
# "stable diffusion 1.5; timesteps 12": fdf[
# (fdf["Model Name"] == "stable_diffusion_1_5") & (fdf["Timesteps"] == "12")
# ].iloc[0]["Median"],
"stable diffusion 1.5; resolution 512; timesteps 20": fdf[
(fdf["Model Name"] == "stable_diffusion_1_5") & (fdf["Timesteps"] == "20")
].iloc[0]["Median"],
"sdxl; resolution 1024; timesteps 12": fdf[(fdf["Model Name"] == "sdxl") & (fdf["Timesteps"] == "12")].iloc[0]["Median"],
"sdxl; resolution 1024; timesteps 20": fdf[(fdf["Model Name"] == "sdxl") & (fdf["Timesteps"] == "20")].iloc[0]["Median"],
"ssd 1b; resolution 1024; timesteps 12": fdf[(fdf["Model Name"] == "ssd_1b") & (fdf["Timesteps"] == "12")].iloc[0]["Median"],
"ssd 1b; resolution 1024; timesteps 20": fdf[(fdf["Model Name"] == "ssd_1b") & (fdf["Timesteps"] == "20")].iloc[0]["Median"],
"wurst; resolution 1024": fdf[(fdf["Model Name"] == "wurst")].iloc[0]["Median"],
"lcm; resolution 512; timesteps 4": fdf[(fdf["Model Name"] == "lcm") & (fdf["Timesteps"] == "4")].iloc[0]["Median"],
"lcm; resolution 512; timesteps 8": fdf[(fdf["Model Name"] == "lcm") & (fdf["Timesteps"] == "8")].iloc[0]["Median"],
"muse; resolution 256; timesteps 12": fdf[
(fdf["Model Name"] == "muse") & (fdf["Resolution"] == 256) & (fdf["Timesteps"] == "12")
].iloc[0]["Median"],
# "muse; resolution 256; timesteps 20": fdf[
# (fdf["Model Name"] == "muse") & (fdf["Resolution"] == 256) & (fdf["Timesteps"] == "20")
# ].iloc[0]["Median"],
"muse; resolution 512; timesteps 12": fdf[
(fdf["Model Name"] == "muse") & (fdf["Resolution"] == 512) & (fdf["Timesteps"] == "12")
].iloc[0]["Median"],
# "muse; resolution 512; timesteps 20": fdf[
# (fdf["Model Name"] == "muse") & (fdf["Resolution"] == 512) & (fdf["Timesteps"] == "20")
# ].iloc[0]["Median"],
"sd-turbo; resolution 512; timesteps 1": fdf[
(fdf["Model Name"] == "sd_turbo")
].iloc[0]['Median'],
"sdxl-turbo; resolution 1024; timesteps 1": fdf[
(fdf["Model Name"] == "sdxl_turbo")
].iloc[0]['Median'],
}
# Gives consistent colors from chart to chart
colors = [
# "b", # Blue
"g", # Green
"r", # Red
"c", # Cyan
"m", # Magenta
"y", # Yellow
"k", # Black
"purple",
"#FF5733", # Hex code for a shade of orange
(0.2, 0.4, 0.6), # RGB tuple for a shade of blue
"lime", # Named color
"navy", # Named color
"hotpink", # Named color
]
colors = {x: y for x, y in zip(chart_values.keys(), colors)}
chart_values = [x for x in chart_values.items()]
chart_values = sorted(chart_values, key=lambda x: x[1])
placement = 0
for label, value in chart_values:
color = colors[label]
# gross but we barely run this code
label = f"{label}; {value} s"
label = "\n".join(label.split(";"))
bars = plot_on.bar(placement, value, width=bar_width, label=label, color=color)
bar = bars[0]
yval = bar.get_height()
plot_on.text(
bar.get_x() + bar.get_width() / 2,
yval + 0.05,
label, # f"{label}; {value}", # yval,
ha="center",
va="bottom",
fontsize="small",
)
placement = placement + bar_width + 0.05
if __name__ == "__main__":
main()