AppendicesAppendix B of 7

Appendix B: Reproducible Experiment Configurations and Metrics

  • 16 min read

This appendix records the hardware and workloads behind the report’s quantitative results and defines their accounting conventions. Experiment records vary in which configurations, environment details, raw logs, profiles, and plotting sources were retained; the individual descriptions state that coverage. Credentials and secret environment variables are excluded.

B.1 Audited Hardware and Software

Table 45 records the allocation inspected on 2026-07-10, which hosted the profiling and kernel experiments; the production-throughput runs of Section 14 used larger allocations of the same node type (Appendix B.10). These are hardware and link properties, not measured collective bandwidth.

Item Audited value
Compute Four homogeneous nodes; eight NVIDIA B300 SXM6 AC GPUs per node; 32 GPUs total
GPU memory 275,040 MiB reported per GPU
Driver/toolkit NVIDIA driver 590.48.01; driver CUDA compatibility 13.1; installed CUDA toolkit 13.0.88
Intra-node fabric Every GPU pair reported as NV18; 18 links per GPU at 53.125 GB/s per link
Inter-node fabric Eight active nominal 800-Gb/s XDR InfiniBand rails per node, one PXB-local rail aligned with each GPU; additional 100-Gb/s HDR ports present
Shared storage Olmo-core checkout on WekaFS, visible identically from all four nodes
Olmo-core The DDP training stack of this report at the revision audited on 2026-07-10, with a clean working tree
Table 45. Audited hardware pool. The inventory describes nominal hardware and link properties; application bandwidth, clocks, power mode, and GPU temperature vary with the run and are not inferred from it.

Software-environment fields identify the activated interpreter, PyTorch, NCCL, NVSHMEM, Transformer Engine/torchao, compiler, and extension versions where recorded. A non-login shell can select a different Python or omit the CUDA toolkit from PATH, so the machine inventory alone does not identify the software that executed a run. Network-interface and HCA selection likewise belongs to the realized launch environment rather than a machine-level default.

B.2 Audited Workload Roles

Table 46 describes a 30-block reference recipe and its reduced profiling counterpart, distinct from the headline run configurations in Section 14. The two exercise the same core BF16 rowwise path but are not interchangeable performance points.

Role Model and batch Topology/precision Experiment purpose
Profiling 8 blocks, 32 routed experts, top-8, \(d=1536\), sequence 8192, 0.75-Mi-token global batch EP-MP 8; 1–4 nodes; BF16 rowwise by default; no PP, CP, TP, TBO, or recompute Host-visible route-shape profile; synchronized/rowwise/DeepEP topology comparison; initial multi-node scaling
30-block reference 30 blocks, 128 routed experts, top-8, \(d=1536\), sequence 8192, 18-Mi-token global batch EP-MP 8; BF16 rowwise; no PP, CP, TP, TBO, or recompute in the base recipe Full-reshard FSDP versus DDP-based training; production-scale throughput, efficiency, traffic, variance, and reliability
Table 46. Reference and profiling workload roles. The profiling workload is a reduced configuration for mechanism studies, not a throughput measurement for the 30-block reference.

B.3 The Main FSDP Comparison Uses Full Resharding

The main-text FSDP comparison uses the no-PP FSDP2 path with full resharding: each wrapped block all-gathers its full weights for forward, reshards them, all-gathers them again for backward, and reduce-scatters its gradients. This is the minimum-persistent-parameter-memory endpoint compared with Olmo’s DDP path, which keeps each rank’s assigned weights in device memory. FSDP2 can retain unsharded weights through backward or across intermediate accumulation backwards, but the latter policy makes peak parameter memory approach that of the DDP path with sharded optimizer state; it is therefore a mechanism ablation rather than a primary competing design in this report (Zhao et al. 2023; PyTorch Contributors 2026e).

Those retention policies lie between the two endpoints in parameter memory and communication; the main text analyzes only the full-reshard endpoint. FSDP and hybrid sharded data parallelism (HSDP) are also distinct configurations rather than interchangeable labels.

B.4 Reduced Profiling Changes the Workload

