Skip to content

Commit 5e9628c

Browse files
[mod] update
1 parent b198879 commit 5e9628c

1 file changed

Lines changed: 77 additions & 73 deletions

File tree

poster/index.html

Lines changed: 77 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -831,7 +831,7 @@
831831
<h1>Breaking the Speed Limit</h1>
832832
<p class="subtitle">Fast statistical models with Python 3.14, Numba, and JAX</p>
833833
<p class="tagline">From a statistician's workflow: validate first, then accelerate the bottleneck.</p>
834-
<p class="control-plane">Python stays the control plane; only the validated computational hotspot is accelerated.</p>
834+
<p class="control-plane">Keep the statistical workflow readable in Python; accelerate only the proven bottlenecks.</p>
835835
<p class="authors">Wenxin Jiang &nbsp;&middot;&nbsp; Jian Yin</p>
836836
<p class="institute">Department of Biostatistics, City University of Hong Kong &nbsp;&middot;&nbsp; PyCon US 2026</p>
837837
</div>
@@ -846,7 +846,7 @@ <h1>Breaking the Speed Limit</h1>
846846
<section class="thesis" aria-label="Main poster rule">
847847
<p class="thesis-main">
848848
<strong>Make the statistical task testable; then accelerate the measured bottleneck.</strong>
849-
<span>Define the target, check agreement, then accelerate only the measured computational hotspot.</span>
849+
<span>Set the target, validate the output, and specifically speed up the bottleneck.</span>
850850
</p>
851851
<div class="ribbon" aria-label="Workflow">
852852
<div class="ribbon-step"><b class="dot">1</b>Simulate</div>
@@ -855,79 +855,79 @@ <h1>Breaking the Speed Limit</h1>
855855
<div class="arrow"></div>
856856
<div class="ribbon-step"><b class="dot">3</b>Find bottleneck</div>
857857
<div class="arrow"></div>
858-
<div class="ribbon-step"><b class="dot">4</b>Pick the smallest tool</div>
858+
<div class="ribbon-step"><b class="dot">4</b>Pick the simplest tool</div>
859859
</div>
860860
</section>
861861

862862
<section class="columns">
863863
<div class="col">
864864
<section>
865-
<div class="section-title blue"><b class="dot">1</b><h2>Simulation Provides the Test Harness</h2></div>
866-
<p class="lead">Real biomedical data rarely provide known truth. Simulation creates a controlled setting for checking recovery, calibration, and agreement.</p>
865+
<div class="section-title blue"><b class="dot">1</b><h2>Simulation Defines "Correct"</h2></div>
866+
<p class="lead">Real biomedical data rarely provides ground truth. Simulation creates a controlled setting to test recovery, calibration, and agreement.</p>
867867
<div class="workflow">
868-
<article class="workflow-card card blue"><span class="num">01</span><strong>Statistical target</strong><p>what to estimate, recover, preserve</p></article>
869-
<article class="workflow-card card teal"><span class="num">02</span><strong>Scenario grid</strong><p>null, alternative, hard cases</p></article>
870-
<article class="workflow-card card gold"><span class="num">03</span><strong>Reference implementation</strong><p>readable Python/NumPy implementation</p></article>
871-
<article class="workflow-card card green"><span class="num">04</span><strong>Validation checks</strong><p>recovery, calibration, agreement</p></article>
872-
<article class="workflow-card card gold"><span class="num">05</span><strong>Workload structure</strong><p>loops, algebra, repetition, memory</p></article>
873-
<article class="workflow-card card berry"><span class="num">06</span><strong>Selective acceleration</strong><p>smallest sufficient tool</p></article>
868+
<article class="workflow-card card blue"><span class="num">01</span><strong>Define Target</strong><p>what to estimate, recover, preserve</p></article>
869+
<article class="workflow-card card teal"><span class="num">02</span><strong>Build Scenarios</strong><p>null, alternative, hard cases</p></article>
870+
<article class="workflow-card card gold"><span class="num">03</span><strong>Establish Reference</strong><p>readable Python/NumPy implementation</p></article>
871+
<article class="workflow-card card green"><span class="num">04</span><strong>Verify Behavior</strong><p>recovery, calibration, agreement</p></article>
872+
<article class="workflow-card card gold"><span class="num">05</span><strong>Analyze Workload</strong><p>loops, algebra, repetition, memory</p></article>
873+
<article class="workflow-card card berry"><span class="num">06</span><strong>Select Tool</strong><p>the minimum sufficient tool</p></article>
874874
</div>
875-
<div class="gate">Gate: optimization starts only after validation passes.</div>
875+
<div class="gate">Rule: Do not optimize until validation passes.</div>
876876
</section>
877877

