Pidoku

Seven Levels of Scale

Module 10 Lesson 10.b 40 min Difficulty 3/5

Prerequisites 01, nvidia-hardware 04, nvidia-hardware 06

The idea in one minute#

AI hardware comes in nested sizes, each roughly ten times the power of the one inside it:

  1. Die: one piece of silicon.
  2. Package: what we call “a GPU” (one or two dies plus HBM).
  3. Node: a server, typically 8 GPUs on NVLink.
  4. Rack: an NVL72 or TPU cube, the largest fast (scale-up) domain.
  5. Pod: a few to a few dozen racks on one network fabric.
  6. Cluster: tens of thousands of accelerators in one building.
  7. Campus: several buildings, hundreds of thousands to a million chips, approaching gigawatts.

Every workload has a smallest level that can hold it (memory) and a smallest level that can finish it in time (compute). Pick the larger of the two, and try to keep each tightly coupled part of the work inside one fast domain. Checked on 16 October 2026.

A picture#

SEVEN LEVELS OF SCALE · FROM ONE DIE TO A GIGAWATT CAMPUSNVIDIA Blackwell/Rubin numbers as the worked example · checked 16 Oct 2026Die · ~0.5 kW~0.5 kWL1 · DieACCELERATORS1 compute dieFAST MEMORYtens of MB SRAMLINKS INSIDEon-die wiresGOOD FORone kernel, one tileat a timePackage (GPU) · 1-2 kW1-2 kWL2 · Package (GPU)ACCELERATORS1 GPU, 2 diesFAST MEMORY192-288 GB HBMLINKS INSIDEdie-to-die 10 TB/s;HBM 8-22 TB/sGOOD FORserve a 70B model;LoRA fine-tuneNode · ~14 kW~14 kWL3 · NodeACCELERATORS8 GPUs (HGX)FAST MEMORY1.5-2.3 TBLINKS INSIDENVLink 1.8 TB/s perGPUGOOD FORserve 400B-class atFP8; full fine-tuneof 70BRack · 120-200 kW120-200 kWL4 · RackACCELERATORS72 GPUs (NVL72)FAST MEMORY13-21 TBLINKS INSIDENVLink, 130-260 TB/sin allGOOD FORservetrillion-parameterMoE; RLPod · 1-2 MW1-2 MWL5 · PodACCELERATORS~576-1,152 GPUsFAST MEMORY~100-300 TBLINKS INSIDE800G-1.6T per GPU,one fabric tierGOOD FORpretrain mid-sizemodelsCluster · 15-150 MW15-150 MWL6 · ClusterACCELERATORS10k-100k GPUsFAST MEMORYPBs of HBMLINKS INSIDEmulti-tier Clos,rail-optimisedGOOD FORfrontier pretrainingCampus · 0.3-2 GW0.3-2 GWL7 · CampusACCELERATORS100k-1M+ chipsFAST MEMORYtens of PBLINKS INSIDEbuildings and siteslinked(scale-across)GOOD FORseveral frontierruns at onceBar height: power, on a log scale. Each level is roughly 10x the one before.The jump that matters most is between L3 and L4: inside a rack every GPU reaches every other over NVLink; beyond it, traffic drops tothe network at ~1/18 of the bandwidth. Choose the level whose fast domain holds your model's weights and its parallelism. 
The seven levels, with NVIDIA Blackwell and Rubin parts as the worked example. Bar height is power on a log scale.

How it really works#

What changes at each step#

StepWhat joins the partsBandwidth per GPUWhat breaks if you cross it carelessly
Die → packagedie-to-die link (10 TB/s on Blackwell)above HBMnothing visible to software
Package → nodeNVLink through NVSwitch0.9-1.8 TB/sPCIe-only servers drop to 64 GB/s
Node → rackNVLink switch trays (NVL72)same as in the nodeon HGX, this step is already the network
Rack → podscale-out NICs, leaf switches50-200 GB/stensor and expert parallelism
Pod → clusterspine switches, more tierssame per GPU, more contentionjob placement, congestion
Cluster → campuslong-haul optics between buildingsfar less per GPUanything but data parallelism and pipelining

The most important boundary is the edge of the scale-up domain: inside it, GPUs share memory semantics at NVLink speed; outside it, they exchange messages at a tenth of the bandwidth or less. On HGX servers that edge is at 8 GPUs; on NVL72 at 72; on a TPU pod, the torus extends to 9,216 chips but with more hops.

Matching parallelism to levels#