The 30-block reference recipe and its reduced profiling sibling exercise the same general BF16 rowwise path, but they are different sparse workloads. Based on configuration-derived counts, the reference recipe has \(\alpha_P=10.89\%\), a \(9.18\times\) capacity-to-active gap, and \(N/K=16\). Its 18-Mi-token optimizer step gives a balanced-routing mean of \(1.125\,\mathrm{Mi}\) assignments per routed expert. The profiling workload has \(\alpha_P=49.40\%\), a \(2.02\times\) gap, \(N/K=4\), and only \(0.1875\,\mathrm{Mi}\) balanced assignments per routed expert. A profiling result therefore cannot be presented as throughput for the 30-block reference.

Quantity 30-block reference Profiling workload
Blocks and width 30 blocks; first 2 dense, remaining 28 routed; \(d=1536\) 8 blocks; first 2 dense, remaining 6 routed; same width and mixer family
Routed layer \(N=128\), \(K=8\), routed intermediate width 1536, one shared expert \(N=32\), \(K=8\), with the same expert widths and shared branch
Routing and capacity Softmax top-\(K\), normalized route weights, capacity factor 1.25 Same
Sequence and global batch 8192 tokens; 18 Mi tokens per optimizer step 8192 tokens; 0.75 Mi tokens per optimizer step
Configuration-derived size 26.688B total, 2.906B active 2.014B total, 0.995B active
Parallel/precision path EP-MP 8; BF16 rowwise; no PP, CP, TP, TBO, or recompute Same core path, with profiling callbacks and deliberately reduced model and batch
Table 47. 30-block reference and reduced profiling workload at the audited revision. Their different model and batch sizes prevent direct throughput comparison, even though they share the same core execution path.

The Introduction’s wall-time examples came from separate early comparisons in Megatron-LM and legacy Olmo-core. Their complete software and hardware environments have not been reconstructed. They therefore illustrate the observed slowdown that motivated this work, but do not provide a matched cross-framework benchmark.

For the profiling workload, the default rank microbatch is three sequences (24,576 tokens). The 0.75-Mi-token global batch yields four accumulation microbatches on one eight-GPU node and one on the 32-GPU pool. The profiling callbacks, reduced layers/experts, and smaller batch are profiling-specific; the BF16 rowwise routed-token path, EP-MP degree, lack of PP/CP/TP/TBO/recompute, and FP32 gradient and optimizer policy are shared with the 30-block reference.

B.5 Captured Submission-Regime Profiles

Section 8.1 describes two submission regimes: a host wait inside every routed block that holds the CPU and GPU in lock step, and a synchronization-free path in which the CPU runs ahead of the device. Figure 74 shows one captured Nsight Systems timeline for each regime, and Figure 75 magnifies their GPU kernel rows.

Figure 74: Captured timelines show the two submission regimes
(a) Synchronized EP8 path.
Figure 74: Captured timelines show the two submission regimes
(b) Rowwise EP8 path.
Figure 74. Captured timelines show the two submission regimes. Both Nsight Systems profiles run the same eight-layer development model (128 routed experts, top-8, one shared expert, EP8, BF16, two sequences per rank microbatch) on eight B300 GPUs; only the expert-parallel path differs. This capture predates and differs from the reduced profiling workload of Table 46. In the synchronized trace (a), the per-block host wait appears as cudaEventSynchronize in the CUDA API lane, the CPU and GPU ranges of each forward block stay in lock step, and the GPU kernel rows show recurring gaps. In the rowwise trace (b), no host wait interrupts submission: the CPU finishes submitting the microbatch while the GPU is still executing earlier work, and the GPU-side forward blocks run back to back. Each panel is one captured instance of one rank; the two traces are separate runs, so this figure illustrates the submission mechanism rather than a controlled throughput comparison.
Figure 75: Magnified GPU kernel rows of the two captures
(a) Synchronized EP8 path.
Figure 75: Magnified GPU kernel rows of the two captures
(b) Rowwise EP8 path.
Figure 75. Magnified GPU kernel rows of the two captures. Each strip crops the CUDA HW utilization band and its two All-Streams kernel rows from the corresponding panel of Figure 74, over an equal-width sub-window of each timeline. In the synchronized capture (a), the utilization band is repeatedly interrupted and the kernel rows show recurring idle gaps where the device waits for host submission. In the rowwise capture (b), the band is continuous and the kernel rows are densely packed. The two strips come from separate runs whose timeline zoom levels differ, so bar widths are not comparable across panels; the crops illustrate the submission mechanism, not a throughput measurement.