878878
<section>
879879
<div class="section-title gold"><b class="dot">2</b><h2>Decisions Before Timing</h2></div>
880880
<table class="decision-table card">
881881
<thead><tr><th>Question</th><th>Decision before measuring speed</th></tr></thead>
882882
<tbody>
883-
<tr><td>Scientific target</td><td>estimator, statistic, null, stopping rule</td></tr>
884-
<tr><td>Ground truth</td><td>labels, known effect, nominal type-I rate</td></tr>
885-
<tr><td>Acceptance</td><td>exact match, tolerance, recovery, calibration</td></tr>
886-
<tr><td>Failure meaning</td><td>implementation, method, or systems limit</td></tr>
887-
<tr><td>Scale stress</td><td>dimensions that make work expensive</td></tr>
883+
<tr><td>Statistical target</td><td>estimator, test statistic, or stopping rule</td></tr>
884+
<tr><td>Simulated truth</td><td>labels, effect size, or nominal alpha</td></tr>
885+
<tr><td>Acceptance criteria</td><td>exact match, numerical tolerance, or calibration</td></tr>
886+
<tr><td>Failure mode</td><td>code bug, method breakdown, or out-of-memory (OOM)</td></tr>
887+
<tr><td>Cost drivers</td><td>samples (n), features (p), or repeats (R)</td></tr>
888888
</tbody>
889889
</table>
890890
</section>
891891

892892
<section>
893-
<div class="section-title green"><b class="dot">3</b><h2>Validation Gates Passed</h2></div>
893+
<div class="section-title green"><b class="dot">3</b><h2>Validation Checks Passed</h2></div>
894894
<article class="validation-gate card">
895-
<h3>All speed claims below passed these checks.</h3>
895+
<h3>Speedup results verified using these criteria:</h3>
896896
<div class="gate-list">
897-
<div class="gate-row"><b></b><span><strong>k-means:</strong> max relative inertia difference 3.1e-14 &lt; tolerance 1e-8.</span></div>
898-
<div class="gate-row"><b></b><span><strong>permutation:</strong> same test statistic, same p-value definition, same resampling stream; max |p diff| = 0.0.</span></div>
899-
<div class="gate-row"><b></b><span><strong>statistic difference:</strong> max |stat diff| = 9.4e-16 across the recorded validation grid.</span></div>
900-
<div class="gate-row"><b></b><span><strong>null calibration:</strong> estimated type-I error 0.051 near nominal alpha 0.05.</span></div>
897+
<div class="gate-row"><b></b><span><strong>K-means agreement:</strong> max relative inertia difference is 3.1e-14 (well below the 1e-8 tolerance).</span></div>
898+
<div class="gate-row"><b></b><span><strong>Permutation equivalence:</strong> same test statistic, same p-value definition, same resampling stream; max |p diff| = 0.0.</span></div>
899+
<div class="gate-row"><b></b><span><strong>Statistic difference:</strong> max |stat diff| = 9.4e-16 across the validation grid.</span></div>
900+
<div class="gate-row"><b></b><span><strong>Null calibration:</strong> estimated type-I error 0.051 aligns with nominal alpha 0.05.</span></div>
901901
</div>
902902
</article>
903903
</section>
904904

