← back to archive

July 16, 2026

Benchmarking vLLM on 2× RTX 3090 — Post-NVLink: The Verdict Flips

by Jurgens du Toit

The Post-NVLink Sweep

Axis 1: TTFT — Halved Across the Board

ModelPCIe TTFTNVLink TTFTΔBudget (2500 ms)
qwen3-coder-30b1112 ms415 ms−63%✅ → ✅
qwen36-35b-a3b997 ms412 ms−59%✅ → ✅
qwen3-coder-next-60b-ream1203 ms529 ms−56%✅ → ✅
glm47-flash (†)~1181 ms511 ms−57%✅ → ✅
devstral-24b-gptq3235 ms2013 ms−38%❌ → ✅
qwen36-27b4222 ms2199 ms−48%❌ → ✅

Axis 2: Decode — Uniformly Small Gains

ModelPCIe tok/sNVLink tok/sΔ
qwen3-coder-30b150.6167.7+11.3%
qwen36-35b-a3b136.3148.2+8.7%
qwen3-coder-next-60b-ream118.6128.0+7.9%
glm47-flash (†)~111.0117.5+5.9%
qwen36-27b59.862.7+4.8%
devstral-24b-gptq54.954.2−1.3% (flat)

Axis 3: Maximum Usable Context — The Same Ceilings

ModelPCIe max ctxNVLink max ctxΔ
qwen3-coder-30b256K256K=
qwen3-coder-next-60b-ream256K256K=
qwen36-35b-a3b192K192K=
qwen36-27b192K192K=
glm47-flash (†)192Knew (ran at TP=2 first time)
devstral-24b-gptq128K32K ‡run artifact (timeout stopped probe early)

The Verdict Flips

Post-NVLink: What You’d Actually Deploy

Tier 1 — Daily driver (unchanged):

  • qwen3-coder-30b (TP=2, 168 tok/s, 256K ctx, non-thinking mode)
  • qwen36-35b-a3b (TP=2, 148 tok/s, 192K ctx, multimodal)

Tier 2 — Diversity / fallback (one new member):

  • glm47-flash (TP=2 now possible: 118 tok/s, 192K ctx — first run at TP=2)
  • glm47-flash (single GPU, 107 tok/s, 89K ctx) — still co-locatable
  • qwen3-coder-next-60b-ream (TP=2, 128 tok/s, 256K ctx)
  • gpt-oss-20b-nightly (TP=2, 65 tok/s, 128K ctx)

Tier 3 — Previously dead, now alive:

  • devstral-24b (TP=2, TTFT now 2013ms — under budget!) — still general assistant, not coding specialist
  • qwen36-27b (TP=2, TTFT now 2199ms — under budget!) — still general-purpose, but now runnable

Tier 4 — Still dead:

  • qwen3-coder-next-80b (OOM on 2×24 GB — raw capacity, not interconnect)

Why the Three Axes Behave Differently

What’s Still Open

TL;DR

← more posts