zhangzili
Initial BigMac PP Simulator Space
89cb5bf
Raw
History Blame Contribute Delete
2.32 kB
from __future__ import annotations
import sys
import os
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
WORKSPACE = ROOT.parent
os.environ.setdefault("MPLCONFIGDIR", "/tmp/matplotlib")
os.environ.setdefault("XDG_CACHE_HOME", "/tmp")
sys.path.insert(0, str(ROOT))
sys.path.insert(0, str(WORKSPACE / "pp-scheduler"))
from pp_scheduler import OpType, UnifiedBigMacVPP # noqa: E402
from pp_simulator import OpDurationSpec, PipelineSimulator # noqa: E402
def main() -> None:
scheduler = UnifiedBigMacVPP(
pp_size=4,
vpp_size=2,
num_microbatches=8,
ve_forward_limit=3,
)
scheduler.generate_schedule()
simulator = PipelineSimulator.from_scheduler(scheduler)
result = simulator.simulate(
{
OpType.FORWARD: OpDurationSpec(mean=1.0, variance=0),
OpType.BACKWARD: OpDurationSpec(mean=2.0, variance=0),
OpType.VEFORWARD: OpDurationSpec(mean=0.8, variance=0.01),
OpType.VEBACKWARD: OpDurationSpec(mean=0.9, variance=0.01),
OpType.GENFORWARD: OpDurationSpec(mean=0.6, variance=0.01),
OpType.GENBACKWARD: OpDurationSpec(mean=0.7, variance=0.01),
},
seed=7,
)
simulator.validate_result(result)
print("Simulation summary:")
for key, value in result.summary.items():
print(f" {key}: {value}")
print("\nFirst 12 simulated ops:")
for op in result.ops[:12]:
print(
f" rank={op.rank} {op.label:<8} "
f"start={op.start_time:6.2f} end={op.end_time:6.2f} "
f"wait={op.wait_time:5.2f} deps={len(op.deps)}"
)
print("\nFirst op with dependency reasons:")
for op in result.ops:
if op.dep_reasons:
print(f" {op.id}")
for dep_id, reasons in op.dep_reasons.items():
print(f" <- {dep_id}: {', '.join(reasons)}")
break
trace_path = ROOT / "simulate_demo_trace.json"
result.to_chrome_trace(trace_path)
print(f"\nChrome trace written to: {trace_path}")
perfetto_trace_path = ROOT / "simulate_demo_perfetto_trace.json"
result.to_chrome_trace(perfetto_trace_path, perfetto_compat=True)
print(f"Perfetto-compatible trace written to: {perfetto_trace_path}")
if __name__ == "__main__":
main()