Hardware · NVIDIA Ampere

Multi-GPU NVLinkReviewed July 2026

Dual RTX 3090 48GB for Local LLMs: The NVLink Path to 70B

Two RTX 3090 24GB cards connected with NVLink give you a combined 48GB of VRAM — but only if the software you run knows how to use it. NVLink is a physical high-bandwidth bridge between the two GPUs, not an automatic unified memory pool. This guide covers what NVLink actually does, why plain Ollama will not get you a working 70B model across both cards, and the real runtime path (vLLM, GPUStack, or tensor-parallel llama.cpp) that does.

VRAM48 GB GDDR6X (2x 24 GB, NVLink pooled)
Memory bandwidth~1872 GB/s combined (~936 GB/s per card)
ArchitectureAmpere (RTX 30 series)
Local AI tier70B at Q4 / 32B at Q8 (NVLink required)
InterconnectNVLink 3.0 bridge
Best runtimesvLLM · GPUStack · llama.cpp (tensor parallel)

Editorial review

Reviewed byOpenSourcesAI EditorialLast updatedJuly 2026SourcesNVIDIA GPU and NVLink specifications, vLLM and llama.cpp tensor-parallel documentation, GGUF quantization documentation, Hugging Face model cards, and OpenSourcesAI editorial review.

This page covers two RTX 3090 24GB cards connected via NVLink, treated as a single 48GB logical pool by NVLink-aware runtimes. This is an advanced, expert-level hardware configuration — not a beginner path into local AI.

Quick verdict

A comparatively affordable used-market path to 70B locally at GPU-class speed — but the 48GB pool only exists with an NVLink tensor-parallel runtime, and this is emphatically not a beginner setup.

  • 70B Q4_K_M~40–42 GB — fits the pooled 48GB (the headline use case)
  • 30B–32BFull Q8 across both cards; FP16 (~60–64 GB) does not fit
  • RuntimevLLM, GPUStack, or tensor-parallel llama.cpp — not plain Ollama
  • Power~700W of GPU draw alone; 1000W+ PSU territory

Good fit for

  • Builders who want the maximum local VRAM pool and are comfortable with advanced runtime configuration
  • Serving two separate 13B models (one per card) without any NVLink complexity

Wrong fit for

  • Beginners — start with a single RTX 3090 or 4090 and revisit later
  • Anyone expecting Ollama to pool 48GB out of the box

Dual RTX 3090s with NVLink are a legitimate — and comparatively affordable, on the used market — path to running 70B models locally with GPU-class speed. The combined 48GB VRAM pool fits a 70B model at Q4_K_M (~40-42GB), something no single consumer GPU can hold. The catch is that this capability only exists if you run software that explicitly supports NVLink tensor parallelism. Ollama does not do this well out of the box.

This is not a beginner setup. You need two matching RTX 3090 cards, a physical NVLink bridge, a motherboard and case that can host two full-size GPUs with adequate airflow, a power supply rated for roughly 700W of GPU draw alone (350W per card), and an inference runtime configured for tensor-parallel execution — vLLM, GPUStack, or a tensor-parallel build of llama.cpp. If any of that sounds unfamiliar, start with a single RTX 3090 or RTX 4090 and revisit this path later.

Check 48GB dual-GPU model fit →

What this hardware can run

With a working tensor-parallel runtime, the 48GB combined pool opens 70B models at Q4 and full-FP16 30B-class models — both out of reach for a single 24GB card. Without that runtime, you effectively have two separate 24GB cards, not a 48GB system.

Model sizeBest quantizationVRAM usedVerdictNotes
7B-8BFP16~14-16 GBComfortable (single card)Fits on either card alone. No need to split across both GPUs for this tier.
13B-14BFP16~26-28 GBNeeds both cards (tensor parallel)Exceeds a single 24GB card with runtime overhead — splits comfortably across both with a tensor-parallel runtime.
30B-32BFP16~60-64 GBDoes not fitExceeds the 48GB pool even with perfect pooling. Q8 (~32-34 GB) is the practical ceiling for full-quality 30B.
30B-32BQ8~32-34 GBComfortable (NVLink required)Requires splitting across both cards — a single 24GB card cannot hold this alone. Tensor-parallel runtime needed.
70BQ4_K_M~40-42 GBFits (NVLink + tensor parallel required)The headline use case for this hardware. Requires vLLM, GPUStack, or tensor-parallel llama.cpp — not plain Ollama.
70BQ8~74 GBDoes not fitExceeds the 48GB pool. Requires more VRAM (4x24GB, A100 80GB, or cloud).
2x 13B (separate models)Q4_K_M each~16 GB totalComfortableOne model per card, no NVLink pooling needed — a simpler multi-model serving pattern if you do not need a single large model.

