 Command

Sam Foreman's personal site. Vim-style keybinds for navigation; theme + font pickers below.

Theme
 Font Body Code
Reader
Keybinds
Navigation
j / ↓ Next item k / ↑ Previous item g First item in region G Last item in region zz Center focused item h / l Sidebar / main content ] / [ Next/previous heading } / { Next/previous block d / u Half-page down/up
Layout
<zh> Toggle sidebar <zr> Toggle reader view <zj> / <zk> Focus main / actions ⇧C / ⇧E  ·  <zM> / <zR> Collapse / expand all sections
Dialogs
⌃P / : Command palette ⌃X Theme picker / Search ? Show keybinds ⌃N / ⌃P Next/prev search result Esc Close dialog / exit reader
History
n Next document b Previous document ⌃O History back ⌃I History forward
Sections
a about p posts t talks m more s style
 Search
about: Sam Foreman about/more: 🪪 More ideas: 💡 Ideas more: ➕ More now: Now posts: 📬 Posts posts/2023/12/05: 🔳 l2hmc-qcd Example: 4D SU(3) posts/2025: 📆 2025 posts/2025/04/28: 🔥 Building PyTorch 2.6 from Source on Aurora posts/2025/05/03: 🚧 Frameworks Issue with numpy \› 2 posts/2025/06: 06 posts/2025/06/01: 📰 Nice Headings posts/2025/06/02: 🧜‍♀️ Mermaid posts/2025/06/14: 🏗️ Building PyTorch 2.8 from Source on Aurora posts/2025/09/12: 🍹 BlendCorpus + TorchTitan @ ALCF posts/2025/09/17: 📊 pbs-tui: TUI for PBS Job Scheduler Monitoring posts/2025/10/06: 🎨 Mixing Between Distributions While Training posts/2025/11/12: 🧊 Cooling Down Checkpoints: Best Practices for Model Evaluation posts/2026/01/07: 🎉 Happy New Year! posts/2026/01/10: 🍋 ezpz: distributed PyTorch across any hardware posts/2026/02/28: ⏱️ Comparing Launchers on Aurora posts/2026/02/28: ## torchrun posts/2026/02/28: ## ezpz posts/2026/04/27: Pre-Training AuroraGPT with TorchTitan posts/2026/04/27: ## Two-Week Summary (Apr 12–27, 2026) posts/2026/04/27: ## Detailed Breakdown posts/2026/04/27: ### Week 1: Apr 12–18 — Benchmarking, LR Finder, XPU Fixes posts/2026/04/27: #### Benchmarking (Apr 12–15) posts/2026/04/27: #### LR Finder (Apr 12–14) posts/2026/04/27: #### Scaling Study (Apr 12) posts/2026/04/27: #### Upstream Syncs (Apr 12–18, syncs 6–14) posts/2026/04/27: #### XPU Bug Fixes (Apr 18) posts/2026/04/27: #### RL Experiment (Apr 18) posts/2026/04/27: ### Week 1.5: Apr 18–25 — Production Readiness posts/2026/04/27: #### Torch 2.12 Benchmarks (Apr 18) posts/2026/04/27: #### LR Finder Extensions (Apr 20–21) posts/2026/04/27: #### XPU Fixes (Apr 23) posts/2026/04/27: #### Torch 2.13 Environment (Apr 25) posts/2026/04/27: #### 2B Scaling Study on Torch 2.13 (Apr 25) posts/2026/04/27: #### Production Training (Apr 25) posts/2026/04/27: ### Week 2: Apr 26–27 — Optimizer Competition posts/2026/04/27: #### RL Multi-Task Refactor (Apr 26) posts/2026/04/27: #### Docs Reorganization (Apr 26) posts/2026/04/27: #### Generic HF Dataset Streaming (Apr 26) posts/2026/04/27: #### New Optimizers (Apr 26) posts/2026/04/27: #### Architecture Tweaks (Apr 26–27) posts/2026/04/27: ## Competition Results posts/2026/04/27: ### Round 1–3: Speedrun — 2N, GBS=48, 1000 steps posts/2026/04/27: ### 10B Full Training — 8N, GBS=384, ~3,178 steps posts/2026/04/27: ### Round 4: Reproducible Speedrun — 2N, GAS=8, GBS=384, 1000 steps posts/2026/04/27: ## Key Discoveries posts/2026/04/27: ## Infrastructure Built posts/2026/04/27: ## High-Level posts/2026/04/27: ## Detailed Breakdown posts/2026/04/27: ### Week 1: Apr 12–18 — Benchmarking, LR Finder, XPU Fixes posts/2026/04/27: #### Benchmarking (Apr 12–15) posts/2026/04/27: #### LR Finder (Apr 12–14) posts/2026/04/27: #### Scaling Study (Apr 12) posts/2026/04/27: #### Upstream Syncs (Apr 12–18, syncs 6–14) posts/2026/04/27: #### XPU Bug Fixes (Apr 18) posts/2026/04/27: #### RL Experiment (Apr 18) posts/2026/04/27: ### Week 1.5: Apr 18–25 — Production Readiness posts/2026/04/27: #### Torch 2.12 Benchmarks (Apr 18) posts/2026/04/27: #### LR Finder Extensions (Apr 20–21) posts/2026/04/27: #### XPU Fixes (Apr 23) posts/2026/04/27: #### Torch 2.13 Environment (Apr 25) posts/2026/04/27: #### 2B Scaling Study on Torch 2.13 (Apr 25) posts/2026/04/27: #### Production Training (Apr 25) posts/2026/04/27: ### Week 2: Apr 26–27 — Optimizer Competition posts/2026/04/27: #### RL Multi-Task Refactor (Apr 26) posts/2026/04/27: #### Docs Reorganization (Apr 26) posts/2026/04/27: #### Generic HF Dataset Streaming (Apr 26) posts/2026/04/27: #### New Optimizers (Apr 26) posts/2026/04/27: #### Architecture Tweaks (Apr 26–27) posts/2026/04/27: ## Competition Results posts/2026/04/27: ### Round 1–3: 1000-step speedruns, 2 nodes, GBS=48 (17 configs) posts/2026/04/27: ### Round 4 (10B full training, 8 nodes, GBS=384, 5 configs) posts/2026/04/27: ### Round 5 (2 nodes, GAS=8, GBS=384, local dataset, 8 configs — in progress) posts/2026/04/27: ## Key Discoveries posts/2026/04/27: ## Infrastructure Built posts/2026/05/01: Running 50k Python Processes on Aurora with ezpz yeet posts/2026/06/27: Local AI Apps on ALCF: Argo, Inference Endpoints, and One Gateway posts/2026/06/28: Migrating from Quarto to Astro: samforeman.me → samf.sh posts/2026/08/08: Pre-Training LLMs on a Supercomputer posts/2026/09/22: Working From Anywhere: Persistent Access to Compute and Context posts/2026/09/25: A Small Service Mesh for My Macs and Supercomputers posts/2026/10/16: ezpz from anywhere: remote submission via the ALCF IRI API posts/2026/11/11: Benchmarking ALCF systems with torch-hammer posts/2026/11/14: ♟️ AI Agent Arcade — LLMs play chess, a referee keeps score posts/ai-for-physics: ⚛️ AI for Physics posts/ai-for-physics/diffusion: 🎲 MCMC + Diffusion Sampling posts/ai-for-physics/l2hmc-qcd: 🎢 L2HMC for LQCD posts/ai-for-physics/l2hmc-qcd/2du1: 🎢 l2hmc-qcd Example: 2D U(1) posts/auroragpt: 🤖 AuroraGPT posts/auroragpt/aurora-gpt: 🏎️ Megatron-DeepSpeed on Intel XPU posts/auroragpt/checkpoints: 💾 Converting Checkpoints posts/auroragpt/determinstic-flash-attn/deterministic-flash-attn: 🎰 Deterministic flash-attn posts/auroragpt/flash-attn-sunspot: 📸 flash-attn on Sunspot posts/auroragpt/long-sequences: 🚂 Loooooooong Sequence Lengths posts/auroragpt/mpi4py-reproducer: 🐛 mpi4py bug on Sunspot posts/auroragpt/spike-skipper: 🏔️ Spike Skipper posts/auroragpt/startup-times: 🐢 Starting Up Distributed Training on Aurora posts/auroragpt/startup-times: ## Response posts/auroragpt/startup-times: ### Measuring / Calculating Startup Time posts/auroragpt/startup-times: ## Minimal Working Example posts/croon: croon: Synced Lyrics in the Terminal, for Whatever Is Playing posts/dope-slides: 💅 How to Make Dope Slides posts/drafts/2025/09/22: 📝 2025 Annual Report posts/ezpz-at-alcf: 🍋 ezpz @ ALCF posts/ezpz-v1: 📝 ezpz-v1 posts/globusfs: globusfs: an fsspec Filesystem for Globus Collections posts/jupyter: 📗 Jupyter posts/jupyter/test: 🏁 l2hmc Example: 2D $U(1)$ posts/resume: 🧑🏻‍💻 Sam Foreman’s Résumé posts/svgbob: 🫥 svgbob posts/torchtune-aurora: 🪛 Torchtune on Aurora posts/torchtune-patch-aurora: 🚑 Torchtune Patch on Aurora posts/wandb-tui: wandb-tui: Comparing W&B Runs Without Leaving the Terminal projects: 📚 Projects talks: 🎙️ Talks talks/2025/09/24: Training Foundation Models on Supercomputers talks/2025/10/08: AERIS: Argonne's Earth Systems Model talks/2025/10/15: Training Foundation Models on Supercomputers talks/2025/10/24: Training Foundation Models on Supercomputers talks/2025/12/16: AuroraGPT: Training Foundation Models on Supercomputers talks/2026/06/03: Production Pre-Training at Scale: The Good, the Bad, and the Restarts talks/2026/07/14: Pre-Training AuroraGPT at Scale on Aurora talks/2026/08/03: Pre-Training LLMs on a Supercomputer talks/2026/10/15: Profiling and Optimization of AI Training Workloads talks/2026/10/21: Scaling PyTorch on Intel XPU: Field Notes from AI for Science on Aurora talks/2026/10/30: Towards Resilient Training and Fault-Tolerant Software at ALCF talks/ai-for-science-2024: Parallel Training Methods talks/alcf-hpc-workshop-2024/alcf-hpc-workshop-2024: Deep Learning and Foundation Models at Scale talks/aurora-gpt-fm-for-electric-grid/auroragpt-fm-for-electric-grid: AuroraGPT: Foundation Models for Science talks/auroragpt-siam25: AuroraGPT talks/auroragpt/alcf-hpc-workshop-2024/auroragpt-alcf-hands-on-hpc-workshop-2024: AuroraGPT: ANL's General Purpose Scientific LLM talks/demo-slides: AuroraGPT: Training Foundation Models on Supercomputers talks/hpc-user-forum/auroragpt: AuroraGPT talks/incite-hackathon-2025: ALCF Incite Hackathon 2025 talks/incite-hackathon-2025/auroragpt: LLMs on Aurora: Overview talks/incite-hackathon-2025/ezpz: LLMs on Aurora: Hands-On talks/llms-at-scale: Training LLMs at Scale talks/llms-on-polaris: Training LLMs on Polaris talks/openskai25: Open SkAI2025 talks/openskai25/ai4science: Scientific AI at Scale: AuroraGPT talks/openskai25/training: Scientific AI at Scale: Distributed Training webtui: Style webtui/components/accordion: Accordion webtui/components/badge: Badge webtui/components/button: Button webtui/components/checkbox: Checkbox webtui/components/dialog: Dialog webtui/components/input: Input webtui/components/popover: Popover webtui/components/pre: Pre webtui/components/progress: Progress webtui/components/radio: Radio webtui/components/range: Range webtui/components/separator: Separator webtui/components/spinner: Spinner webtui/components/switch: Switch webtui/components/table: Table webtui/components/textarea: Textarea webtui/components/tooltip: Popover webtui/components/typography: Typography webtui/components/view: View webtui/contributing/contributing: Contributing webtui/contributing/contributing: ## Local Development webtui/contributing/contributing: ## Issues webtui/contributing/contributing: ## Pull Requests webtui/contributing/style-guide: Style Guide webtui/contributing/style-guide: ## CSS Units webtui/contributing/style-guide: ## Selectors webtui/contributing/style-guide: ## Documentation webtui/installation/astro: Astro webtui/installation/astro: ## Scoping webtui/installation/astro: ### Frontmatter Imports webtui/installation/astro: ### ‹style› tag webtui/installation/astro: ### Full Library Import webtui/installation/nextjs: Next.js webtui/installation/vite: Vite webtui/plugins/plugin-dev: Developing Plugins webtui/plugins/plugin-dev: ### Style Layers webtui/plugins/plugin-nf: Nerd Font Plugin webtui/plugins/theme-catppuccin: Catppuccin Theme webtui/plugins/theme-custom: Custom Theme webtui/plugins/theme-everforest: Everforest Theme webtui/plugins/theme-gruvbox: Gruvbox Theme webtui/plugins/theme-nord: Nord Theme webtui/plugins/theme-vitesse: Vitesse Theme webtui/start/ascii-boxes: ASCII Boxes webtui/start/changelog: Changelog webtui/start/installation: Installation webtui/start/installation: ## Installation webtui/start/installation: ## Using CSS webtui/start/installation: ## Using ESM webtui/start/installation: ## Using a CDN webtui/start/installation: ## Full Library Import webtui/start/installation: ### CSS webtui/start/installation: ### ESM webtui/start/installation: ### CDN webtui/start/intro: Introduction webtui/start/intro: ## Features webtui/start/plugins: Plugins webtui/start/plugins: ## Official Plugins webtui/start/plugins: ### Themes webtui/start/plugins: ## Community Plugins webtui/start/theming: Theming webtui/start/theming: ## CSS Variables webtui/start/theming: ### Font Styles webtui/start/theming: ### Colors webtui/start/theming: ### Light & Dark webtui/start/theming: ## Theme Plugins webtui/start/theming: ### Using Multiple Theme Accents webtui/start/tuis-vs-guis: TUIs vs GUIs webtui/start/tuis-vs-guis: ## Monospace Fonts webtui/start/tuis-vs-guis: ## Character Cells
 Theme Current: Light j/k or ↑/↓ + Enter

Benchmarking ALCF systems with torch-hammer

Same 9 benchmarks, same tool, two completed ALCF systems: Sunspot (PVC Max 1550) and Sirius (A100). Aurora and Polaris remain queued. The results include one benchmark where Intel wins 8×.

torch-hammer is an HPE-maintained GPU benchmark suite — 9 workloads from batched GEMM to stencil PDEs to sparse matmul, with built-in telemetry (NVML / ROCm-SMI / xpu-smi), compact CSV + HTML fleet reports, and multi-GPU aggregation via multiprocessing.spawn. It runs on CUDA, ROCm, XPU, and MPS from one codebase.

This post is about making it run everywhere at ALCF and what came out.

TL;DR — the numbers

Same benchmarks, same flags (--stress-test, HBM-scaled), two machines that actually scheduled. Aurora and Polaris are still queued behind reservations — same PBS, same staging, they’ll land when debug frees up.

1-GPU stress (HBM-scaled, float32):

BenchmarkUnitSunspot XPU
Max 1550
Sirius A100
40GB SXM4
Winner
Batched GEMMGFLOP/s18,90718,861Tie
Convolutionimg/s1.64M9.36MA100 5.7×
3D FFTGFLOP/s———
Einsum AttentionGFLOP/s14,24017,058A100 1.2×
Memory TrafficGB/s27.729.6A100 1.07×
Heat EquationMLUPS10,61315,501A100 1.46×
Schrödinger Equationiter/s43.258.8A100 1.36×
Atomic ContentionMops/s1,7349,176A100 5.3×
Sparse MMGFLOP/s2,028243XPU 8.4×

All-GPUs fleet (stress, per-node):

SystemGPUsBatched GEMMConvolutionEinsumMem BWVerdict
Sunspot24 (2×12 tiles)18.0 TFLOP/s1.49M img/s13.9 TFLOP/s27.0 GB/s2/2 PASS · CV 0.7–5.7%
Sirius4 visible (2 allocated)18.9 TFLOP/s9.39M img/s17.1 TFLOP/s29.6 GB/s1/1 PASS · CV ≤0.2%

The one surprise is Sparse MM: PVC Max 1550 beats A100 by 8.4× on unstructured sparse matmul. Everything else favors A100 or ties — which is the expected story for dense GEMM / attention / atomics.

FFT is missing on both: XPU hits an MKL DFT “unimplemented” for the configured shape; Sirius OOMs at 11.75 GiB under stress fill on 40 GB (prior benches already hold ~30 GiB).

What was needed per machine

The interesting part is not the fastest GPU — it is what it costs to make one script work across different ALCF systems.

SunspotAuroraPolarisSirius
GPUPVC Max 1550 · 12 tiles/nodePVC Max 1550 · 12 tiles/nodeA100 40GB · 4/nodeA100 40GB · 4/node
Queueworkq · datasciencedebug · AuroraGPTdebug · datascienceworkq · datascience
Filesystemshome:teguhome:flarehome:eaglehome
Envezpz_setup_env → frameworks/2026.1.0ezpz_setup_env or venvconda baseminiconda3/envs/cu122-pt221
MPImpiexec --ppnmpiexec --ppnmpiexec --ppnnone — head-node fallback
Telemetryplaceholder (no xpu-smi)placeholderNVML (full)NVML (full)

Sirius was the hardest per line of PBS: Python 3.6 as the system default with from __future__ import annotations as a SyntaxError, no mpirun/srun/pbsdsh at all, and the hammer report itself failing under 3.6. The fix was explicit miniconda3/envs/cu122-pt221 (Py 3.11 + torch 2.2) and a single-node --all-gpus fallback that still exercises all 4 A100s via torch.multiprocessing.spawn.

For the larger machines the same PBS template works with three substitutions: account, queue, and filesystem. Staging is shared — one rsync of torch-hammer.py + reports/ + config-examples/ to ~/thammer-staging on each host.

How the run is structured

Every job does the same four phases:

  1. Single-GPU quick — all 9 benchmarks, small sizes, --device-index 0. Cheap sanity check; also exercises the CSV/JSON/HTML paths.
  2. Single-GPU stress — same 9 benchmarks, --stress-test to fill ~50% of free HBM (the 0.3 GB/s → 27.7 GB/s fix — without it the memory bench runs on 4 KiB and measures randint overhead).
  3. Per-node all-GPUs — the 4-benches subset (gemm/conv/einsum/memory-traffic) under stress, one mpiexec rank per node, each rank fanning out to its GPUs.
  4. Reports — hammer_report.py on each CSV/JSON plus a fleet rollup over all-benchmarks/.

Phase 3 is what produces the fleet verdict. Mixing quick + stress CSVs in one directory gives a spurious 0/N OUTLIER report (different problem sizes) — isolated per-phase outputs are the correct inputs to the fleet report.

Detailed results

Sunspot — Intel Data Center GPU Max 1550

2 nodes, 12 PVC tiles each, 24 GPUs total. Job 12483256, walltime 00:12:18, via ezpz_setup_env → frameworks/2026.1.0 (torch 2.13 + XPU).

Single-GPU stress (head tile):

Benchmarkmeanunitminmax
Batched GEMM18,907GFLOP/s18,90018,921
Convolution1,640,940img/s1,635,5191,662,918
Einsum Attention14,240GFLOP/s13,97716,456
Memory Traffic27.7GB/s27.328.0
Heat Equation10,613MLUPS5,60610,720
Schrödinger Equation43.2iter/s42.743.3
Atomic Contention1,734Mops/s1,7321,735
Sparse MM2,028GFLOP/s2,0102,054

Fleet (4 benches, stress, both nodes):

Batched GEMM       18.0 TFLOP/s  CV 0.7%
Convolution         1.49M img/s  CV 1.0%
Einsum             13.9 TFLOP/s  CV 5.7%
Memory Traffic     27.0 GB/s    CV 4.6%
FLEET VERDICT: 2/2 PASS

No power/temp columns — xpu-smi / Level Zero telemetry is not yet wired on the compute image; IntelTelemetry currently returns N/A for those fields.

Sirius — NVIDIA A100-SXM4-40GB

1 node, 4 visible A100s (2 allocated; head-node fallback). Job 33426 (retry after pbsdsh fix), walltime 00:02:08 / 00:01:14, via miniconda3/envs/cu122-pt221 (torch 2.2, CUDA 12.1, driver 535).

Single-GPU stress (head GPU):

Benchmarkmeanunitminmaxpowertemp
Batched GEMM18,861GFLOP/s18,84918,870323 W48 °C
Convolution9,364,516img/s9,310,9879,421,163390 W52 °C
Einsum Attention17,058GFLOP/s17,01217,084347 W52 °C
Memory Traffic29.6GB/s29.629.6194 W49 °C
Heat Equation15,501MLUPS15,42015,510289 W45 °C
Schrödinger Equation58.8iter/s57.059.0201 W45 °C
Atomic Contention9,176Mops/s9,1349,179124 W41 °C
Sparse MM243GFLOP/s243243221 W44 °C

Fleet (4 benches, stress, 4 GPUs):

Batched GEMM       18.9 TFLOP/s  CV 0.2%  313 W  48 °C
Convolution         9.39M img/s  CV 0.2%  386 W  52 °C
Einsum             17.1 TFLOP/s  CV 0.2%  339 W  53 °C
Memory Traffic     29.6 GB/s    CV 0.0%  191 W  52 °C
FLEET VERDICT: 1/1 PASS

Full NVML telemetry — power, temp, SM util, clocks — in every row.

Aurora & Polaris — queued

Same PBS, same staging, same reports path. Both are Q in debug behind unrelated reservations and a 58-deep prod routing queue. No code change needed; they’ll produce identical HTML when debug frees up.

What to do with this

As a one-off, the table above is the takeaway: A100 wins dense, XPU wins sparse, and torch-hammer is a cheap way to check that a machine is still the machine it claims to be.

As infrastructure, the value is the template:

  • One staging dir per host (~/thammer-staging), one PBS template with per-system account/queue/filesystem/env/MPI substitutions.
  • Four-phase job with isolated report inputs so the fleet verdict is never polluted by a scale mismatch.
  • One hammer_report.py invocation per artifact — single-GPU, stress, and fleet — so regressions show up as HTML without needing to parse logs.

Aurora and Polaris remain queued and will be added when they run.

Artifacts


Thanks to the ALCF support staff who keep debug moving. If you want this on your allocation, the PBS template is three lines of sed away from yours — PRs welcome.

 samf.sh / posts / 2026 / 11 / 11 · Top 1:1