B.6 Verifying the Sync-Free Path

To check the sync-free property described in Section 8.5, we inspect the executed timeline. A qualifying steady-state trace contains no blocking D2H call and no submission-bound idle interval, which is what the captured pair in Figures 74 and 75 shows for the rowwise path. Step time alone cannot identify a submission problem. A useful profile reports CPU API and framework time, GPU kernel and communication time, the distance from CPU launch to GPU start, GPU idle intervals, blocking D2H calls, and end-to-end tokens/s, aligned at both the kernel level and larger NVTX ranges such as a transformer block or microbatch. PyTorch provides an experimental synchronization debug mode, but its coverage is incomplete for distributed and sparse operations; it is an audit aid rather than a substitute for a timeline (PyTorch Contributors 2026g).

A standalone single-GPU grouped-linear microbenchmark from the MXFP8 study (Section 11) isolates the submission tax that this checklist is meant to expose. Graph replay appears in this report only as a measuring instrument; the production training path never captures or replays a graph (Section 15.6). Table 48 compares ordinary eager submission with CUDA Graph replay for a locally adapted OLMoE-family benchmark (Muennighoff et al. 2024). Its \(1536\rightarrow3072\) up projection and 16 balanced local expert groups are settings of this single-B300 benchmark, not the published OLMoE configuration. “Prequantized” begins with MXFP8 input; “including Q” also charges the activation-quantization (Q) step. Every number is a speedup over the matching BF16 grouped GEMM.

Prequantized input Including Q
Rows \(M\) Eager Graph Eager Graph
128 0.66× 2.17× 0.34× 2.03×
4,096 0.65× 1.26× 0.32× 1.06×
32,768 1.43× 1.42× 1.21× 1.22×
Table 48. Eager submission can hide the device-level benefit of short MXFP8 expert operations. Each value is the speed of the MXFP8 operation relative to a matching BF16 grouped GEMM at the same \(M\) and submission mode: 1× means equal time, and larger is faster than BF16. Results are from one GPU and one random seed. Eager values use 25-ms warm-up and 100-ms timed windows; graph values replay 32 captured copies with three warm-up and five timed replays. CUDA Graph replay is a warm-cache device-service-time ceiling, not training wall time.

At \(M=128\), the captured device sequence is more than \(2\times\) faster than the BF16 baseline while ordinary eager execution is slower. At \(M=32{,}768\), the eager and graph results converge. The convergence indicates that host submission affects short-operator timings. The eager–graph gap is still not a clean measure of CPU launch time: replay changes the cache regime and excludes graph-launch latency, and the benchmark omits routing, communication, autograd, and the rest of the training step. The relevant end-to-end metric therefore remains eager training wall time.

Removing the split-list round trip is also only one side of the trade-off: direct row movement adds its own route construction, capacity storage, and completion costs. Several experiments examine different parts of that trade-off. The profiled example of Section 5.4 localizes the shorter dispatch-and-combine path, the captured timelines above show the two submission regimes, the microbenchmark isolates the submission tax on short expert operations, and the feasibility point of Table 6 shows one complete operating point without attributing its throughput to a single mechanism.

B.7 Checkpoint-Branched LBL-Coefficient Runs

