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.
#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.
#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, 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.
Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.