← Files Runpod (Official)ARCHIVED FILE

skills/runpod-usage/reference/gpu-selection.md

5.6 KB · Sep 30, 2026 · 23:02 UTC

↓ Download file

# GPU selection

How to pick a GPU: size VRAM to the model first, then choose a tier/pool, then
worry about cloud, availability, and placement.

## Step 1: size VRAM to the model

VRAM is the usual bottleneck. Rough rules:

- **LLM inference (fp16):** ~**2 GB of VRAM per billion parameters**, plus headroom
  for the KV cache / context and activations. A 7B model ≈ ~14 GB, 13B ≈ ~26 GB,
  70B ≈ ~140 GB (needs multiple GPUs).
- **Quantization cuts this a lot.** A 4-bit quantized model needs roughly a quarter
  of the fp16 weight memory — e.g. a 4-bit 70B fits in ~35 GB.
- **Training / fine-tuning** needs far more than inference — weights + gradients +
  optimizer state + activations, often ~4x the inference figure for full fine-tuning.
  LoRA/QLoRA reduce this substantially. Memory bandwidth also matters here.
- **Image models (SDXL, Flux):** ~8 GB minimum, but 16–24 GB gives headroom for
  larger batches and LoRA training.

Always leave headroom above the raw weight size. When unsure, estimate with the
Hugging Face Model Memory calculator (`huggingface.co/spaces/hf-accelerate/model-memory-usage`)
or "Can it run LLM?" (`huggingface.co/spaces/Vokturz/can-it-run-llm`).

## Step 2: which GPU for an N-billion-param LLM (heuristic)

Sizes assume fp16 inference; quantize to drop a tier or two.

| Model size | VRAM (fp16) | Reasonable pick |
|-----------|-------------|-----------------|
| ≤ 7B | ~14 GB | `ADA_24` (RTX 4090) or `AMPERE_24` (L4/A5000/3090) |
| 13B | ~26 GB | `ADA_32_PRO` (RTX 5090) or `AMPERE_48` / `ADA_48_PRO` |
| 30–34B | ~60–70 GB | `AMPERE_80` (A100) or `ADA_80_PRO` (H100) |
| 70B | ~140 GB | 2x 80 GB, or one `HOPPER_141` (H200) / `BLACKWELL_180` (B200) |
| > 70B | 200 GB+ | multi-GPU 80 GB+, or Blackwell / H200 with `gpu_count` > 1 |

## Step 3: GPU tiers and pools

A **GPU pool** groups interchangeable GPUs by VRAM tier. Requesting a pool lets
Runpod pick any available GPU in that tier (better availability); pinning an exact
GPU type gives determinism but can be throttled when supply is tight. Pool names are
used by Serverless configs, the Runpod Hub, flash's `GpuGroup`, and the GraphQL API.

Pool reference (source of truth: `skills/flash/reference/api.md`):

| Pool | GPUs | VRAM |
|------|------|------|
| `ANY` | any available | varies |
| `AMPERE_16` | RTX A4000 / A4500 / RTX 4000 Ada / RTX 2000 Ada | 16 GB |
| `AMPERE_24` | RTX A5000 / L4 / RTX 3090 | 24 GB |
| `ADA_24` | RTX 4090 | 24 GB |
| `ADA_32_PRO` | RTX 5090 | 32 GB |
| `AMPERE_48` | A40 / RTX A6000 | 48 GB |
| `ADA_48_PRO` | RTX 6000 Ada / L40 / L40S | 48 GB |
| `AMPERE_80` | A100 (PCIe / SXM4) | 80 GB |
| `ADA_80_PRO` | H100 (PCIe / HBM3 / NVL 94 GB) | 80 GB+ |
| `HOPPER_141` | H200 | 141 GB |
| `BLACKWELL_96` | RTX PRO 6000 Blackwell | 96 GB |
| `BLACKWELL_180` | B200 | 180 GB |

Note: Serverless GPU config wants **pool IDs** (e.g. `ADA_24`), while Pod creation
and `runpodctl --gpu-id` use **GPU type IDs** (e.g. `NVIDIA A40`) — different
identifier spaces. The full per-model list (with exact display names and memory) is
in `docs/references/gpu-types.mdx`.

Rule of thumb: prefer **fewer high-end GPUs over more low-end GPUs**. One 80 GB card
usually beats two 40 GB cards for a model that fits.

## Step 4: Secure vs Community Cloud

- **Secure Cloud** — T3/T4 data centers, high redundancy, stable public IPs. Use for
  production and sensitive data. Standard pricing.
- **Community Cloud** — vetted peer-to-peer hosts, cheaper, variable reliability;
  public IPs can change on migrate/restart. Good for cost-sensitive, tolerant work.
  (No new hosts are being onboarded; existing capacity remains.)

## Step 5: availability and multi-GPU selection

`runpodctl gpu list` reports on-demand `securePricePerHr` / `communityPricePerHr` per
GPU (explicitly `null` when that cloud doesn't offer it) plus a
`dataCenterAvailability[]` breakdown, so read cost and per-region stock straight from
it rather than assuming a lower tier is cheaper. Top-level `stockStatus` is only the
best status across DCs — use the per-DC breakdown when placement matters (`runpodctl
datacenter list` gives the same view from the DC side). Two scope limits: those are **pod
on-demand** rates (serverless bills per request-second), and the per-DC breakdown doesn't
say *which cloud* has the stock, so cost and placement are two separate reads rather than
one ranked list.

GPU supply fluctuates by tier and region. To avoid throttling:

- **List multiple GPU types / pools in priority order.** If the first choice is
  unavailable, Runpod falls back to the next. On Serverless you can specify up to
  three, in priority order.
- For endpoints with **5+ workers**, Runpod spreads workers across your prioritized
  pools (most on the primary), reducing throttling. With fewer than 5 workers, all
  use the highest-priority available type.
- (flash caveat: auto GPU switching by supply only kicks in when max workers ≥ 5.)
- Use `gpu_count` > 1 (Serverless) / multi-GPU Pods when a model exceeds a single
  card's VRAM.

## Step 6: data-center placement

- Restricting an endpoint or Pod to specific data centers **shrinks the available
  GPU pool** — allow all regions for maximum availability unless you have a reason
  not to.
- Reasons to pin a region: lower latency to your users, data-residency/compliance,
  or co-locating with a **network volume** (a volume ties the workload to its data
  center). Some features (e.g. global networking) are only in a subset of regions.
- Regions span US (CA, GA, IL, KS, NC, TX, WA, etc.), EU (CZ, RO, IS, NO, SE, FR,
  NL), and others. See `docs/pods/networking.mdx` for the current data-center list
  and `companion-clis/SKILL.md` for datacenter IDs used with S3.

SHA-256: 4ac463ba4483266eff7495742d30a77760f264b998aaab425bfde2bf2fcd69f0