Figures 45 and 46 derive from archived metric histories of two trajectories of the production pretraining project. The experiment package bundled with this report holds the run manifests with full effective configurations, the merged metric histories and their merge report, and the plotting script.

  • Model. 48 transformer blocks at \(d_{\mathrm{model}}=2048\); block 0 is dense, and each of the 47 MoE blocks uses 64 experts, top-4 selection, sigmoid gating, dropless dispatch, and expert intermediate width 2048; grouped-query attention (Ainslie et al. 2023) with 16 query and 4 key/value heads; dolma2 tokenizer (Allen Institute for AI 2024).

  • Data and batch. OLMo-mix-0625 at sequence length 8,192; global batch 4,194,304 tokens per step.

  • Objective. Instance-granularity LBL without per-layer rescaling; LM-head z-loss \(10^{-5}\); router z-loss disabled. The branched quantity is the LBL coefficient: \(0.05\) on the original trajectory and \(0.005\) on the branch.

  • Optimizer. Skip-step AdamW (Loshchilov and Hutter 2019) at learning rate \(3\times10^{-5}\) with betas \((0.9,0.95)\), weight decay \(0.1\) (zero on embeddings), a warmup–stable–decay schedule (Hu et al. 2024; Hägele et al. 2024) with a 2,000-step warmup, and gradient clipping at norm 1.

  • Execution. HSDP data parallelism with BF16 parameters; FP8 is disabled. These trajectories run the production pretraining stack rather than the expert-parallel paths of this report; the two branches differ only in the LBL coefficient, and no systems claim rests on them.

  • Branch protocol. The branch reloads the original run’s model and optimizer checkpoint at step 17,000 (71.3 billion tokens) and changes only the coefficient. The archive covers steps 1–25,669 of the original run and 17,001–81,084 of the branch. The Section 10 windows compare medians over steps 17,001–17,999 and 24,000–25,669, before the branch’s batch-size transition at step 40,000.

B.8 Batch-Size Warmup Run

This subsection records the training run behind Figure 66 in Section 16.

  • Model. 24 transformer blocks; 48 routed experts with top-4 selection and one shared expert; 3.21B active and 23.10B total parameters.

  • Batch schedule. The global batch increases through 1, 2, 3, 6, 9, 15, and 24 Mi tokens over approximately 2.07 trillion training tokens; the later transitions fall near 409B, 777B, and 1.375T cumulative tokens.

  • Learning rate. Square-root batch scaling (Equation 63 with \(\alpha=\tfrac{1}{2}\)) applied at each batch increase.

  • Optimizer. Skip-step AdamW with betas \((0.9,0.95)\) and weight decay \(0.1\), zero on embeddings, normalization weights, and the LM head; Muon is disabled.

  • Provenance. The figure stitches 26 run segments of one training campaign from its archived metric histories; at every overlapping step the newest segment’s value is retained. The artifact bundled with this report contains the raw exported metric histories, a per-segment run manifest, the stitched and plotted series, and the scripts that regenerate the figure from the archive alone.

  • Scope. The bundle preserves metric histories and figure provenance. The optimizer settings above come from the run’s training recipe as committed during the campaign; the serialized run configurations of the underlying segments are not re-audited here.

B.9 Experiment Artifact Contents

The following fields describe the configuration and evidence relevant to replicating a run. They define how this report describes its experiment records, not a claim that every archived artifact contains every field. Availability is stated with each experiment.

  • Provenance. Repository and dependency revisions, patch/diff, command, run name, and configuration after all overrides;

  • Model and workload. Total and active parameters, layers, mixers, experts, top-\(K\), shared experts, capacity/drop policy, sequence, local/global useful batch, and random seeds;

  • Topology. Nodes/GPUs and DP, CP, EP-DP, EP-MP, PP, VPP, microbatch, accumulation, and schedule;

  • Precision and layout. Parameter, activation, accumulation, reduction, optimizer, communication, cache, and checkpoint dtypes and layouts;

  • Environment. GPU clocks/power mode, driver/toolkit, activated software versions, NCCL/NVSHMEM interfaces and HCAs, compiler/cache controls, and relevant non-secret environment;

  • Measurement protocol. Data-prewarm, compile, symmetric-pool prewarm, warmup, measured steps, repetitions, synchronization points, exclusions, and failure/retry policy;

  • Raw outputs. Raw logs, rank-level metric tables, profiler captures, allocator traces, checkpoint metadata, and plotting scripts.

The effective serialized configuration, rather than the command string alone, determines the realized topology and workload after command-line overrides.

B.10 Production-Throughput Run Details

This subsection is the run-level companion to Table 30. All rows use sequence length 8192, top-4 routing, and one shared expert. The main table selects one random-routing systems reference per operating point; the tables below preserve the learned-routing companions and the alternate batches and topologies. A tracking-system status of “crashed” for these short systems runs can reflect manual termination after the desired observations and is not, by itself, evidence that training failed.

