Files
cs249r_book/mlsysim/tutorial/slides/tutorial_module1.tex
Vijay Janapa Reddi bf733c5781 Merge dev into fmt-fix
2026-06-01 22:34:40 -04:00

214 lines
7.0 KiB
TeX

% =============================================================================
% MLSys·im Tutorial — Module 1: Foundations & Architecture
% =============================================================================
\documentclass[aspectratio=169, 12pt]{beamer}
\usepackage{../../../slides/assets/beamerthememlsys}
\mlsyssetup{
volume = {Tutorial},
chapter = {Module 1},
logo = {../../../slides/assets/img/logo-mlsysbook.png},
instlogo = {../../../slides/assets/img/logo-harvard.png},
chaptertitle = {MLSys·im: Foundations \& Architecture},
}
% --- 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\scriptsize,
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=3pt,
belowskip=2pt,
}
\newcommand{\mlsysim}{\texttt{mlsysim}}
\graphicspath{{images/}}
\title{MLSys·im Tutorial --- Module 1}
\subtitle{Foundations \& Architecture}
\author{Vijay Janapa Reddi}
\institute{Harvard University}
\date{Conference Tutorial}
\begin{document}
\begin{frame}[plain,shrink=10]
\titlepage
\end{frame}
\begin{frame}{Roadmap: Conference Tutorial}
\centering\small
\begin{tabular}{rll}
\toprule
\textbf{Module} & \textbf{Topic} & \textbf{Status} \\
\midrule
\rowcolor{crimson!12}
\textbf{Module 1} & \textbf{Foundations \& Architecture} & \textbf{$\leftarrow$ You are here} \\
Module 2 & Advanced Single-Node Analysis & \\
Module 3 & Scale, Dollars, and Carbon & \\
Module 4 & Design Space Exploration \& Synthesis & \\
\bottomrule
\end{tabular}
\end{frame}
\section{The Problem: Why Analytical Modeling?}
\begin{frame}{The ML Systems Complexity Explosion}
\begin{itemize}
\item \textbf{Scale:} Models are growing 10x per year. Clusters span 100,000+ GPUs.
\item \textbf{Heterogeneity:} GPUs, TPUs, LPU, custom ASIC architectures.
\item \textbf{Metrics:} Performance is no longer just "latency". It's Throughput, TTFT, ITL, TCO (\$ / token), and Carbon Footprint (tonnes CO$_2$e).
\end{itemize}
\vfill
\begin{alertblock}{The Cycle-Accurate Simulator Trap}
Detailed cycle-level simulators (e.g., gem5) are too slow to sweep 10,000 distributed cluster configurations. We need tools that provide \textbf{first-principles, analytical insights} instantly.
\end{alertblock}
\end{frame}
\section{Architecture \& Registries}
\begin{frame}{The \mlsysim{} Philosophy: Demand vs. Supply}
\textbf{Strict Separation of Concerns:}
\begin{itemize}
\item \textbf{Demand (Workloads):} How many FLOPs? How many bytes of weights? (Abstract mathematical operations).
\item \textbf{Supply (Hardware):} What is the peak TFLOP/s? What is the HBM bandwidth? (Physical silicon constraints).
\end{itemize}
\vfill
\begin{center}
\textbf{Solvers} sit in the middle, evaluating the intersection to find the \emph{binding constraint}.
\end{center}
\end{frame}
\begin{frame}[fragile]{The Type System \& Registries}
\mlsysim{} uses a strict, typed registry system powered by Pydantic. No magic dictionaries.
\begin{lstlisting}[language=Python]
from mlsysim.hardware.types import HardwareNode, ComputeCore, MemoryHierarchy
from mlsysim.core.units import TFLOPs, GB, TB, second, watt
# Defining an accelerator using strict physical quantities
speculative_gpu = HardwareNode(
name="Speculative GPU",
release_year=2027,
compute=ComputeCore(peak_flops=1200 * TFLOPs / second),
memory=MemoryHierarchy(capacity=144 * GB, bandwidth=5.0 * TB / second),
tdp=800 * watt
)
\end{lstlisting}
\end{frame}
\begin{frame}{Zero Hallucinations: The Provenance Audit}
Academic tools must be reproducible. Every vetted number in \mlsysim{} is bound to a \textbf{Provenance Record}.
\begin{itemize}
\item \textbf{Provenance is metadata:} It records how we know a number, not where the number lives.
\item \textbf{Semantic homes:} Hardware specs live in \texttt{Hardware}; nodes/racks/fleets in \texttt{Systems}; grids/prices in \texttt{Infrastructure}.
\item \textbf{Narrative anchors:} Cited scalar results live in \texttt{Literature}; reusable teaching scenarios live in \texttt{Scenarios}.
\end{itemize}
\vfill
\begin{center}
\texttt{audit\_provenance} verifies every registry value has traceable lineage.
\end{center}
\end{frame}
\begin{frame}[fragile]{Dimensional Strictness (\texttt{pint})}
\begin{columns}[T]
\column{0.5\textwidth}
\textbf{The Problem:}
\begin{lstlisting}[language=Python]
# Is this MB/s or GB/s?
# Wait, bits or bytes?
bandwidth = 400
\end{lstlisting}
\column{0.5\textwidth}
\textbf{The \mlsysim{} Solution:}
\begin{lstlisting}[language=Python]
# Will throw runtime error if
# divided by seconds instead of bits
bw = Q_("400 Gbps")
speed = bw.to("GB/s") # 50 GB/s
\end{lstlisting}
\end{columns}
\vspace{1em}
Every API boundary strictly enforces SI units at runtime. This prevents silent mismatches when mixing networking (bits) and memory (bytes).
\end{frame}
\section{Iron Law \& Roofline (Tier 1)}
\begin{frame}{The ML Iron Law}
\begin{center}
\Large
\[
\text{Time} = \frac{\text{Operations}}{\text{Peak Performance} \times \text{Utilization}}
\]
\end{center}
\vspace{1em}
\begin{itemize}
\item \textbf{Operations:} From the Model Registry (e.g., Llama 3 8B).
\item \textbf{Peak Performance:} From the Hardware Registry (e.g., H100 dense TFLOP/s).
\item \textbf{Utilization (MFU):} The fraction of peak actually achieved.
\end{itemize}
\end{frame}
\begin{frame}{The Roofline Model}
\centering
\includegraphics[height=0.48\textheight]{images/pdf/roofline-model.pdf}
\vspace{0.5em}
Arithmetic Intensity determines if you are \textbf{Memory Bound} (sloped roof) or \textbf{Compute Bound} (flat roof).
\end{frame}
\begin{frame}[fragile]{Live Demo: Tier 1 Execution}
\begin{lstlisting}[language=Python]
from mlsysim.engine.engine import Engine
from mlsysim.hardware.registry import Hardware
from mlsysim.models.registry import Models
model = Models.Language.Llama3_8B
hardware = Hardware.Cloud.H100
# Run the Tier 1 SingleNodeModel solver
perf = Engine.solve(model, hardware, batch_size=1, precision="fp16")
print(f"Latency: {perf.latency.to('ms'):.1f}")
print(f"Bottleneck: {perf.bottleneck}")
\end{lstlisting}
\end{frame}
\begin{frame}{Summary: Module 1}
\begin{enumerate}
\item \mlsysim{} provides \textbf{first-principles, analytical reasoning}.
\item \textbf{Strict Separation:} Demand (Workloads) vs Supply (Hardware).
\item \textbf{Reproducibility:} Driven by Registries, Provenance, and Dimensional Strictness (\texttt{pint}).
\item \textbf{Tier 1 Execution:} Powered by the Iron Law and Roofline Model.
\end{enumerate}
\vspace{1em}
\begin{center}
\textit{Next up: Module 2 - Advanced Single-Node Analysis!}
\end{center}
\end{frame}
\end{document}