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.
#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.
#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
--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).
#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.
#3. Tensor parallel avec vLLM
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 %.
#NVLink : utile ou pas ?
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.
Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.