Skip to content

Commit c43c53f

Browse files
committed
fix: apply domain fixes from contributor PRs #1782, #1784
B200/NVL72 TFLOP constants (2x correction per NVIDIA Blackwell datasheet): B200 FP16 dense 2250 → 4500 TFLOPS, NVL72 FP16 162 → 324 PFLOPS, and all derived precision values. Applied to hardware/registry.py (the current location, not the old constants.py that the original PR targeted). Kits hardware spec corrections: Pi Zero 2W is quad-core (not single-core), Pi power specs use proper voltage/amperage format, Nicla Vision memory corrected to 1MB SRAM + 2MB Flash + 16MB external QSPI Flash. Labs fixes: 404.qmd dark-mode selectors (body.quarto-dark), lab_11 FlashAttention MathPeek speedup formula (N/B not M/d), lab_06 tau_opt consistency (MTBF 50 hrs for 1,000 GPUs matches the reveal text and Young-Daly formula). Based on contributions by Shashank-Tripat in PRs #1782 and #1784.
1 parent ebdaede commit c43c53f

9 files changed

Lines changed: 23 additions & 34 deletions

File tree

book/tests/test_units.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ def test_extended_gpu_specs():
346346
ok &= check("V100 TDP", V100_TDP.to(watt).magnitude, 300.0)
347347

348348
# B200
349-
ok &= check("B200 FP16", B200_FLOPS_FP16_TENSOR.to(TFLOPs / second).magnitude, 2250.0)
349+
ok &= check("B200 FP16", B200_FLOPS_FP16_TENSOR.to(TFLOPs / second).magnitude, 4500.0)
350350
ok &= check("B200 BW", B200_MEM_BW.to(TB / second).magnitude, 8.0)
351351
ok &= check("B200 Mem", B200_MEM_CAPACITY.to(GiB).magnitude, 192.0)
352352

book/tools/audit/audit_mlsysim_drift.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@
4141
("h100_fp8", 1979, 0.02, 'Hardware.Cloud.H100.compute.precision_flops["fp8"]'),
4242
("h100_tf32", 494, 0.02, 'Hardware.Cloud.H100.compute.precision_flops["tf32"]'),
4343
("h100_int8", 1979, 0.02, 'Hardware.Cloud.H100.compute.precision_flops["int8"]'),
44-
("b200_fp16", 2250, 0.02, "Hardware.Cloud.B200.compute.peak_flops"),
45-
("b200_fp8", 4500, 0.02, 'Hardware.Cloud.B200.compute.precision_flops["fp8"]'),
44+
("b200_fp16", 4500, 0.02, "Hardware.Cloud.B200.compute.peak_flops"),
45+
("b200_fp8", 9000, 0.02, 'Hardware.Cloud.B200.compute.precision_flops["fp8"]'),
4646
("mi300x_fp16", 1307, 0.02, "Hardware.Cloud.MI300X.compute.peak_flops"),
4747

4848
# GPU memory (GiB, GB/s, TB/s)

kits/contents/platforms.qmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ The Nicla Vision exemplifies professional-grade embedded vision systems built ar
131131
STM32H747 dual-core ARM Cortex-M7/M4 running at 480MHz
132132

133133
**Memory Hierarchy:**
134-
2MB integrated RAM and 16MB Flash storage
134+
1MB integrated SRAM and 2MB Flash storage, plus 16MB external QSPI Flash
135135

136136
**Integrated Sensors:**
137137
GC2145 camera sensor, MP34DT05 digital microphone, 6-axis IMU

kits/contents/raspi/raspi.qmd

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ Camera modules, power adapters, and SD cards are available from the same reselle
2020

