← Contents Volume IV · Lecture 9

Volume IV · The Reality of Scale

9

The Utilization Nobody Reaches 100% Of

Lecture 1 quoted a chip's peak FLOPS off a spec sheet, and every lecture since has quietly assumed a training run gets close to using it. It does not. This lecture is the volume's reality check — the gap between advertised hardware compute and the compute a real, days-long training job actually turns into forward-and-backward passes, and the interruptions that gap is partly made of.

The mental model

Model FLOPs Utilization is the ratio of useful compute to peak hardware compute, and even a flagship published run tops out under 50%. The rest is not waste in any simple sense — it is rematerialization, communication, and idle time recovering from hardware failures that a synchronous job cannot just shrug off.

Defining MFU, in the paper that named it

"Model FLOPs Utilization" (MFU) is commonly cited as having been named, as a distinct metric from raw hardware FLOPs utilization, in Chowdhery et al., "PaLM: Scaling Language Modeling with Pathways" (arXiv:2204.02311, Google, 2022). The distinction the paper draws matters: MFU counts only the FLOPs that do useful work toward the model's forward and backward pass — not the extra FLOPs spent recomputing activations that were deliberately discarded to save memory (rematerialization), and not FLOPs spent idle waiting on communication. MFU is defined as (actual useful FLOPs achieved) / (theoretical peak FLOPs of the hardware). A separate, looser number — hardware FLOPs utilization — counts rematerialization FLOPs as "achieved" too, so it is always at least as high as MFU for the same run.

PaLM 540B's own disclosed numbers make the gap concrete: 46.2% MFU counting attention FLOPs (45.7% excluding them), against 57.8% hardware FLOPs utilization including rematerialization — training throughput was 238.3K tokens/sec at batch size 2048. Read that pair of numbers as a waterfall: start from peak hardware FLOPS, subtract everything spent on rematerialization and idle communication to land at hardware FLOPs utilization, then subtract the rematerialization FLOPs themselves to land at MFU — the number that actually describes useful work.

PALM 540B — THE MFU WATERFALL (DISCLOSED FIGURES) peak hardware FLOPS 100% hardware FLOPs util. 57.8% MFU 46.2% gap 1: idle time + communication gap 2: rematerialization FLOPs
Figure 9a Each bar is PaLM 540B's own disclosed figure, not an estimate. The first gap — peak down to 57.8% — is idle and communication time. The second gap — 57.8% down to 46.2% MFU — is FLOPs spent recomputing activations rather than doing new useful work. Even the narrower, more honest number, published as a headline efficiency result by one of the labs best resourced to optimize it, is under half of peak.
Plate 9.1 PaLM 540B's disclosed 57.8%-to-46.2% waterfall from Figure 9a, now with sliders for a hypothetical run's own idle and rematerialization losses — see how much of the gap a run would have to close just to match a flagship lab's own honest number.

Why it's an average that hides an interruption record

A single MFU number, quoted for a whole training run, is already an average over however many days the run took — and large synchronous training jobs are fault- intolerant at the job level: one GPU failure during a synchronous step can force a restart of the whole job, not just a graceful degradation of one worker. So the interruption rate, not the interruption count, is the operative reliability metric — a cluster that fails often but recovers in seconds behaves very differently from one that fails rarely but needs hours to restart from checkpoint.

Meta's Llama 3 paper (arXiv:2407.21783, 2024) discloses exactly this kind of record for a 54-day pretraining snapshot on its 16,384-H100 cluster: 466 total job interruptions, of which 47 were planned or automated maintenance and 419 were unexpected. Of those unexpected interruptions, roughly 78% were attributed to confirmed hardware issues. The largest single category was GPU issues, including NVLink failures, at 148 of 419 (about 30.1%); HBM3 memory failures were the second largest at 72 of 419 (about 17.2%). Despite that volume of interruptions, the paper reports over 90% effective training time — automation handled nearly all of the interruptions, and only 3 of the 466 required manual intervention.