905905
<section>
906-
<div class="section-title purple"><b class="dot">AI</b><h2>AI Scales the Workflow; the Statistician Owns the Claim</h2></div>
906+
<div class="section-title purple"><b class="dot">AI</b><h2>AI for Scale, Statistician for Science</h2></div>
907907
<div class="ai-grid">
908908
<article class="ai-card card teal">
909909
<div>
910-
<strong>What AI can automate</strong>
910+
<strong>AI Automates Execution</strong>
911911
<ul>
912-
<li>implementation variants</li>
913-
<li>scenario-grid runners</li>
914-
<li>metadata capture</li>
915-
<li>plot regeneration</li>
916-
<li>result manifests</li>
912+
<li>Code variants</li>
913+
<li>Scenario grids</li>
914+
<li>Metadata tracking</li>
915+
<li>Plot regeneration</li>
916+
<li>Result manifests</li>
917917
</ul>
918918
</div>
919919
<img class="duty-art" src="assets/ai_duty_thumb.png" alt="Automation layer illustration" />
920920
<p class="role-caption">AI assistant automating experiment tasks</p>
921921
</article>
922922
<article class="ai-card card green">
923923
<div>
924-
<strong>What the statistician decides</strong>
924+
<strong>Statistician Owns Inference</strong>
925925
<ul>
926-
<li>statistical target</li>
927-
<li>data-generating assumptions</li>
928-
<li>validation criteria</li>
929-
<li>interpretation of difficult cases</li>
930-
<li>scientific claims</li>
926+
<li>Statistical target</li>
927+
<li>Data assumptions</li>
928+
<li>Validation criteria</li>
929+
<li>Hard-case interpretation</li>
930+
<li>Scientific claims</li>
931931
</ul>
932932
</div>
933933
<img class="duty-art" src="assets/human_duty_thumb.png" alt="Statistician judgment illustration" />
@@ -942,46 +942,50 @@ <h3>All speed claims below passed these checks.</h3>
942942
<div class="section-title teal"><b class="dot">4</b><h2>Two Workloads, Two Bottleneck Patterns</h2></div>
943943
<div class="workload-grid">
944944
<article class="workload blue">
945-
<h3>k-means = iterative fitting</h3>
945+
<h3>K-means = Iterative Fitting</h3>
946946
<div class="figure card">
947947
<img src="figures/kmeans_illustration.png" alt="k-means iterative fitting illustration" />
948948
<div class="chips"><span class="chip">distance loops</span><span class="chip">temporaries</span><span class="chip">compiled kernels</span></div>
949949
</div>
950950
</article>
951951
<article class="workload green">
952-
<h3>permutation = resampling inference</h3>
952+
<h3>Permutation = Resampling Inference</h3>
953953
<div class="figure card">
954954
<img src="figures/permutation_task_schematic.png" alt="permutation-test workflow schematic" />
955955
<div class="chips"><span class="chip">shared arrays</span><span class="chip">batching</span><span class="chip">W @ X</span></div>
956956
</div>
957957
</article>
958958
</div>
959-
<div class="contract" style="font-size: 1cqb;"><strong>Validation contract:</strong> k-means keeps the same data, initialization, and stopping rule; permutation keeps the same resampling stream and p-value definition.</div>
959+
<div class="contract" style="font-size: 1cqb;">
960+
<strong>Validation criteria:</strong>
961+
<b>K-means</b> keeps same data, initialization, and stopping rule.
962+
<b>Permutation</b> keeps same resampling stream and p-value definition.
963+
</div>
960964
</section>
961965

962966
<article class="takeaway-strip card">
963-
<strong>Validate the analysis before optimizing the implementation.</strong>
964-
<span>Speed only counts after agreement with the reference passes the validation criteria.</span>
967+
<strong>Validate the Statistic, Then Accelerate.</strong>
968+
<span>Speed only counts when the statistical target is preserved.</span>
965969
</article>
966970

967971
<section>
968-
<div class="section-title berry"><b class="dot">5</b><h2>After Validation, Performance Depends on Workload Structure</h2></div>
972+
<div class="section-title berry"><b class="dot">5</b><h2>Performance Depends on Workload Structure</h2></div>
969973
<div class="evidence-grid">
970974
<article class="plot-card card">
971-
<h3>K-means: workload structure determines the implementation</h3>
975+
<h3>K-means: Workload Shape Determines the Tool</h3>
972976
<ul class="shape-notes">
973-
<li>loop-dominated computations: Numba, NumPy, and A100 are similar</li>
974-
<li>dense distance computations: NumPy / BLAS is best</li>
975-
<li>large regular batches: JAX / A100 is best</li>
977+
<li><strong>Loop-dominated:</strong> Numba, NumPy, and GPU tie.</li>
978+
<li><strong>Dense algebra:</strong> NumPy / BLAS dominates.</li>
979+
<li><strong>Large regular batches:</strong> JAX / GPU wins.</li>
976980
</ul>
977981
<img src="figures/kmeans_evidence_rows_cropped.png" alt="Server k-means evidence showing implementation choice depends on workload structure" />
978982
</article>
979983
<article class="plot-card card">
980-
<h3>Permutation: A100 is useful only after batching and streaming</h3>
984+
<h3>Permutation: GPU Demands Batching and Streaming</h3>
981985
<ul class="shape-notes">
982-
<li>A100 becomes advantageous after batching and streamed reduction</li>
983-
<li>largest validated speedup in this grid: 8.54×</li>
984-
<li>out-of-memory configurations are reported explicitly</li>
986+
<li><strong>GPU prerequisite:</strong> batching and streamed reduction</li>
987+
<li><strong>Validated speedup:</strong> peaks at 8.54×</li>
988+
<li><strong>Memory limits:</strong> OOM configurations remain explicit</li>
985989
</ul>
986990
<img src="figures/gpu_permutation_decision_map.png" alt="GPU permutation decision map" />
987991
</article>
@@ -993,39 +997,39 @@ <h3>Permutation: A100 is useful only after batching and streaming</h3>
993997
<section>
994998
<div class="section-title berry"><b class="dot">6</b><h2>Bottleneck Signal → Smallest Move</h2></div>
995999
<article class="diagnostic-guide card">
996-
<h3>Reusable diagnostic guide</h3>
997-
<div class="diagnostic-row"><strong>validation fails</strong><span>revisit the statistical definition or implementation</span></div>
998-
<div class="diagnostic-row"><strong>loop-dominated Python code</strong><span>Numba</span></div>
999-
<div class="diagnostic-row"><strong>dense array algebra</strong><span>NumPy / BLAS</span></div>
1000-
<div class="diagnostic-row"><strong>repeated independent work</strong><span>threads / workers</span></div>
1001-
<div class="diagnostic-row"><strong>large regular batches</strong><span>JAX / A100</span></div>
1002-
<div class="diagnostic-row"><strong>memory-limited workload</strong><span>streaming / reduction</span></div>
1000+
<h3>Diagnostic Guide: Signal vs. Action</h3>
1001+
<div class="diagnostic-row"><strong>Validation Failure</strong><span>Revisit the Statistic or Implementation</span></div>
1002+
<div class="diagnostic-row"><strong>Loop-Dominated Python</strong><span>Numba</span></div>
1003+
<div class="diagnostic-row"><strong>Dense Array Algebra</strong><span>NumPy / BLAS</span></div>
1004+
<div class="diagnostic-row"><strong>Repeated Independent Work</strong><span>Threads / Workers</span></div>
1005+
<div class="diagnostic-row"><strong>Large Regular Batches</strong><span>JAX / GPU</span></div>
1006+
<div class="diagnostic-row"><strong>Memory-Bound Workload</strong><span>Streamed Reduction</span></div>
10031007
</article>
10041008
</section>
10051009