2121
- **Raspberry Pi**: Ensure you have at least one of the boards: the Raspberry Pi Zero 2 W, Raspberry Pi 4 or 5 for the Vision Labs, and the Raspberry 5 for the GenAi labs.
2222
- **Power Adapter**: To Power on the boards.
23-
- Raspberry Pi Zero 2-W: 2.5 W with a Micro-USB adapter
24-
- Raspberry Pi 4 or 5: 3.5 W with a USB-C adapter
23+
- Raspberry Pi Zero 2-W: 5V / 2.5A via Micro-USB adapter
24+
- Raspberry Pi 4: 5V / 3A via USB-C adapter
25+
- Raspberry Pi 5: 5V / 5A via USB-C adapter
2526

2627
- **Network**: With internet access for downloading the necessary software and controlling the boards remotely.
2728
- **SD Card (32 GB minimum) and an SD card Adapter**: For the Raspberry Pi OS.

kits/contents/raspi/setup/setup.qmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ The Raspberry Pi is a powerful and versatile single-board computer that has beco
2828

2929
1. **Raspberry Pi Zero 2 W** (*Raspi-Zero*):
3030
- Ideal for: Compact embedded systems
31-
- Key specs: 1 GHz single-core CPU (ARM Cortex-A53), 512 MB RAM, minimal power consumption
31+
- Key specs: 1 GHz quad-core CPU (ARM Cortex-A53), 512 MB RAM, minimal power consumption
3232

3333
2. **Raspberry Pi 5** (*Raspi-5*):
3434
- Ideal for: More demanding applications such as edge computing, computer vision, and edgeAI applications, including LLMs.