LLAMA 3 · 419 UNEXPECTED INTERRUPTIONS OVER 54 DAYS (DISCLOSED) GPU issues (incl. NVLink) — 148 / 419 (~30.1%) HBM3 memory failures — 72 / 419 (~17.2%) all other causes — 199 / 419 (~47.5%) automation resolved all but 3 of the 466 total interruptions
Figure 9b Bar widths are proportional to the disclosed interruption counts. "All other causes" is the paper's residual category, not a further breakdown Meta itself provides — treat it as one bucket, not several distinct causes.

Read this alongside the MFU waterfall above: a large fraction of the distance between peak hardware FLOPS and a run's realized MFU is not an inefficiency in the matrix multiply itself — it is checkpoint-and-restart time paid every time a GPU, an NVLink link, or a memory module fails mid-run, at a scale where hundreds of such failures over less than two months is the disclosed norm, not an anomaly.

DeepSeek-V3's cost figure, and a number DeepSeek did not publish

DeepSeek-V3 (arXiv:2412.19437, 2024) is a 671B-total-parameter MoE model with 37B active parameters per token, trained on 14.8T tokens. The paper's own disclosed figure for full pretraining cost is 2.788M H800 GPU-hours — about 180K H800 GPU-hours per trillion tokens — and the paper's own cost estimate assumes $2/GPU-hour rental.

A number DeepSeek did not publish, and a number it did

A widely-circulated figure of roughly 21–23% MFU for DeepSeek-V3 has been repeated in commentary about the run. That figure is a third-party analyst derivation from the disclosed GPU-hours-per-token count — DeepSeek's own paper does not state an MFU percentage for this run. Keep the two claims separated: the 2.788M H800 GPU-hour figure is DeepSeek's own disclosure; any MFU percentage attached to it is an outside calculation layered on top, unconfirmed as an official number.

A logbook, not a paper — and why that's a different kind of source

The OPT-175B "Chronicles" logbook (Meta AI, published in the facebookresearch/metaseq GitHub repository as OPT175B_Logbook.pdf) is an unusually candid primary source precisely because it is not a paper — Meta published the raw on-call engineering logbook itself. Secondary summaries of that logbook describe roughly 35 training restarts and 100+ hosts cycled during training, with hardware failures — "a couple of machines going down every day" — described as routine on the roughly 1024-A100 deployment. Those restart and failure counts are worth stating explicitly as pulled from secondary summaries of the logbook rather than independently re-verified against the primary PDF line by line — the honest thing to do before citing an exact number from it elsewhere is to open OPT175B_Logbook.pdf directly rather than trust a summary of a summary.

What each source discloses, and how confidently
SourceWhat it disclosesConfidence
PaLM (arXiv:2204.02311)46.2% MFU, 57.8% hardware FLOPs util., 238.3K tok/sPrimary, paper-stated
Llama 3 (arXiv:2407.21783)466 interruptions / 54 days, cause breakdown, >90% effective timePrimary, paper-stated
DeepSeek-V3 (arXiv:2412.19437)2.788M H800 GPU-hours, $2/GPU-hour assumptionPrimary, paper-stated
DeepSeek-V3 "~21–23% MFU"A derived efficiency estimateThird-party, unconfirmed by DeepSeek
OPT-175B Chronicles logbook~35 restarts, 100+ hosts cycled, daily hardware failuresPrimary source, but figures here are secondary-summary — re-verify against the PDF

The throughline across all four sources is the same: peak hardware FLOPS is a marketing number, hardware FLOPs utilization is a generous accounting number, and MFU is the honest one — and even the honest one, at the flagship-lab level, sits under 50%, with a meaningful share of the shortfall traceable to hardware failing often enough that "how fast does the job recover" is as load-bearing a design question as the matrix-multiply kernel itself.

Read the primary source