Skip to content

Commit 328af9a

Browse files
committed
mod
1 parent 801eacf commit 328af9a

23 files changed

Lines changed: 313 additions & 1050 deletions
167 KB
Loading

poster/poster_v6.pdf

466 KB
Binary file not shown.

poster/poster_v6.png

1.22 MB
Loading

poster/poster_v6.tex

Lines changed: 313 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,313 @@
1+
% PyCon US 2026 academic poster
2+
% Breaking the Speed Limit: Fast Statistical Models with Python 3.14, Numba, and JAX
3+
4+
\documentclass[final]{beamer}
5+
6+
\usepackage[T1]{fontenc}
7+
\usepackage{lmodern}
8+
\usepackage[size=custom,width=120,height=72,scale=1.0]{beamerposter}
9+
\usetheme{gemini}
10+
\usecolortheme{imsa}
11+
\usepackage{booktabs}
12+
\usepackage{graphicx}
13+
\usepackage{tikz}
14+
\usepackage{xcolor}
15+
\usepackage{array}
16+
17+
\usetikzlibrary{arrows.meta,positioning}
18+
19+
\definecolor{paper}{HTML}{FFF8F2}
20+
\definecolor{ink}{HTML}{17202A}
21+
\definecolor{muted}{HTML}{5F6B74}
22+
\definecolor{line}{HTML}{E4D7C6}
23+
\definecolor{cityured}{HTML}{B01117}
24+
\definecolor{cityumaroon}{HTML}{981B49}
25+
\definecolor{cityuorange}{HTML}{E07541}
26+
\definecolor{cityugold}{HTML}{D99A1E}
27+
\definecolor{numba}{HTML}{2F7D32}
28+
\definecolor{jaxberry}{HTML}{B51E59}
29+
\definecolor{threadteal}{HTML}{1F7A8C}
30+
\definecolor{slideblue}{HTML}{2C6FB7}
31+
\definecolor{softblue}{HTML}{EAF2FB}
32+
\definecolor{softgreen}{HTML}{EAF6EA}
33+
\definecolor{softgold}{HTML}{FFF3DC}
34+
\definecolor{softberry}{HTML}{F8E7EF}
35+
\definecolor{softteal}{HTML}{E8F6F5}
36+
37+
\setbeamercolor{background canvas}{bg=paper}
38+
\setbeamercolor{normal text}{fg=ink}
39+
\setbeamercolor{block title}{fg=cityured,bg=white}
40+
\setbeamercolor{block body}{fg=ink,bg=white}
41+
\setbeamercolor{block alerted title}{fg=cityured,bg=cityuorange!15}
42+
\setbeamercolor{block alerted body}{fg=ink,bg=cityuorange!7}
43+
\setbeamercolor{headline title}{fg=cityumaroon}
44+
\setbeamercolor{headline}{fg=ink,bg=paper}
45+
\setbeamercolor{headline rule}{bg=cityured}
46+
\setbeamerfont{block title}{size=\Large,series=\bfseries}
47+
\setbeamerfont{block body}{size=\large}
48+
\setbeamerfont{headline title}{size=\Huge,series=\bfseries}
49+
50+
\newlength{\sepwidth}
51+
\newlength{\colwidth}
52+
\setlength{\sepwidth}{0.017\paperwidth}
53+
\setlength{\colwidth}{0.290\paperwidth}
54+
\newcommand{\separatorcolumn}{\begin{column}{\sepwidth}\end{column}}
55+
56+
\hyphenpenalty=10000
57+
\exhyphenpenalty=10000
58+
\setlength{\parindent}{0pt}
59+
\setlength{\parskip}{0.15em}
60+
\linespread{0.96}
61+
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
62+
63+
\title{Breaking the Speed Limit}
64+
\subtitle{Fast statistical models with Python 3.14, Numba, and JAX}
65+
\author{Wenxin Jiang \textperiodcentered{} Jian Yin}
66+
\institute[shortinst]{Department of Biostatistics, City University of Hong Kong \textperiodcentered{} PyCon US 2026}
67+
68+
\setbeamertemplate{headline}{
69+
\begin{beamercolorbox}{headline}
70+
\begin{columns}[c,totalwidth=\paperwidth]
71+
\begin{column}{0.15\paperwidth}
72+
\centering
73+
\includegraphics[width=0.78\linewidth]{cityu_logo.pdf}
74+
\end{column}
75+
\begin{column}{0.66\paperwidth}
76+
\vskip0.35ex
77+
{\usebeamerfont{headline title}\usebeamercolor[fg]{headline title}\inserttitle\par}
78+
\vspace{0.25ex}
79+
{\Large\bfseries\color{ink}\insertsubtitle\par}
80+
\vspace{0.35ex}
81+
{\normalsize\bfseries\color{ink}Validate the statistical result first. Then accelerate the bottleneck.\par}
82+
\vspace{0.20ex}
83+
{\large\color{cityumaroon}\insertauthor\par}
84+
{\normalsize\color{cityured}\insertinstitute\par}
85+
\end{column}
86+
\begin{column}{0.15\paperwidth}
87+
\centering
88+
\includegraphics[width=0.46\linewidth]{assets/repo_qr.png}\\[-0.1ex]
89+
{\small\bfseries\color{ink}github.com/LucaJiang/\par FastStatisticalModels4Python}
90+
\end{column}
91+
\end{columns}
92+
\vspace{0.75ex}
93+
\begin{beamercolorbox}[wd=\paperwidth,colsep=0.45ex]{headline rule}\end{beamercolorbox}
94+
\end{beamercolorbox}
95+
}
96+
97+
\newcommand{\smalllabel}[2]{%
98+
{\normalsize\bfseries\color{#1}#2}\par%
99+
}
100+
101+
\newcommand{\badge}[3]{%
102+
\noindent\fcolorbox{#1!35}{#1!8}{%
103+
\begin{minipage}{0.296\linewidth}
104+
\vspace{0.38em}
105+
{\large\bfseries\color{#1}#2}\par
106+
{\normalsize\color{ink}#3}
107+
\vspace{0.38em}
108+
\end{minipage}}%
109+
}
110+
111+
\newcommand{\evidencebox}[3]{%
112+
\noindent\fcolorbox{#1!38}{#2}{%
113+
\begin{minipage}{0.94\linewidth}
114+
\vspace{0.35em}
115+
#3
116+
\vspace{0.35em}
117+
\end{minipage}}%
118+
}
119+
120+
\newcommand{\toolchip}[2]{%
121+
\begingroup
122+
\setlength{\fboxsep}{0.46em}
123+
\colorbox{#1!12}{\large\bfseries\color{#1}#2}%
124+
\endgroup
125+
}
126+
127+
\newcommand{\workflowrow}[3]{%
128+
\noindent\fcolorbox{#1!45}{#1!8}{%
129+
\begin{minipage}{0.94\linewidth}
130+
\vspace{0.18em}
131+
{\large\bfseries\color{#1}#2}\quad{\large #3}
132+
\vspace{0.18em}
133+
\end{minipage}}\par\vspace{0.18em}%
134+
}
135+
136+
\newcommand{\practicalstep}[3]{%
137+
\begin{minipage}[c]{0.44\linewidth}
138+
\centering
139+
{\Large\bfseries\color{#1}#2}\par
140+
{\large\bfseries\color{ink}#3}
141+
\end{minipage}
142+
}
143+
144+
\newcommand{\evidencebadge}[3]{%
145+
\noindent\fcolorbox{#1!35}{#1!7}{%
146+
\begin{minipage}{0.94\linewidth}
147+
\vspace{0.22em}
148+
{\normalsize\bfseries\color{#1}#2}\par
149+
{\normalsize\color{ink}#3}
150+
\vspace{0.22em}
151+
\end{minipage}}\par\vspace{0.18em}%
152+
}
153+
154+
\begin{document}
155+
\begin{frame}[t]
156+
\vspace{0.45cm}
157+
\begin{columns}[t,totalwidth=0.94\paperwidth]
158+
\separatorcolumn
159+
160+
\begin{column}{\colwidth}
161+
\begin{block}{1. Why simulation is the statistical test harness}
162+
Real biomedical data rarely comes with ground truth. Simulation lets us know what should be recovered, calibrated, or preserved.
163+
164+
\vspace{0.38em}
165+
\workflowrow{cityured}{Define target}{recovery / calibration / estimand}
166+
\workflowrow{threadteal}{Generate scenarios}{signal, dimension, hard cases}
167+
\workflowrow{cityuorange}{Reference first}{readable Python oracle}
168+
\workflowrow{numba}{Validate}{equivalence / recovery / calibration}
169+
\workflowrow{jaxberry}{Scale}{measure bottlenecks}
170+
171+
\vspace{0.50em}
172+
\evidencebox{cityured}{softgold}{%
173+
\smalllabel{cityumaroon}{Governing rule}
174+
{\Large\bfseries Same question. Same result. Then faster code.}
175+
}
176+
\end{block}
177+
178+
\begin{block}{2. What a statistician has to decide}
179+
\begin{tabular}{@{}L{0.30\linewidth}L{0.62\linewidth}@{}}
180+
\toprule
181+
\textbf{Question} & \textbf{Decision before timing} \\
182+
\midrule
183+
Scientific target & estimator, statistic, null model \\
184+
Ground truth & simulated labels, known effect, or nominal type-I rate \\
185+
Acceptance criterion & exact match, tolerance, calibration band \\
186+
Scale stress & $N$, $d$, $K$, $p$, $R$, workers, batch size \\
187+
\bottomrule
188+
\end{tabular}
189+
190+
\vspace{0.78em}
191+
\badge{slideblue}{Reference}{readable oracle}
192+
\hfill
193+
\badge{threadteal}{Scenario grid}{property / stress / load tests}
194+
\hfill
195+
\badge{jaxberry}{Validation gate}{optimize only after checks}
196+
\end{block}
197+
\end{column}
198+
199+
\separatorcolumn
200+
201+
\begin{column}{\colwidth}
202+
\begin{block}{3. Two workloads, two pressure shapes}
203+
They are simple examples of two common statistical computing patterns.
204+
205+
\vspace{0.28em}
206+
\hspace*{-0.04\linewidth}\begin{columns}[t,totalwidth=1.08\linewidth]
207+
\begin{column}{0.49\linewidth}
208+
\smalllabel{numba}{k-means}
209+
Iterative model fitting.
210+
\vspace{0.15em}
211+
\begin{center}
212+
\includegraphics[width=\linewidth]{assets/poster_v4_kmeans_iris.png}
213+
\end{center}
214+
\end{column}
215+
\begin{column}{0.49\linewidth}
216+
\smalllabel{jaxberry}{permutation test}
217+
Resampling inference.
218+
\vspace{0.15em}
219+
\begin{center}
220+
\includegraphics[width=\linewidth]{assets/poster_v6_permutation_workflow_cropped.png}
221+
\end{center}
222+
\end{column}
223+
\end{columns}
224+
225+
\vspace{0.22em}
226+
\evidencebox{numba}{softgreen}{%
227+
\smalllabel{cityumaroon}{Validation checks}
228+
\textbf{k-means:} same data, initialization, stopping rule; compare inertia and recovery.\par
229+
\textbf{permutation:} same permutation stream and p-value definition; check null calibration before timing.
230+
}
231+
\end{block}
232+
233+
\begin{block}{4. Evidence examples, scoped}
234+
\begin{tabular}{@{}L{0.34\linewidth}L{0.56\linewidth}@{}}
235+
\toprule
236+
\textbf{Claim} & \textbf{Committed evidence} \\
237+
\midrule
238+
k-means equivalence & max relative inertia difference $3.1\times10^{-14}$; tolerance $10^{-8}$ \\
239+
permutation equivalence & max p-value difference 0.0; max statistic difference $9.4\times10^{-16}$ \\
240+
null behavior & type-I estimate at $\alpha=0.05$ was 0.051 \\
241+
A100 boundary & first streamed-reduction win at $n=5{,}000$, $p=10{,}000$, $R=5{,}000$, batch\_R=8,192 \\
242+
A100 scope & largest slide-level measured speedup 8.54x \\
243+
\bottomrule
244+
\end{tabular}
245+
246+
\vspace{0.42em}
247+
\evidencebox{cityuorange}{softgold}{%
248+
\smalllabel{cityumaroon}{Timing scope}
249+
speedup = matched CPU matrix baseline / A100 streamed full end-to-end\par
250+
compile excluded \textperiodcentered{} transfer included \textperiodcentered{} kernel-only excluded
251+
}
252+
\end{block}
253+
\end{column}
254+
255+
\separatorcolumn
256+
257+
\begin{column}{\colwidth}
258+
\begin{block}{5. Choose the smallest tool}
259+
\begin{tabular}{@{}L{0.37\linewidth}L{0.51\linewidth}@{}}
260+
\toprule
261+
\textbf{Signal} & \textbf{Conservative tool choice} \\
262+
\midrule
263+
not trusted yet & fix method / reference \\
264+
hot scalar loop & Numba \\
265+
dense algebra & NumPy / BLAS \\
266+
shared-array repetition & Python 3.14 / threads \\
267+
device-resident batches & JAX / A100 \\
268+
giant temporary & rewrite / stream \\
269+
\bottomrule
270+
\end{tabular}
271+
272+
\vspace{0.78em}
273+
\toolchip{cityured}{trust first}
274+
\hfill
275+
\toolchip{numba}{compile loops}
276+
\hfill
277+
\toolchip{slideblue}{use algebra}
278+
\hfill
279+
\toolchip{jaxberry}{batch for device}
280+
\end{block}
281+
282+
\begin{block}{6. What to report with every speed claim}
283+
\begin{itemize}
284+
\item validation target and acceptance tolerance
285+
\item environment tier: local, server CPU, or A100
286+
\item cold vs warm timing; compile excluded or included
287+
\item transfer, allocation, and collection included or excluded
288+
\end{itemize}
289+
{\footnotesize\color{muted}Unavailable/OOM cells are reported as unavailable.}
290+
\end{block}
291+
292+
\begin{alertblock}{Takeaway}
293+
\centering
294+
\practicalstep{cityured}{1}{Simulate known behavior}
295+
\hfill
296+
\practicalstep{threadteal}{2}{Validate the result}
297+
\vspace{0.55em}\par
298+
\hfill
299+
\practicalstep{cityuorange}{3}{Measure the bottleneck}
300+
\hfill
301+
\practicalstep{jaxberry}{4}{Choose the smallest tool}
302+
\vspace{0.55em}
303+
304+
{\Large\bfseries\color{cityumaroon}Clear enough to trust. Fast enough to scale.}\par
305+
\vspace{0.25em}
306+
{\normalsize\bfseries\color{ink}github.com/LucaJiang/FastStatisticalModels4Python}
307+
\end{alertblock}
308+
\end{column}
309+
310+
\separatorcolumn
311+
\end{columns}
312+
\end{frame}
313+
\end{document}

0 commit comments

Comments
 (0)