ParallelismCommunicatesBelongs at
Tensor (split each matrix)every layer, largeinside a node or rack
Expert (MoE)every MoE layer, all-to-allinside a rack
Pipeline (split the layers)activations between stages, smallacross racks
Data (replicate, average gradients)once per step, large but overlappableacross racks, pods, the cluster
Across sitesrarelycampus, with special techniques

A frontier pretraining run nests all of them: tensor and expert inside each rack, pipeline across a few racks, data parallelism across the cluster.

Power is the real limit#

Each level up is about 10x the power. A single NVL72 rack (120-200 kW) is already more than most older data-center halls can feed per rack; a cluster of 100,000 GPUs needs 150 MW or more; the campuses announced by several labs for 2026-28 are measured in gigawatts. Long before money runs out, grid connections, transformers and cooling water set the scale (8.c).

Code#

For each workload, find the smallest level whose memory holds it and the smallest that finishes it within a deadline, and report the larger.

Go
// levels.go — the smallest level of scale that holds a job and finishes it in time.
package main

import (
	"fmt"
	"math"
)

type Level struct {
	Name string
	GPUs float64
}

func main() {
	levels := []Level{{"package (1 GPU)", 1}, {"node (8)", 8}, {"rack (72)", 72},
		{"pod (576)", 576}, {"cluster (16k)", 16384}, {"cluster (100k)", 100000}}
	const (
		memPerGPU  = 288.0   // GB, B300-class
		flopPerGPU = 2.25e15 // dense BF16, B200-class
		mfu        = 0.4
	)
	jobs := []struct {
		Name     string
		MemGB    float64 // total memory the job needs
		FLOP     float64 // total work (0 for serving: sized by memory)
		Deadline float64 // days
	}{
		{"serve 8B BF16, 32 users × 8k", 16 + 32*8192*131072/1e9, 0, 0},
		{"serve 70B FP8, 64 users × 32k", 70 + 64*32768*163840/1e9, 0, 0},
		{"serve 1T MoE FP8 + 2 TB KV", 1000 + 2000, 0, 0},
		{"full fine-tune 70B, 2B tokens", 70e9 * 16 / 1e9 * 1.3, 6 * 70e9 * 2e9, 2},
		{"pretrain 70B on 15T tokens", 70e9 * 16 / 1e9 * 1.5, 6 * 70e9 * 15e12, 60},
		{"pretrain 1T MoE (40B active), 30T", 1e12 * 16 / 1e9 * 1.5, 6 * 40e9 * 30e12, 90},
	}
	fmt.Println("job                                  needs GPUs (mem)  (time)   smallest level")
	for _, j := range jobs {
		byMem := math.Ceil(j.MemGB / (memPerGPU * 0.85))
		byTime := 0.0
		if j.FLOP > 0 {
			byTime = math.Ceil(j.FLOP / (flopPerGPU * mfu * j.Deadline * 86400))
		}
		need := math.Max(byMem, byTime)
		lvl := "beyond one campus"
		for _, l := range levels {
			if need <= l.GPUs {
				lvl = l.Name
				break
			}
		}
		fmt.Printf("%-36s %10.0f %9.0f   %s\n", j.Name, byMem, byTime, lvl)
	}
}

The KV-cache terms use 131,072 bytes per token for the 8B model (BF16, 32 layers, 8 KV heads) and 163,840 for the 70B (FP8, 80 layers). Notice which column decides each row: serving is sized by memory, training by the deadline. Both pretraining runs need over a thousand GPUs to meet their deadlines, although their weights and optimizer state would fit in one or two racks.

Remember this#

  • Seven levels: die, package, node, rack, pod, cluster, campus; each about 10x the power.
  • The edge of the scale-up domain (8 GPUs on HGX, 72 on NVL72) is the boundary that matters most.
  • Put tensor and expert parallelism inside the domain; pipeline and data parallelism across it.
  • Serving is usually sized by memory, training by compute and a deadline.
  • At the top, power and buildings, not chips, set the limit.

Try it#

  1. Run levels.go. Halve the pretraining deadline for the 70B model. Which level does it need now?
  2. Change memPerGPU to 80 (H100). Which serving jobs move up a level?
  3. A 405B dense model at FP8 must serve 128 users at 16k context. Add it as a row (126 layers, 8 KV heads, head dimension 128).

Check yourself#

  1. Which boundary between levels matters most, and why?
  2. Why does expert parallelism belong inside a rack?
  3. Why is a training job usually sized by its deadline rather than its memory?
  4. What limits the top two levels more than chip supply does?

Sources#

↑↓ navigate↵ openesc close

100% drag to pan · scroll or pinch to zoom · double-click to zoom in