A note on the 1872 GB/s figure: this is the sum of both cards' individual memory bandwidth (~936 GB/s each), not a single number that any one model transaction sees. Real throughput on a tensor-parallel 70B run depends on how efficiently the runtime splits the model and how much overhead the NVLink bridge adds for cross-GPU synchronization — expect meaningful but not literal 2x scaling versus a single card at the layers that fit.

Best model sizes for this hardware

  • 70B at Q4_K_M: The reason to build this rig. Llama 3.1 70B or Qwen 2.5 72B at Q4_K_M (~40-42GB) fits inside the 48GB pool with a tensor-parallel runtime. Expect meaningfully faster generation than Apple Silicon 64GB at the same model, since GPU memory bandwidth per card is much higher than unified memory bandwidth.
  • 30B-32B at Q8: Near-FP16 quality at 32B (~32-34GB) — a tier that does not fit on a single 24GB card. Good middle ground if 70B feels too slow for interactive use but you still want maximum quality at 32B.
  • 13B-14B at FP16 on a single card: If you do not need the full 48GB pool for one model, you can run a 13B-14B model at FP16 on one card while leaving the second card free for a second model, embeddings, or a vision model — a flexible dual-GPU serving pattern that does not require NVLink at all.

Recommended models

  • Llama 3.1 70B Q4_K_M — The flagship use case for this hardware. Requires a tensor-parallel runtime to split across both cards.
  • Qwen 2.5 72B Q4_K_M: Comparable VRAM footprint to Llama 3.1 70B. Strong reasoning and long-context performance for a 48GB tensor-parallel setup.
  • Qwen 2.5 32B Q8: A faster, still high-quality alternative to 70B when generation speed matters more than absolute model size.
  • Two independent 13B models: If tensor parallelism is more complexity than you want yet, run one 13B-14B model per card independently — no NVLink coordination required, simple multi-model serving.

Getting started: first setup on dual RTX 3090s

Plain ollama pull and ollama run will not give you a working 70B model split cleanly across both cards with NVLink. The realistic path is vLLM with tensor parallelism, or a tensor-parallel build of llama.cpp. Below is a representative vLLM launch — adjust model name, tensor-parallel size, and quantization to your setup.

# Confirm both GPUs and NVLink are visible
nvidia-smi
nvidia-smi topo -m   # look for "NV" links between GPU0 and GPU1

# Install vLLM (Linux, CUDA required)
pip install vllm

# Launch a 70B model with tensor parallelism across both cards
python -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Meta-Llama-3.1-70B-Instruct \
  --quantization awq \
  --tensor-parallel-size 2 \
  --gpu-memory-utilization 0.90 \
  --max-model-len 8192

# Alternative: llama.cpp built with tensor-parallel / multi-GPU support
# (build with CUDA + split-mode row for tensor-parallel-style splitting)
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release
./build/bin/llama-server \
  -m llama-3.1-70b-q4_k_m.gguf \
  --split-mode row \
  --tensor-split 1,1 \
  --n-gpu-layers 999

Note: --tensor-split in llama.cpp balances layers across GPUs but does not use NVLink for tensor-parallel compute the way vLLM does — for genuine NVLink-accelerated tensor parallelism, vLLM or GPUStack are the more mature options as of mid-2026.

