GenAIDevTOProd's picture
Upload app.py
1713823 verified
raw
history blame
1.62 kB
def run_simulation(num_workers, batch_time, network_latency, mode, num_batches):
"""Wrapper for Gradio interface."""
timelines, metrics = simulate_batches(
num_workers=int(num_workers),
batch_time=float(batch_time),
network_latency=float(network_latency),
mode=mode,
num_batches=int(num_batches)
)
fig = plot_timeline(timelines, metrics, num_workers)
return fig, (
f"Mode: {mode.capitalize()}\n"
f"Epoch Time: {metrics['epoch_time_ms']:.2f} ms\n"
f"Idle Time: {metrics['idle_percent']} %\n"
f"Throughput: {metrics['throughput']} batches/sec"
)
# Define Gradio UI
interface = gr.Interface(
fn=run_simulation,
inputs=[
gr.Slider(1, 8, value=4, step=1, label="Number of Workers"),
gr.Slider(100, 1000, value=500, step=50, label="Batch Processing Time (ms)"),
gr.Slider(50, 500, value=200, step=25, label="Network Latency (ms)"),
gr.Radio(["synchronous", "asynchronous"], value="synchronous", label="Mode"),
gr.Slider(5, 30, value=10, step=1, label="Number of Batches per Epoch"),
],
outputs=[
gr.Plot(label="Timeline Visualization"),
gr.Textbox(label="Simulation Summary", lines=6, max_lines=8, show_copy_button=True)
],
title="🧠 Batch Scheduler Simulator",
description="Visualize how synchronous vs. asynchronous batch scheduling affects throughput, idle time, and epoch duration.",
examples=[
[4, 500, 200, "synchronous", 10],
[8, 400, 150, "asynchronous", 15]
]
)
# Launch interface
interface.launch(share=True)