10061010
<section>
10071011
<div class="section-title berry"><b class="dot">7</b><h2>Tool Choices in This Talk</h2></div>
1008-
<p class="lead">Examples, not a ranking.</p>
1012+
<p class="lead">Mapping validated bottlenecks to tools. Not a hardware ranking.</p>
10091013
<div class="tool-grid">
10101014
<article class="tool card green">
10111015
<strong>Numba</strong>
1012-
<b>loop-dominated CPU code</b>
1013-
<em>k-means assignment/update</em>
1016+
<b>Explicit CPU Loops</b>
1017+
<em>K-means Assignment / Update</em>
10141018
</article>
10151019
<article class="tool card blue">
10161020
<strong>NumPy / BLAS</strong>
1017-
<b>dense distance algebra</b>
1018-
<em>distance identity and W @ X on CPU</em>
1021+
<b>Dense Matrix Algebra</b>
1022+
<em>Distance Identity and W @ X (CPU)</em>
10191023
</article>
10201024
<article class="tool card teal">
10211025
<strong>Threads / workers</strong>
1022-
<b>repeated work over shared data</b>
1023-
<em>permutation worker sweep</em>
1026+
<b>Shared-Data Repetition</b>
1027+
<em>Permutation Worker Sweep</em>
10241028
</article>
10251029
<article class="tool card berry">
1026-
<strong>JAX / A100</strong>
1027-
<b>device-resident regular batches</b>
1028-
<em>streamed W @ X after validation</em>
1030+
<strong>JAX / GPU</strong>
1031+
<b>Large Regular Batches</b>
1032+
<em>Streamed W @ X (After Validation)</em>
10291033
</article>
10301034
</div>
10311035
</section>
@@ -1034,12 +1038,12 @@ <h3>Reusable diagnostic guide</h3>
10341038
<div class="section-title orange"><b class="dot">8</b><h2>Report Every Speed Claim</h2></div>
10351039
<article class="report-card card">
10361040
<div class="checks">
1037-
<div><b></b><span>validation target and acceptance criteria</span></div>
1038-
<div><b></b><span>compute tier: local validation, server CPU, or A100</span></div>
1039-
<div><b></b><span>cold/warm timing and compilation treatment</span></div>
1040-
<div><b></b><span>transfer, allocation, and collection treatment</span></div>
1041-
<div><b></b><span>unavailable or out-of-memory configurations reported explicitly</span></div>
1042-
<div><b></b><span>smallest tool that preserves the statistical result</span></div>
1041+
<div><b></b><span><strong>Validation Criteria:</strong> target and acceptance threshold</span></div>
1042+
<div><b></b><span><strong>Compute Tier:</strong> local validation, server CPU, or GPU</span></div>
1043+
<div><b></b><span><strong>Timing State:</strong> cold/warm execution and compilation handling</span></div>
1044+
<div><b></b><span><strong>Memory Overhead:</strong> transfer, allocation, and collection costs</span></div>
1045+
<div><b></b><span><strong>Failure Modes:</strong> OOM and unavailable configurations remain explicit</span></div>
1046+
<div><b></b><span><strong>Tool Selection:</strong> simplest tool preserving the statistic</span></div>
10431047
</div>
10441048
<div class="gate">Timing semantics: compilation excluded; data transfer included; kernel-only timings not reported.</div>
10451049
</article>

0 commit comments

Comments
 (0)