Configuration Model Batch and scale Parallel
topology
Numeric/runtime
path
Tiny-64E, no EP 16 layers; 64 routed experts; 1.59B active, 12.91B total GBS 8 Mi; rank microbatch 65,536; 2 nodes, 16 B300s 16 / 16 / 1 / 1 BF16; no recompute; local expert execution
Tiny-64E, EP8 Same model as Tiny-64E, no EP GBS 8 Mi; rank microbatch 65,536; 2 nodes, 16 B300s 16 / 2 / 8 / 1 BF16; rowwise NVSHMEM; no recompute
Small-64E, 24 Mi 32 layers; 64 routed experts; 4.29B active, 40.86B total GBS 24 Mi; rank microbatch 24,576; 16 nodes, 128 B300s 128 / 16 / 8 / 1 BF16; rowwise NVSHMEM; no recompute
Small-64E, 16 Mi Same Small-64E model GBS 16 Mi; rank microbatch 16,384; 16 nodes, 128 B300s 128 / 16 / 8 / 1 BF16; rowwise NVSHMEM; no recompute
Medium-64E 39 layers; 64 routed experts; 7.37B active, 70.22B total GBS 16 Mi; rank microbatch 16,384; 16 nodes, 128 B300s 64 / 8 / 8 / 2 BF16; rowwise NVSHMEM; no recompute
Medium-96E 39 layers; 96 routed experts; 7.38B active, 103.75B total GBS 24 Mi; rank microbatch 16,384; 16 nodes, 128 B300s 64 / 8 / 8 / 2 BF16; rowwise NVSHMEM; no recompute
Medium-128E 39 layers; 128 routed experts; 7.38B active, 137.27B total GBS 24 Mi; rank microbatch 16,384; 16 nodes, 128 B300s 32 / 4 / 8 / 4 BF16; rowwise NVSHMEM; no recompute
Large-128E, PP4 47 layers; 128 routed experts; 15.14B active, 295.99B total GBS 32 Mi; rank microbatch 8192; 64 nodes, 512 B300s 128 / 16 / 8 / 4 BF16; rowwise NVSHMEM; no recompute
Large-128E, PP8 Same Large-128E model GBS 24 Mi; rank microbatch 8192; 64 nodes, 512 B300s 64 / 8 / 8 / 8 BF16; rowwise NVSHMEM; no recompute
Ultra-128E 63 layers; 128 routed experts; 58.36B active, 1.200T total GBS 64 Mi; rank microbatch 8192; 64 nodes, 512 B300s 64 / 8 / 8 / 8 MXFP8 attention and MLP compute; rowwise NVSHMEM; per-layer recompute
Ultra-256E 63 layers; 256 routed experts; 58.41B active, 2.380T total GBS 64 Mi; rank microbatch 16,384; 64 nodes, 512 B300s 64 / 2 / 32 / 8 MXFP8 attention and MLP compute; DeepEP v2; per-layer recompute
Table 49. Resolved configuration matrix for the production-throughput runs. GBS and rank microbatch are useful tokens; Mi denotes \(2^{20}\). The topology column reports dense-DP / expert-DP / EP / PP degrees. The serialized run configuration, not a subsequently edited local recipe, is authoritative.
Configuration Routing TFLOP/s
/GPU
Observation and use
Tiny-64E, no EP Learned 895 Began near 870 and stabilized after roughly 100 steps; learned-routing companion
Tiny-64E, no EP Random 903 Headline; random-routing curve was nearly stable from the first step
Tiny-64E, EP8 Learned 820 Began near 799, then stabilized; learned-routing EP8 run with no random-routing pair
Small-64E, 24 Mi Learned 768 Learned-routing companion
Small-64E, 24 Mi Random 841 Headline
Small-64E, 16 Mi Random 821 Alternate smaller GBS and rank microbatch; not a repeat of the 24-Mi run
Medium-64E Random 853 Headline
Medium-96E Random 855 Headline
Medium-96E Random 781 Repeat with identical resolved configuration; not selected
Medium-96E Random 740 Repeat with identical resolved configuration; not selected
Medium-128E Random 843 Headline
Medium-128E Random 792 Repeat with identical resolved configuration; not selected
Large-128E, PP4 Random 768 Headline
Large-128E, PP8 Random 757 Alternate PP8 and 24-Mi GBS; not a repeat of the headline run
Ultra-128E Random 858 Headline
Ultra-256E Random 689 Headline short-run observation; nine steps and no stabilized plateau
Table 50. Run observations and headline-selection record. Throughput values are representative observations from the runs’ throughput curves (for the nine-step Ultra-256E run, its best observed step), not arithmetic means across repeated launches. “Headline” identifies the random-routing value carried into Table 30.

