Skip to content
All research

1.84×

the H200's KV cache on an MI300X with 70 GB of weights loaded, from 1.36× the memory

Hardware, July 2026

MI300X against H200.

One AMD Instinct MI300X against one NVIDIA H200, inference and training, on the same vLLM and PyTorch versions.

What we found

  • There is no single winner

    The result splits by whether the model plus its KV cache fits in 141 GB.

  • The H200 wins from the lower paper specification

    The MI300X leads on paper on every axis. Measured, the H200 sustains 1.25× the BF16 GEMM, 1.22× the FP8 GEMM and 1.11× the memory bandwidth. The cause is achieved efficiency.

  • Memory turns it around at 70B

    Both hold 70 GB of FP8 weights. Weights are a fixed subtraction, so a 1.36× memory advantage becomes a 1.84× KV cache advantage. Beyond roughly 11 concurrent full-length requests the H200 is oversubscribed: requests queue and preempt, throughput falls and time to first token rises.

  • The largest model does not run on the H200

    Llama 3.3 70B in BF16 is 141 GB of weights. The weights fit on the H200. Allocating KV cache afterwards does not.

  • Neither GPU throttles

    Over 30 minutes of continuous load, 8B at concurrency 64, the MI300X held 99.2% of its peak and the H200 99.7%.

The results

Who won what

Neither wins outright. The H200 leads on smaller work and at low load; the MI300X takes over when the 70B model and its cache crowd the H200's memory.

MI300X leadsH200 leads
  • Mixture-of-experts decode, concurrency 1

    2.72×
  • Dense 8B, prefill-heavy, concurrency 256

    2.06×
  • Dense 8B, balanced, concurrency 256

    1.40×
  • Dense 8B, single stream

    Tie, 1.02×
  • Dense 70B FP8, single stream

    1.12×
  • Dense 70B FP8, balanced, concurrency 128

    1.14×
  • Dense 70B FP8, decode-heavy, concurrency 256

    1.08×
  • Dense 70B BF16 (141 GB weights)

    H200 cannot load it

    only one
  • Training, 8B, BF16

    1.32× to 1.40×

    1.40×

On paper, and measured

The MI300X leads every line of the data sheet. Measured, the lead flips to the H200 on all three that were tested.

MI300X leadsH200 leads

On paper

  • BF16 dense

    1,307.4 TFLOP/s against 989.4 TFLOP/s

    1.32×
  • FP8 dense

    2,614.9 TFLOP/s against 1,978.9 TFLOP/s

    1.32×
  • HBM bandwidth

    5.3 TB/s against 4.8 TB/s

    1.10×
  • Capacity

    192 GB against 141 GB

    1.36×

Measured, best sustained

  • BF16 GEMM

    619.4 TFLOP/s against 772.9 TFLOP/s

    1.25×
  • FP8 GEMM

    1,078.8 TFLOP/s against 1,313.8 TFLOP/s

    1.22×
  • HBM bandwidth

    4,012.7 GB/s against 4,464.8 GB/s

    1.11×

Throughput as the load rises

Level at one stream, then the gap opens. Llama 3.1 8B, 1k tokens in and 1k out.

MI300XH200

02,0004,0006,0008,00010,00012,000tok/sH200MI300X1MI300X 195H200 1994MI300X 603H200 7618MI300X 1,137H200 1,44516MI300X 2,066H200 2,67432MI300X 3,443H200 4,48664MI300X 4,956H200 6,806128MI300X 7,022H200 9,937256MI300X 8,085H200 11,337Concurrent requests, on a log scale

How many long requests fit

Both hold 70 GB of FP8 weights, and what is left is cache. Past its count a GPU queues and preempts.

Concurrent requests of 16k tokens that the KV cache can hold, on Llama 3.3 70B FP8.

  • MI300X 20.45, from 102.25 GiB of cache

  • H200 11.12, from 55.60 GiB of cache

From the vLLM server logs on each machine, at identical settings: --max-model-len 16384 and --gpu-memory-utilization 0.90. A production H200 deployment would reduce context length to compensate, at a cost in capability rather than throughput.

First-token wait, training and energy

The MI300X's widest measured lead is the wait for a first token on the 70B at concurrency 256. Training and energy go to the H200.

MI300XH200

  • First token at p99, 1k in, 1k out

    Llama 3.3 70B FP8, concurrency 256. Shorter is better.

    MI300X 5.5× sooner

    MI300X 26.3 s
    H200 145.6 s
  • First token at p99, 1k in, 8k out

    Llama 3.3 70B FP8, concurrency 256. Shorter is better.

    MI300X 62.9× sooner

    MI300X 35.0 s
    H200 2,200.5 s
  • Training, eager

    8B, BF16, tokens per second

    H200 1.32× faster

    MI300X 5,101.6
    H200 6,707
  • Training, compiled

    8B, BF16, tokens per second

    H200 1.40× faster

    MI300X 5,603.3
    H200 7,821.6
  • Tokens per joule

    8B, 1k in and 1k out, concurrency 256

    MI300X 10.78
    H200 16.37
