Computer vision & ResNet Part 5

Part 5 · 2026

What it costs to train ResNet today

A result that took a research team weeks of cluster time in 2015 is now a same-day errand for about twenty dollars. Plus: how slow is a Mac, really?

An estimate of the compute needed to reproduce ResNet-50 on ImageNet in 2026, what that costs to rent, and how long it would take on Apple Silicon. Background in ResNet.

Headline numbers, for the impatient:

Defining the job

FigureTraining budget calculator

Loading figure. It needs JavaScript; the surrounding text stands on its own without it.

Mac M4 rows are extrapolated from measured M3 throughput, so treat them as accurate to roughly a factor of 1.5. Everything else is a published measurement. CIFAR-scale models carry a utilization penalty because 32x32 batches leave most of the GPU idle, which the measured Mac data shows clearly.

The standard reproduction target is ResNet-50 on ImageNet-1k to about 76% top-1 accuracy:

Quantity Value
Training images 1,281,167
Epochs (standard recipe) 90
Total image passes 115.3 million
ResNet-50 forward pass ~4.1 billion multiply-adds at 224x224 (the paper quotes 3.8)
Forward plus backward ~12.3 billion multiply-adds per image (backward costs about 2x forward)
Total training compute 1.42e18 multiply-adds, equivalently 2.84e18 FLOPs
Dataset on disk ~150 GB (138 GB train, 6.3 GB val) as JPEG

A note on units, since this trips up every comparison. The ResNet paper says ResNet-50 is "3.8 billion FLOPs" and means multiply-adds; most later work says 4.1 GFLOPs and also means multiply-adds, the difference being whether the downsample convolutions and classifier are counted. Neither means true floating point operations, which are 2x higher because a multiply-add is two of them. This note quotes multiply-adds and gives the doubled figure alongside.

For reference, ResNet-152 is about 11.3 billion multiply-adds forward, so the same recipe on the deepest variant is roughly 2.8x this.

Cloud GPUs: about $20 and part of a day

Using NVIDIA's own published mixed-precision throughput for ResNet-50 v1.5, plus independent measurements from QMUL:

Setup Throughput Time for 90 epochs Approx. rate Approx. cost
1x A100 80GB 2,470 img/s ~13 hours $1.30/hr ~$17
1x H100 PCIe 4,110 img/s ~7.8 hours $2.50/hr ~$19
8x A100 (DGX) 16,621 img/s ~1.9 hours $10.50/hr ~$20
8x H100 30,897 img/s ~1.0 hour $20/hr ~$21

The interesting thing about that last column is that it barely moves. Scaling out buys wall-clock time, not savings, because you are purchasing a fixed quantity of arithmetic either way. Parallel efficiency is good enough on this workload (about 6.7x to 7.7x on 8 GPUs) that the cost stays flat. Rental rates vary by a factor of two or three between hyperscalers and spot or community providers, so the honest range is $10 to $50.

For an energy anchor: an MLPerf Training v4.0 submission on 8x H100 SXM hit the accuracy target in 13 minutes 21 seconds, drawing 6.89 kW, for a total of 1.53 kWh. That is about 20 cents of electricity.

Mac M4: grounding the estimate in measured data

Peak FLOPS is the wrong place to start for Apple Silicon, because PyTorch's MPS backend achieves a low fraction of it. Better to anchor on real measurements. Daniel Bourke's Apple Silicon benchmark suite trained ResNet-50 on Food101 (75,750 images at 224x224, fp32, PyTorch 2.1) and published raw per-epoch times, which convert directly to throughput:

Machine GPU cores Seconds per epoch Throughput Implied ImageNet 90-epoch time
M3 10 1,758 43 img/s 31 days
M3 Pro 14 1,153 66 img/s 20 days
M3 Max 30 767 99 img/s 13.5 days
Tesla V100 n/a 581 130 img/s 10 days
TITAN RTX n/a 282 269 img/s 5 days

Two things to note about this data. First, it is fp32, because mixed precision was not usable on MPS at the time of measurement; bf16 on MPS has since improved, which should be worth something like 1.3x. Second, the per-epoch times are nearly flat across batch sizes 32, 64, and 128 on the M3 Max, which suggests the pipeline was at least partly bound by JPEG decode rather than by the GPU. Apple Silicon guidance typically recommends num_workers=0, which makes this worse.

Sanity-checking the measurements against peak

Before extrapolating, it is worth confirming these numbers are physically sensible. At 12.3 billion multiply-adds per training image, or 24.6 GFLOPs:

Machine Achieved Peak FP32 Utilization
M3 (10-core) 1.06 TFLOPS 4.1 TFLOPS 26%
M3 Pro (14-core) 1.62 TFLOPS 5.7 TFLOPS 28%
M3 Max (30-core) 2.43 TFLOPS 10.7 TFLOPS 23%
Tesla V100 3.21 TFLOPS 15.7 TFLOPS 20%
TITAN RTX 6.62 TFLOPS 16.3 TFLOPS 41%

The Apple chips cluster tightly at 23% to 28%, and the V100 is not far off at 20%, which is reassuring: the measurements are consistent with each other and with what a convolutional training workload typically extracts from a GPU. The TITAN RTX outlier at 41% most likely reflects a better-fed data pipeline on that machine. Since Apple Silicon lands in a narrow band, extrapolating by compute ratio at a fixed 25% utilization is defensible.

Scaling to M4

The M4 family's peak FP32 figures:

Chip GPU cores Peak FP32 Memory bandwidth
M4 8 or 10 ~4.3 TFLOPS 120 GB/s
M4 Pro 16 or 20 6.8 to 8.5 TFLOPS 273 GB/s
M4 Max 32 or 40 13.6 to 17.0 TFLOPS 410 or 546 GB/s

Holding utilization at 25% of peak gives the fp32 figure; multiplying by 1.3 for bf16 autocast gives the fast end of each range.

Chip Peak FP32 fp32 estimate bf16 estimate ImageNet, 90 epochs
M4 (10-core) 4.3 TFLOPS 44 img/s 57 img/s 23 to 31 days
M4 Pro (20-core) 8.5 TFLOPS 87 img/s 113 img/s 12 to 16 days
M4 Max (40-core) 17.0 TFLOPS 173 img/s 225 img/s 6 to 8 days

Per epoch, that is roughly 1.6 to 2 hours on an M4 Max, 3 to 4 hours on an M4 Pro, and 6 to 8 hours on a base M4. The bf16 multiplier is the softest assumption in the table; if MPS does not deliver it for your model, use the slow end.

Practical caveats that make it worse

Energy, which is the one place Apple wins

An M4 Max under sustained GPU load draws roughly 50 to 90 W at the wall. Seven days at 70 W is about 12 kWh, or a dollar or two of electricity. A single A100 finishing in 13 hours at 400 W for the GPU alone is around 5 kWh, and more once you count the host. So total energy is within a small factor, and the Mac is not obviously worse on a per-job basis. It just spreads comparable energy over 10 to 15 times the wall-clock time.

Historical comparison

The original 2015 runs used 8 GPUs of the Tesla K40 era, roughly 4 to 5 TFLOPS FP32 each with no tensor cores, for something like two to three weeks per deep model. ResNet-152 under the paper's schedule of 600k iterations at batch 256 works out to about 5.2 exa multiply-adds, or 10.4 ExaFLOPs, roughly 3.7x the ResNet-50 job costed above.

So an M4 Max is in the same league as the entire 8-GPU server that produced the original paper, and a single rented H100 does the ResNet-50 job in under eight hours for the price of lunch. A result that took a Microsoft Research team weeks of cluster time is now a same-day errand.

What you should actually run locally

Reproducing ImageNet on a Mac is a bad use of a week. These are all genuinely practical:

Task M4 Max estimate Base M4 estimate
Fine-tune pretrained ResNet-50 on a custom dataset (~75k images, 5 epochs) ~45 min ~4 hours
ResNet-20 or ResNet-56 on CIFAR-10 from scratch, paper recipe 20 to 40 min each 2 to 4 hours each
ResNet-18 on Imagenette or Imagewoof (10-class ImageNet subsets) 20 to 40 min 1 to 3 hours
ResNet-9 style speedrun on CIFAR-10 to ~94% a few minutes ~20 min

The CIFAR estimates carry a large error bar in the optimistic direction. 32x32 batches leave most of the GPU idle, so the utilization assumption above does not hold; expect to land toward the slow end.

The CIFAR-10 option is the one I would pick to actually learn something from this paper, because it reproduces the interesting experiment rather than the headline one. The degradation result described in The challenge, where a 56-layer plain network has higher training error than a 20-layer one, is a CIFAR-10 experiment. You can train plain-20, plain-56, ResNet-20, and ResNet-56 in an afternoon on a Mac and watch the residual connections fix a failure you produced yourself. That is a far better return on a day of compute than a 76.1% top-1 number you could have downloaded.

If you do want the full ImageNet run, rent one A100 for a day. It costs less than the electricity plus the week of degraded laptop performance.

If you do run it on the Mac anyway

Sources and assumptions

The M4 numbers are extrapolations from M3 measurements at a fixed 25% utilization, not direct measurements, so treat them as accurate to within roughly a factor of 1.5.