mirror of
https://github.com/harvard-edge/cs249r_book.git
synced 2026-07-21 17:57:24 -05:00
Repoint mlsysim.core.<engine-mod> -> mlsysim.engine.<mod>, the from-mlsysim.core-import-calibration form, and mlsysim.infra -> mlsysim.infrastructure across the deferred consumers: docs prose + tutorials, tutorial slides/cheatsheet/ exercises, paper.tex, README, cli/DESIGN.md, and the mlsysim_constants audit README. Also fix two docstrings inside the moved engine modules (calibration.py, pipeline.py) that still named the old core paths. Update the quartodoc config (sections list) to the new module paths and add the engine package. NOTE: the generated quartodoc API stubs under mlsysim/docs/api/ (core.*.qmd, infra*.qmd) still carry the old paths — they regenerate from the updated config via `quartodoc build` (toolchain not installed in this worktree), so they are left untouched here rather than hand-edited. Run `quartodoc build` to refresh them. 482 passed; import clean.
249 lines
7.2 KiB
TeX
249 lines
7.2 KiB
TeX
% =============================================================================
|
|
% MLSys·im Tutorial — Module 4: Design Space Exploration & Synthesis
|
|
% =============================================================================
|
|
\documentclass[aspectratio=169, 12pt]{beamer}
|
|
\usepackage{../../../slides/assets/beamerthememlsys}
|
|
|
|
\mlsyssetup{
|
|
volume = {Tutorial},
|
|
chapter = {Module 4},
|
|
logo = {../../../slides/assets/img/logo-mlsysbook.png},
|
|
instlogo = {../../../slides/assets/img/logo-harvard.png},
|
|
chaptertitle = {MLSys·im: DSE \& Synthesis},
|
|
}
|
|
|
|
% --- Fonts & Packages ---
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage[scaled=0.9]{helvet}
|
|
\usepackage{courier}
|
|
\renewcommand{\familydefault}{\sfdefault}
|
|
\usepackage{amsmath}
|
|
\usepackage{booktabs}
|
|
\usepackage[table]{xcolor}
|
|
\usepackage{listings}
|
|
\usepackage{tikz}
|
|
|
|
% --- Code listings ---
|
|
\lstset{
|
|
language=Python,
|
|
basicstyle=\ttfamily\footnotesize,
|
|
keywordstyle=\color{crimson}\bfseries,
|
|
stringstyle=\color{datastroke},
|
|
commentstyle=\color{midgray}\itshape,
|
|
backgroundcolor=\color{computeblue!20},
|
|
frame=single,
|
|
rulecolor=\color{computestroke},
|
|
numbers=none,
|
|
breaklines=true,
|
|
columns=fullflexible,
|
|
keepspaces=true,
|
|
showstringspaces=false,
|
|
xleftmargin=4pt,
|
|
xrightmargin=4pt,
|
|
aboveskip=6pt,
|
|
belowskip=4pt,
|
|
}
|
|
|
|
\newcommand{\mlsysim}{\texttt{mlsysim}}
|
|
\graphicspath{{images/}}
|
|
|
|
\title{MLSys·im Tutorial --- Module 4}
|
|
\subtitle{Design Space Exploration \& Synthesis}
|
|
\author{Vijay Janapa Reddi}
|
|
\institute{Harvard University}
|
|
\date{Conference Tutorial}
|
|
|
|
\begin{document}
|
|
|
|
\begin{frame}[plain]
|
|
\titlepage
|
|
\end{frame}
|
|
|
|
\begin{frame}{Roadmap: Conference Tutorial}
|
|
\centering\small
|
|
\begin{tabular}{rll}
|
|
\toprule
|
|
\textbf{Module} & \textbf{Topic} & \textbf{Status} \\
|
|
\midrule
|
|
Module 1 & Foundations \& Architecture & \checkmark Done \\
|
|
Module 2 & Advanced Single-Node Analysis & \checkmark Done \\
|
|
Module 3 & Scale, Dollars, and Carbon & \checkmark Done \\
|
|
\rowcolor{crimson!12}
|
|
\textbf{Module 4} & \textbf{Design Space Exploration \& Synthesis} & \textbf{$\leftarrow$ You are here} \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\end{frame}
|
|
|
|
\section{Rapid Parametric Sweeps}
|
|
|
|
\begin{frame}{The Combinatorial Explosion}
|
|
Finding the optimal serving configuration requires testing:
|
|
\[
|
|
|\text{hardware}| \times |\text{batch sizes}| \times |\text{precisions}| \times |\text{parallelism configs}|
|
|
\]
|
|
This space easily exceeds $10^4$ configurations. Because \mlsysim{} uses analytical math (not cycle-accurate simulation), each evaluation takes $<1$\,ms.
|
|
\end{frame}
|
|
|
|
\begin{frame}[fragile]{Live Demo: Programmatic Sweeps (Scenario A)}
|
|
\begin{lstlisting}[language=Python]
|
|
from mlsysim.engine.engine import Engine
|
|
from mlsysim.hardware.registry import Hardware
|
|
from mlsysim.models.registry import Models
|
|
import pandas as pd
|
|
|
|
model = Models.Language.Llama3_8B
|
|
hardware = Hardware.Cloud.H100
|
|
|
|
results = []
|
|
for batch_size in [1, 8, 32, 128, 256]:
|
|
perf = Engine.solve(model, hardware, batch_size=batch_size, precision="fp16")
|
|
results.append({
|
|
"Batch Size": batch_size,
|
|
"Throughput (tok/s)": perf.throughput.magnitude,
|
|
"Bottleneck": perf.bottleneck
|
|
})
|
|
|
|
print(pd.DataFrame(results))
|
|
\end{lstlisting}
|
|
\end{frame}
|
|
|
|
\section{TinyML to Frontier}
|
|
|
|
\begin{frame}{Same Roofline, 9 Orders of Magnitude}
|
|
\begin{columns}[T]
|
|
\column{0.52\textwidth}
|
|
\centering
|
|
\includegraphics[width=0.85\textwidth]{images/pdf/hardware-spectrum.pdf}
|
|
|
|
\column{0.45\textwidth}
|
|
\scriptsize
|
|
\begin{tabular}{lrr}
|
|
\toprule
|
|
\textbf{Device} & \textbf{FLOPS} & \textbf{TDP} \\
|
|
\midrule
|
|
nRF52840 & 64\,M & 15\,mW \\
|
|
ESP32-S3 & 500\,M & 400\,mW \\
|
|
\rowcolor{gray!15}
|
|
H100 SXM & 989\,T & 700\,W \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
|
|
\vspace{0.5em}
|
|
\begin{tabular}{lr}
|
|
\textbf{Compute Range} & $\sim 10^{7}\times$ \\
|
|
\textbf{Power Range} & $\sim 10^{4.7}\times$ \\
|
|
\end{tabular}
|
|
\end{columns}
|
|
\vfill
|
|
\begin{center}
|
|
\alert{The Roofline Model is universal. The physics apply identically to a \$2 Microcontroller and a \$3M GPU Rack.}
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\section{Sensitivity Analysis}
|
|
|
|
\begin{frame}[fragile]{Wall 21: Sensitivity Analysis}
|
|
\note{[3 min] ``Which knob should I turn next?'' The parameter with the largest partial derivative.}
|
|
\begin{lstlisting}
|
|
from mlsysim.engine.solver import SensitivitySolver
|
|
solver = SensitivitySolver()
|
|
|
|
result = solver.solve(
|
|
model=Models.Language.Llama3_8B, hardware=Hardware.Cloud.H100,
|
|
precision="fp16", efficiency=0.5)
|
|
|
|
print(f"Binding Constraint: {result.binding_constraint}")
|
|
for param, sensitivity in result.sensitivities.items():
|
|
tag = "<<<" if param == result.binding_constraint else ""
|
|
print(f" {param:>20}: {sensitivity:+.4f} {tag}")
|
|
\end{lstlisting}
|
|
|
|
\vspace{0.3em}
|
|
\small
|
|
\textbf{The Golden Rule:} Invest in the parameter with the \emph{largest} partial derivative. Improving a non-binding parameter yields \textbf{zero} measurable gain.
|
|
\end{frame}
|
|
|
|
\section{SLA-Driven Synthesis}
|
|
|
|
\begin{frame}[fragile]{Live Demo: Inverting the Roofline (Scenario D)}
|
|
Instead of asking "How fast is this GPU?", what if we ask "What hardware do I need to buy to meet my 30ms latency SLA?"
|
|
\begin{lstlisting}[language=Python]
|
|
from mlsysim.solvers import SynthesisSolver
|
|
from mlsysim.models.registry import Models
|
|
from mlsysim.core.constants import Q_
|
|
|
|
solver = SynthesisSolver()
|
|
requirements = solver.solve(
|
|
model=Models.Language.Llama3_8B,
|
|
target_latency=Q_("30 ms"),
|
|
batch_size=1,
|
|
precision="fp16"
|
|
)
|
|
|
|
print(f"Required HBM Bandwidth: {requirements.required_bw.to('GB/s'):.1f}")
|
|
print(f"Required Compute: {requirements.required_flops.to('TFLOPs/s'):.1f}")
|
|
\end{lstlisting}
|
|
\end{frame}
|
|
|
|
\section{Capstone \& Wrap-Up}
|
|
|
|
\begin{frame}[fragile]{Design Challenge: The Capstone}
|
|
\begin{alertblock}{The Problem}
|
|
\textbf{\$5M budget.} Serve Llama-3 70B at \textbf{1{,}000 QPS} with
|
|
\textbf{$<$100\,ms TTFT} in \textbf{two regions} (US-East + EU-West).
|
|
Design the fleet.
|
|
\end{alertblock}
|
|
|
|
\vspace{0.3em}
|
|
\textbf{You must specify using \mlsysim{}:}
|
|
\begin{enumerate}\footnotesize
|
|
\item \textbf{Hardware choice:} Which GPU? How many?
|
|
\item \textbf{Parallelism strategy:} TP $\times$ PP?
|
|
\item \textbf{Precision:} FP16? FP8? INT4?
|
|
\item \textbf{Geographic placement:} Carbon impact?
|
|
\end{enumerate}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Resources \& Next Steps}
|
|
\begin{columns}[T]
|
|
\column{0.55\textwidth}
|
|
\textbf{Get Started}
|
|
\begin{itemize}
|
|
\item \texttt{pip install mlsysim}
|
|
\item GitHub: \texttt{harvard-edge/mlsysim}
|
|
\item \textbf{Code Cookbook:} See the 5 interactive scenarios in the Appendix!
|
|
\item Full docs: \texttt{mlsysim.readthedocs.io}
|
|
\end{itemize}
|
|
|
|
\vspace{0.5em}
|
|
\textbf{The Textbook}
|
|
\begin{itemize}
|
|
\item \emph{Machine Learning Systems}
|
|
\item Volume I: Foundations (single node)
|
|
\item Volume II: Systems at Scale (fleet)
|
|
\item \texttt{mlsysbook.ai}
|
|
\end{itemize}
|
|
|
|
\column{0.40\textwidth}
|
|
\textbf{Key Papers}
|
|
\begin{itemize}
|
|
\item Williams et al.\ (2009)\\
|
|
{\footnotesize Roofline Model}
|
|
\item Chowdhery et al.\ (2022)\\
|
|
{\footnotesize PaLM / MFU}
|
|
\item Hoffmann et al.\ (2022)\\
|
|
{\footnotesize Chinchilla Scaling}
|
|
\item Patterson et al.\ (2021)\\
|
|
{\footnotesize Carbon \& Training}
|
|
\item OpenAI (2024)\\
|
|
{\footnotesize o1 / Reasoning Scaling}
|
|
\end{itemize}
|
|
\end{columns}
|
|
|
|
\vspace{1em}
|
|
\begin{center}
|
|
\Large\bfseries Thank you! Questions?
|
|
\end{center}
|
|
\end{frame}
|
|
|
|
\end{document} |