Recommended runtimes

  • vLLM: The most mature open-source option for NVLink-aware tensor-parallel serving. Set --tensor-parallel-size 2 to split a model across both cards. Best choice if you want an OpenAI-compatible API server for 70B-class models.
  • GPUStack: A newer multi-GPU orchestration layer built for exactly this use case — distributing large models across heterogeneous or matched GPU clusters, including NVLink pairs. Worth evaluating alongside vLLM.
  • llama.cpp (tensor parallel / row-split build): More manual to configure than vLLM, but works well for GGUF-quantized models if you are already invested in the llama.cpp ecosystem. Requires building with CUDA support and understanding split-mode flags.
  • Ollama — Not recommended as the primary runtime for this hardware. It can offload layers across both GPUs, but it does not do NVLink tensor-parallel compute, so you lose most of the benefit of the NVLink bridge you paid for.

Best local AI workflows for this hardware

  • Local 70B inference: The primary reason to build this rig. Use vLLM to stand up an OpenAI-compatible endpoint serving Llama 3.1 70B or Qwen 2.5 72B for personal or small-team use.
  • High-throughput batch inference pipelines: vLLM's continuous batching combined with two GPUs makes this hardware well suited to processing large volumes of prompts — document summarization, dataset labeling, or bulk generation jobs — faster than a single card.
  • Serving two models simultaneously: If you do not need tensor parallelism for a single giant model, run a coding model on one card and a chat or reasoning model on the other — a straightforward way to use 48GB without NVLink complexity.
  • Fine-tuning smaller models: LoRA fine-tuning of 7B-13B models benefits from the extra VRAM headroom across two cards, even without full tensor-parallel training.

What this hardware cannot do well

  • Beginner-friendly setup: This is explicitly an advanced path. If you have never configured CUDA, built software from source, or debugged GPU driver issues, start with a single card and a beginner-friendly runtime like Ollama first.
  • Automatic VRAM pooling: NVLink does not magically give every application 48GB of usable memory. Software that is not NVLink/tensor-parallel-aware sees two separate 24GB devices, not one 48GB device.
  • Low power draw: Two RTX 3090s under load draw roughly 700W combined, on top of the rest of the system. This requires a robust PSU (typically 1000W+), good case airflow, and a real electricity cost to factor in for sustained use.
  • 70B at Q8 or FP16: Q8 on a 70B model needs roughly 74GB, and FP16 needs roughly 140GB — both exceed the 48GB pool. Q4_K_M is the practical ceiling for 70B on this hardware.

Upgrade path

  • Dual RTX 4090 48GB: Higher combined bandwidth (~2016 GB/s) and no NVLink support on the RTX 4090 — meaning you are committed to PCIe-only tensor-parallel runtimes (vLLM, llama.cpp) rather than an NVLink bridge. Faster per-card, but the interconnect story is different since NVLink was dropped from the 40-series consumer lineup.
  • 4x GPU workstation (96GB+): The natural next step for teams that need to serve multiple 70B-class models simultaneously or want headroom for long-context, high-batch serving. Significantly higher cost and power/cooling requirements.
  • Data center GPUs (A100 80GB, H100): A single A100 80GB card holds a 70B model at Q8 or even FP16 without any multi-GPU coordination at all — simpler software story, but far more expensive per card than a used RTX 3090.

Cloud GPU fallback

If the setup friction of NVLink and tensor-parallel runtimes is more than you want to take on right now — or you need higher-precision 70B inference (Q8/FP16) than 48GB can hold — cloud GPU rentals are a practical way to test the same model class before committing to hardware.

Best cloud GPU for on-demand inference and spot rentals

RunPod

RunPod offers on-demand and spot GPU rentals including A100 (80 GB) and H100 instances that can run 70B models at Q8 or FP16 without any tensor-parallel configuration — a good way to validate a 70B workflow before building a dual RTX 3090 rig.

Pros

  • A100 80GB runs 70B at Q8/FP16 with no multi-GPU splitting required
  • Spot pricing makes large-model experiments affordable
  • Full-stack GPU pods with persistent storage and networking

Cons

  • Spot instances can be interrupted mid-run
  • Requires Docker familiarity for custom environments

Partner link: OpenSourcesAI may earn a commission if you sign up.

Visit RunPod

Best cloud GPU for ML training and large-model fine-tuning

Lambda