Slower repeat launches of the Medium-96E and Medium-128E configurations appear in Table 50 but are omitted from the headline selection. Environmental problems were suspected, but the specific cause was not established. The headline table reports the highest rate observed for each configuration, which is neither a repetition mean nor an estimate of the hardware limit.

B.11 Metrics Track Useful Work, Time, and Memory

Table 51 defines the quantities used to compare useful work, time, and memory. Each experiment specifies which metrics and supplemental diagnostics were retained; a definition here does not imply that the quantity was measured in every run.

Metric Definition
Steady-state step time Wall time from the start of an optimizer step’s first forward to completion of optimizer update and required cache refresh, after declared startup/warmup. Depending on the retained samples, summaries may include median, mean, standard deviation, and tails
Useful tokens/s/GPU Global non-padding tokens contributing to the normalized loss per measured step, divided by synchronized step time and GPU count; capacity-dropped routes are a separate quantity rather than silently removed
Useful-model MFU Useful active-model FLOPs divided by elapsed time, GPU count, and the stated per-GPU compute peak. Sections 2 and 14 use the B300 dense BF16 peak of 2250 TFLOP/s/GPU for every row, including MXFP8, and label this common BF16-reference normalization explicitly. It is not utilization of the FP8 peak. Recompute and inactive experts add no useful FLOPs to the numerator
D2H route-shape wall time Count and duration of host waits/copies causally between router metadata production and dependent dispatch/compute launches, plus the corresponding CPU launch gap and GPU idle interval from the same timeline
Communication exposure Dispatch/combine or weight/gradient communication time not hidden by useful compute, with bytes, primitive, process group, and forward/backward scope identified
Route/drop statistics Offered and accepted assignments, total and per-source drop rate, per-expert load distribution, capacity utilization, and rank skew
Peak device memory Maximum allocated and reserved bytes per rank after a declared reset point. Supplemental diagnostics, where recorded, give max/median ranks and whether compiler/graph memory pools, symmetric pools, derived caches, and checkpoint staging were allocated at reset and remained allocated through the measured window
Lease high-water Maximum concurrently checked-out saved-payload slots by block/payload/pipeline part. A schedule-derived prediction and transient shared scratch usage are separate diagnostics where available
Checkpoint peak/time Pre-save and peak allocated/reserved bytes, and elapsed save or load time. Supplemental diagnostics include bytes written/read, retries, and caches allocated at the measurement boundary, where recorded
Scaling efficiency Measured useful throughput relative to the declared one-node or smallest valid topology reference under a stated strong/weak-scaling batch rule; rank variance is a supplemental diagnostic where recorded
Table 51. Metric definitions for quantitative comparisons in this report. Profiler queries and calculation scripts are part of the corresponding experiment artifact when available.

For an optimizer step with \(F_{\mathrm{step}}\) useful model FLOPs, elapsed time \(T_{\mathrm{step}}\) in seconds, and \(G\) GPUs, the report uses \[ \mathrm{MFU}_{\mathrm{BF16\mbox{-}ref}} = \frac{F_{\mathrm{step}}} {G\,T_{\mathrm{step}}\,C_{\mathrm{BF16}}}, \qquad C_{\mathrm{BF16}}=2.25\times10^{15}\ \mathrm{FLOP/s} \quad\text{per B300 GPU}. \tag{95} \] This is the dense BF16 Tensor Core peak, not NVIDIA’s doubled 2:4-sparse peak (NVIDIA 2026q); selecting a subset of experts does not make their weight matrices 2:4 sparse. The numerator counts active-model work, excluding activation recomputation, while elapsed time includes the complete step. We retain this BF16 reference for MXFP8 runs so the normalization is consistent; those values are not utilization of the FP8 peak.

Search the full report

Search across sections, appendices, and references.

    Enter a term to find passages. Esc closes search.