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 un Llama 3.3 70B en Q6. Deux 3090 d'occasion 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-02-28·Testé sur Windows, macOS, Linux

#Pourquoi multi-GPU

Modèles > VRAM d'une carte seule
70B en Q4 = 42 Go. Pas de GPU grand public unique avec autant, sauf RTX 5090 (32 Go).
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 13B 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/llama-3.3-70b-q4_k_m.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/llama-3.3-70b-q4_k_m.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 meta-llama/Llama-3.3-70B-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, Llama 3.3 70B Q4_K_M, llama.cpp avec split layer :

Single prompt
~35 tok/s. Une seule 3090 ne tiendrait pas le modèle.
Latence premier token
~250 ms (vs ~80 ms sur un 7B single GPU).
Mêmes cartes sous vLLM tensor parallel
~45 tok/s single, mais ~300 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.