Every numberThe winners, the data sheets, the KV cache and the full load sweep as tablesShow
WorkloadWinnerMargin
Mixture-of-experts decode, concurrency 1H2002.72×
Dense 8B, prefill-heavy, concurrency 256H2002.06×
Dense 8B, balanced, concurrency 256H2001.40×
Dense 8B, single streamTie1.02×
Dense 70B FP8, single streamH2001.12×
Dense 70B FP8, balanced, concurrency 128MI300X1.14×
Dense 70B FP8, decode-heavy, concurrency 256MI300X1.08×
Dense 70B BF16 (141 GB weights)MI300XH200 cannot load it
Training, 8B, BF16H2001.32× to 1.40×
SpecificationMI300XH200Paper advantage
BF16 dense1,307.4 TFLOP/s989.4 TFLOP/sMI300X 1.32×
FP8 dense2,614.9 TFLOP/s1,978.9 TFLOP/sMI300X 1.32×
HBM bandwidth5.3 TB/s4.8 TB/sMI300X 1.10×
Capacity192 GB141 GBMI300X 1.36×
Measured best sustainedMI300XH200Actual result
BF16 GEMM619.4 TFLOP/s772.9 TFLOP/sH200 1.25×
FP8 GEMM1,078.8 TFLOP/s1,313.8 TFLOP/sH200 1.22×
HBM bandwidth4,012.7 GB/s4,464.8 GB/sH200 1.11×
Available KV cacheKV cache tokensMax concurrency at 16k tokens
MI300X102.25 GiB335,04020.45×
H20055.60 GiB182,17611.12×
ConcurrencyMI300X, tok/sH200, tok/sH200 ratioMI300X, ms per tokenH200, ms per token
11951991.02×4.995.00
46037611.26×6.455.21
81,1371,4451.27×6.735.46
162,0662,6741.29×7.425.87
323,4434,4861.30×9.077.00
644,9566,8061.37×12.649.21
1287,0229,9371.42×18.0012.59
2568,08511,3371.40×30.9721.55

At concurrency 1 all three 8B request shapes are within 2%, so on this model the gaps are throughput-under-load gaps. Busy-window power at concurrency 256 was 750.3 W on the MI300X and 692.7 W on the H200.

How we ran it

Machines
One MI300X on a DigitalOcean GPU droplet, 191.7 GiB HBM3, 750 W limit. One H200 on Nebius, 140.4 GiB HBM3e, 700 W limit, MIG disabled.
Software
vLLM 0.26.0 and PyTorch 2.11.0 on both sides. The intended difference is ROCm against CUDA.
Numbers
164 serving data points, 0 dropped for missing telemetry. All figures are medians or percentiles over a fixed grid with 1 Hz telemetry attached. None are best-of-N.

Limits

A virtual function
The MI300X is an SR-IOV virtual function, not bare metal. It presents 304 CUs, 192 GB, SPX/NPS1 and the full 750 W limit, and sustains 100% utilization at 750 W, so it behaves as a whole GPU. Virtualization overhead cannot be excluded, and the H200 is not virtualized the same way. This is the largest caveat.
Different providers
So different host CPUs, RAM, kernels (Ubuntu 26.04 against 24.04) and storage.
One of each
One sample of each GPU. Unit-to-unit variation is not characterised.
Software
Holding vLLM and PyTorch constant removes the framework variable but not the compiler, kernel-library and driver variable. That difference is part of what is measured.
FP8 is not bit-identical
Both GPUs load one shared BF16 checkpoint and derive their own native FP8, because they implement different encodings. On 16 fixed prompts, 3 matched exactly at FP8 against 10 at BF16, and FP8 diverges 4.7× further on mean logprob.
Reduced grids
Concurrency grids are reduced for the large models. Every sweep records the grid it used.
Training
Throughput is not time to convergence. A stack can be fast per step and converge worse.
Not measured
Several GPUs. Nothing here speaks to scaling, collectives or interconnect.

Read the methodology before quoting these numbers. The full report has the microbenchmarks, the mixture-of-experts model, vendor tuning, training and the corrections made during the study.

Sources

Keep reading

All research
  • 2.9×

    the X2 Elite's GPU prefill on the M5, Gemma 3 1B Q4_0. On the CPU, the X2 Elite leads by 1.9×

    Hardware, 27 July 2026

    Apple M5 against Snapdragon X2 Elite

    A MacBook Air against a Qualcomm reference board on AI work: CPU, GPU and NPU, inference and training, with the same llama.cpp release and byte-identical weights.

  • About 7×

    the GPU matmul of a Dimensity 9500s on a Snapdragon 8 Elite

    Hardware, 13 and 27 July 2026

    Snapdragon 8 Elite against Dimensity 9500s

    What unprivileged code can do for AI on two flagship phone chips: NPU, CPU, GPU and on-device training.

  • 9 of 9

    models were fastest with NPU prefill

    OpenWeights, 2 to 4 November 2026

    Prefill and decode on CPU, GPU and NPU

    Which processor should prefill and which should decode: nine models, every pairing, on a Snapdragon 8 Elite Gen 5.