File size: 1,621 Bytes
1713823 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
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)
|