labs/404.qmd

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,6 @@ title: "Page Not Found"
2727
.j404-nav a { color: #555 !important; text-decoration: none !important; }
2828
.j404-nav a:hover { color: #a31f34 !important; }
2929
@media (max-width: 540px) { .j404-wrap { margin-top: 2.5rem; } .j404-joke { font-size: 1.1rem; } }
30-
@media (prefers-color-scheme: dark) {
31-
.j404-joke { color: #f0f0f0; }
32-
.j404-sub { color: #aaa; }
33-
.j404-btn-secondary { background: transparent !important; color: #f0f0f0 !important; border-color: #444; }
34-
.j404-btn-secondary:hover { border-color: #ff6b80 !important; color: #ff6b80 !important; }
35-
.j404-refresh { color: #999; }
36-
.j404-refresh:hover { color: #ff6b80 !important; }
37-
.j404-meta-sep { color: #555; }
38-
.j404-nav { border-top-color: #333; }
39-
.j404-nav a { color: #aaa !important; }
40-
.j404-nav a:hover { color: #ff6b80 !important; }
41-
}
4230
body.quarto-dark .j404-joke { color: #f0f0f0; }
4331
body.quarto-dark .j404-sub { color: #aaa; }
4432
body.quarto-dark .j404-btn-secondary { background: transparent !important; color: #f0f0f0 !important; border-color: #444; }

labs/vol1/lab_11_hw_accel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -975,7 +975,7 @@ def build_part_e():
975975
- **$d$**: head dimension
976976
- **$M$**: SRAM size (on-chip memory per SM)
977977
978-
Speedup $\\approx M / d$, which is 2-4x at typical dimensions. Tiling keeps Q, K, V blocks in SRAM, avoiding the $N^2$ materialization in HBM.
978+
Speedup $\\approx N / B$ (where $B$ is tile size), reaching ~10x at seq\_len=4096, tile=256. Tiling keeps Q, K, V blocks in SRAM, avoiding the $N^2$ materialization in HBM.
979979
""")
980980
}))
981981
return mo.vstack(items)

labs/vol2/lab_06_fault_tolerance.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -612,12 +612,12 @@ def build_part_b():
612612
- 175B parameters x 14 bytes (FP16 weights + FP32 Adam m1 + m2 + master) = **2.45 TB** per checkpoint
613613
- At NFS 1 GB/s aggregate write: 2,450 seconds = **~41 minutes**
614614
615-
With MTBF of ~5 hours (1,000 GPUs), the Young-Daly optimal interval is:
616-
tau_opt = sqrt(2 * 2450 * 18,000) = sqrt(88,200,000) = ~9,393s = ~2.6 hours
615+
With MTBF of ~50 hours (1,000 GPUs, MTTF=50,000 hrs each), the Young-Daly optimal interval is:
616+
tau_opt = sqrt(2 * 2450 * 180,000) = sqrt(882,000,000) = ~29,700s = ~8.2 hours
617617
618-
But wait -- at 1 GB/s NFS, checkpoint write time (41 min) is already a significant
619-
fraction of the optimal interval (2.6 hours). With faster storage (100 GB/s NVMe RAID),
620-
the same checkpoint takes only 24.5 seconds.
618+
At 1 GB/s NFS, checkpoint write time (41 min) is a manageable fraction of the 8.2 hour
619+
optimal interval. With faster storage (100 GB/s NVMe RAID), the same checkpoint takes only
620+
24.5 seconds.
621621
622622
What happens at a larger cluster (10,000 GPUs) where MTBF drops to ~5 hours?
623623
"""))
@@ -756,9 +756,9 @@ def build_part_b():
756756
items.append(mo.callout(mo.md(
757757
"**Correct.** 175B x 14 bytes = 2.45 TB per checkpoint. At 1 GB/s NFS, that is "
758758
"2,450 seconds = ~41 minutes. With MTBF of ~50 hours for a 1,000-GPU cluster, "
759-
"the Young-Daly optimal interval is ~2.6 hours, so 41 minutes is within budget. "
760-
"But at 10,000 GPUs (MTBF ~5 hours), optimal interval drops to ~27 minutes "
761-
"-- now the write time *exceeds* the optimal interval. Checkpoint storm."
759+
"the Young-Daly optimal interval is ~8.2 hours, so 41 minutes is well within budget. "
760+
"But at 10,000 GPUs (MTBF ~5 hours), optimal interval drops to ~2.6 hours "
761+
"-- now the write time (41 min) is a large fraction of the optimal interval."
762762
), kind="success"))
763763
elif partB_prediction.value == "A":
764764
items.append(mo.callout(mo.md(

mlsysim/mlsysim/hardware/registry.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class CloudHardware(Registry):
102102
B200 = HardwareNode(
103103
name="NVIDIA B200",
104104
release_year=2024,
105-
compute=ComputeCore(peak_flops=2250 * TFLOPs / second, precision_flops={"fp8": 4500 * TFLOPs / second, "fp4": 9000 * TFLOPs / second, "int4": 9000 * TOPS}),
105+
compute=ComputeCore(peak_flops=4500 * TFLOPs / second, precision_flops={"fp8": 9000 * TFLOPs / second, "fp4": 18000 * TFLOPs / second, "int4": 18000 * TOPS}),
106106
memory=MemoryHierarchy(capacity=192 * GiB, bandwidth=8 * TB / second),
107107
interconnect=IOInterconnect(name="PCIe Gen5 x16", bandwidth=64 * GB / second),
108108
nvlink=IOInterconnect(name="NVLink 5.0", bandwidth=1800 * GB / second, latency=LATENCY_NVLINK),
@@ -124,12 +124,12 @@ class CloudHardware(Registry):
124124
name="NVIDIA GB200 NVL72",
125125
release_year=2024,
126126
compute=ComputeCore(
127-
peak_flops=162 * PFLOPs / second,
127+
peak_flops=324 * PFLOPs / second,
128128
precision_flops={
129-
"fp16": 162 * PFLOPs / second,
130-
"bf16": 162 * PFLOPs / second,
131-
"fp8": 324 * PFLOPs / second,
132-
"fp4": 720 * PFLOPs / second,
129+
"fp16": 324 * PFLOPs / second,
130+
"bf16": 324 * PFLOPs / second,
131+
"fp8": 648 * PFLOPs / second,
132+
"fp4": 1440 * PFLOPs / second,
133133
},
134134
),
135135
memory=MemoryHierarchy(capacity=13.8 * TB, bandwidth=576 * TB / second),

0 commit comments

Comments
 (0)