Lambda Labs provides A100 and H100 GPU cloud instances purpose-built for ML workloads, including multi-GPU tensor-parallel training and serving — the same NVLink/tensor-parallel concepts covered on this page, running on data-center-grade interconnects.

Pros

  • A100 and H100 instances for serious ML workloads
  • Clean pricing, no hidden fees, ML-focused infrastructure
  • Native multi-GPU tensor-parallel support without building your own rig

Cons

  • Less flexible than RunPod for short spot experiments
  • GPU availability can vary by region and instance type
Visit Lambda

Related hardware

FAQ

Does NVLink automatically combine two RTX 3090s into 48GB of VRAM?

No. NVLink is a high-bandwidth peer-to-peer bridge between the two GPUs — it does not create a single unified 48GB memory space that any application can use automatically. VRAM pooling for a single model only happens when the inference runtime explicitly supports tensor-parallel or model-parallel execution across NVLink. Plain Ollama does not do this well. vLLM, GPUStack, and llama.cpp built with tensor-parallel support are the runtimes that actually split a model across both cards and use NVLink to keep them in sync.

Can I just run Ollama with two RTX 3090s and get 48GB of usable VRAM?

Not reliably for a single large model. Ollama can detect both GPUs and will offload layers across them, but it does not use NVLink tensor parallelism, so the effective throughput and VRAM efficiency are worse than a purpose-built multi-GPU runtime. If your goal is to run a 70B model across two 24GB cards, use vLLM or a tensor-parallel llama.cpp build instead — they are designed for exactly this split.

What is the real-world memory bandwidth for dual RTX 3090s?

Each RTX 3090 individually has about 936 GB/s of memory bandwidth. The combined 1872 GB/s figure sometimes quoted for the pair is an aggregate — it represents the sum of both cards' bandwidth, not a single pooled number available to one model uniformly. Real-world throughput for a tensor-parallel 70B run depends heavily on the NVLink bridge bandwidth and the runtime's communication overhead, not just the sum of the two cards' raw bandwidth.

Is a dual RTX 3090 setup beginner-friendly?

No — this is an advanced, expert-level setup. You need two matching RTX 3090 cards, a physical NVLink bridge (RTX 3090s support NVLink; not all RTX 30-series cards do), a motherboard with two full-bandwidth PCIe x16 slots, and a power supply rated at 1200W or higher — the two cards alone draw roughly 700W combined (350W each), and a 1200W unit leaves headroom for the CPU, drives, and transient power spikes under sustained load. On the software side, you need an NVLink-aware runtime configured for tensor parallelism, which is meaningfully more setup than a single-GPU Ollama install.

What can I run on dual RTX 3090s that I cannot run on one?

The headline unlock is 70B models at Q4_K_M (roughly 40-42GB), which does not fit on a single 24GB card under any quantization. With NVLink and a tensor-parallel runtime, you can also run 30B-32B models at Q8 (near-lossless quality — their FP16 weights at 60-64GB exceed even the pooled 48GB), or run a single 24GB-class model with more headroom for long context and larger batch sizes.

How does dual RTX 3090 compare to a single RTX 4090 or Apple Silicon 64GB for 70B models?

A single RTX 4090 tops out at 24GB VRAM and cannot hold a 70B model regardless of quantization — its ceiling is around 32B at Q4. Apple Silicon with 64GB unified memory can run 70B at Q4 with a simple Ollama install and no NVLink or tensor-parallel configuration, but generation speed is slower (roughly 3-8 tokens per second). Dual RTX 3090s with a proper tensor-parallel runtime can generate meaningfully faster than Apple Silicon at 70B, but require far more setup effort and a much higher power budget.

Disclosure

OpenSourcesAI may earn a commission or referral fee from links to hardware retailers, cloud GPU providers, or partner tools on this page. Editorial assessments are produced independently and are not influenced by commercial relationships. Hardware specs are sourced from manufacturer documentation. Model VRAM estimates are derived from GGUF quantization formulas and may vary across runtime versions and model architectures. NVLink tensor-parallel performance varies significantly by runtime, model architecture, and configuration. Verify before making purchasing decisions.

Check model fit for your exact setup

Enter your VRAM, RAM, and workflow into the compatibility checker to get model recommendations matched to your specific hardware.