Avancé 22 minPerformance

LLM multi-GPU avec llama.cpp : tensor-split sur 2× RTX 3090/4090

Une RTX 4090 24 Go ne suffit pas pour faire tourner les meilleurs modèles 2026 en Q8 pleine qualité avec un contexte de 256k tokens. Deux 3090 d'occasion (48 Go) font le job pour moins cher. Mais il faut savoir diviser le modèle entre les cartes, choisir entre split layer et tensor parallel, et configurer le hardware pour que ça tienne la distance. Ce guide couvre les trois outils courants (llama.cpp, Ollama, vLLM) et les pièges.

Par Mohamed Meguedmi·Màj 2026-08-27·Testé sur Windows, macOS, Linux

#Pourquoi multi-GPU

Modèles > VRAM d'une carte seule
Qwen3-Coder 30B-A3B en Q8 = 32 Go, et avec un contexte de 256k le cache KV pousse bien au-delà. Pas de GPU grand public unique qui tient, sauf une RTX 5090 (32 Go) — et encore, sans marge pour un gros contexte.
Throughput pour équipe
Deux cartes en tensor parallel via vLLM peuvent servir 2× plus d'utilisateurs en parallèle.
Redondance
Une carte tombe en panne, l'autre continue en mode dégradé (modèle plus petit).
Fine-tuning
Un LoRA sur un 24B demande 30 Go entre modèle + optimiseur + gradients. Deux 24 Go = confortable.

#Deux stratégies : split layer vs tensor parallel

Split par couches (layer parallelism)
Les couches 1-40 sur GPU 0, 41-80 sur GPU 1. Un passage de couche à l'autre copie un vecteur d'activation. Latence légèrement plus haute. Supporté par llama.cpp et Ollama.
Tensor parallel
Chaque couche est découpée en morceaux répartis sur les GPU en parallèle. Nécessite communication rapide entre cartes. Plus performant mais complexe. Supporté par vLLM et ExLlamaV2.
i
Règle empirique
Pour du single-user et simplicité : split par couches (llama.cpp/Ollama). Pour du serving multi-user et throughput : tensor parallel (vLLM).

#Matériel : attention aux détails

PCIe
Chaque GPU doit être en PCIe x8 minimum. Une carte mère avec 2× PCIe 5.0 x16 dédiés au CPU, pas x16 + x4 via chipset.
Alimentation
2× 3090 = 700 W rien que GPU. Plus CPU, RAM, SSD : visez 1200-1600 W (80+ Gold ou Platinum).
Espacement
Les RTX 3090/4090 sont 3-slots. Sur une carte mère 7-slots, les deux cartes se touchent. Risers PCIe ou water-cooling pour garder la main.
Ventilation
Avec 2 cartes en charge, un boîtier mal ventilé atteint 85-90°C. Thermal throttling = -30 % de perf.

#1. Multi-GPU avec llama.cpp

Split layer
./build/bin/llama-cli \
  -m ./models/qwen3-coder-30b-a3b-q8_0.gguf \
  -ngl 99 \
  --split-mode layer \
  --tensor-split 0.5,0.5 \
  -p "..."

--tensor-split indique la proportion de couches par GPU. Pour 2 cartes identiques : 0.5,0.5. Pour une 3090 24 Go + une 4070 12 Go : 0.67,0.33 (la 3090 prend deux tiers).

Row split (plus rapide parfois)
./build/bin/llama-cli \
  -m ./models/qwen3-coder-30b-a3b-q8_0.gguf \
  -ngl 99 \
  --split-mode row \
  ...

#2. Multi-GPU avec Ollama

Ollama détecte automatiquement plusieurs GPU et répartit sur tous ceux disponibles. Peu de réglages exposés, mais ça marche out of the box.

Variables utiles
# Limiter à certains GPU
export CUDA_VISIBLE_DEVICES=0,1

# Ou pour AMD
export ROCR_VISIBLE_DEVICES=0,1

systemctl restart ollama
Vérifier la répartition
ollama ps
# Doit afficher le modèle réparti : PROCESSOR = 100% GPU,
# réparti sur les deux cartes vu par nvidia-smi

#3. Tensor parallel avec vLLM

Lancer vLLM avec 2 GPU
python -m vllm.entrypoints.openai.api_server \
  --model Qwen/Qwen3-Coder-30B-A3B-Instruct \
  --tensor-parallel-size 2 \
  --quantization awq \
  --dtype auto \
  --port 8000

vLLM répartit chaque couche sur les 2 GPU en parallèle. Le throughput agrégé est quasi-doublé par rapport à 1 GPU, avec un overhead de communication de ~10 %.

Cartes identiques pour vLLM
Tensor parallel marche idéalement avec des cartes identiques. 2× RTX 3090 ou 2× 4090 : OK. Une 3090 + une 4070 : vLLM prendra la plus lente comme baseline, sous-utilisation de la rapide.

NVLink permet une liaison GPU-to-GPU à bande passante élevée (112 Go/s sur 3090). Certaines RTX 3090 ont un connecteur NVLink ; les 4090 ne l'ont plus ; les RTX Quadro / A-series l'ont toutes.

Impact llama.cpp split-layer
Très faible. Les transferts entre couches sont petits.
Impact vLLM tensor parallel
Plus significatif : +5 à +15 % de throughput avec NVLink activé.
Impact fine-tuning
Gros : la communication gradient est intensive. NVLink recommandé si vous envisagez du fine-tune multi-GPU.

#Performance attendue

Sur 2× RTX 3090, Qwen3-Coder 30B-A3B Q8_0, llama.cpp avec split layer :

Single prompt
~55 tok/s. Une seule 3090 ne tiendrait pas le modèle en Q8 (32 Go). La vitesse reste élevée : c'est un MoE à 3B de paramètres actifs.
Latence premier token
~200 ms (vs ~80 ms sur un petit modèle single GPU).
Mêmes cartes sous vLLM tensor parallel
~65 tok/s single, mais ~400 tok/s agrégés avec 10 requêtes parallèles.
!
Goulot PCIe
Si une de vos cartes est en PCIe x4 (par exemple slot secondaire branché sur chipset), vous pouvez perdre 40 % de perf en split layer et encore plus en tensor parallel. Vérifiez avec nvidia-smi ou GPU-Z avant d'accuser le reste.
Ce guide vous a aidé ?

Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.