import os import gradio as gr import pandas as pd from apscheduler.schedulers.background import BackgroundScheduler from src.assets.text_content import TITLE, INTRODUCTION_TEXT from src.assets.css_html_js import custom_css, get_window_url_params from src.utils import restart_space, load_dataset_repo, make_clickable_model LLM_PERF_LEADERBOARD_REPO = "optimum/llm-perf-leaderboard" LLM_PERF_DATASET_REPO = "optimum/llm-perf-dataset" OPTIMUM_TOKEN = os.environ.get("OPTIMUM_TOKEN") OLD_COLUMNS = ["model", "backend.name", "backend.torch_dtype", "backend.quantization", "generate.latency(s)", "generate.throughput(tokens/s)"] NEW_COLUMNS = ["Model", "Backend 🏭", "Load dtype", "Quantization 🗜️", "Latency (s) ⬇️", "Throughput (tokens/s) ⬆️"] COLUMNS_TYPES = ["markdown", "text", "text", "text", "number", "number"] SORTING_COLUMN = ["Throughput (tokens/s) ⬆️"] llm_perf_dataset_repo = load_dataset_repo(LLM_PERF_DATASET_REPO, OPTIMUM_TOKEN) def get_vanilla_benchmark_df(): if llm_perf_dataset_repo: llm_perf_dataset_repo.git_pull() # load df = pd.read_csv( "./llm-perf-dataset/reports/cuda_1_100/inference_report.csv") # preprocess df["Model"] = df["Model"].apply(make_clickable_model) # filter df = df[OLD_COLUMNS] # rename df.rename(columns={ df_col: rename_col for df_col, rename_col in zip(OLD_COLUMNS, NEW_COLUMNS) }, inplace=True) # sort df.sort_values(by=SORTING_COLUMN, ascending=False, inplace=True) return df # Define demo interface demo = gr.Blocks(css=custom_css) with demo: gr.HTML(TITLE) gr.Markdown(INTRODUCTION_TEXT, elem_classes="markdown-text") with gr.Tabs(elem_classes="tab-buttons") as tabs: with gr.TabItem("Vanilla Benchmark", elem_id="vanilla-benchmark", id=0): vanilla_benchmark_df = get_vanilla_benchmark_df() leaderboard_table_lite = gr.components.Dataframe( value=vanilla_benchmark_df, type=COLUMNS_TYPES, headers=NEW_COLUMNS, elem_id="vanilla-benchmark", ) # Restart space every hour scheduler = BackgroundScheduler() scheduler.add_job(restart_space, "interval", seconds=3600, args=[LLM_PERF_LEADERBOARD_REPO, OPTIMUM_TOKEN]) scheduler.start() # Launch demo demo.queue(concurrency_count=40).launch()