Tensor Parallelism
Apprends comment le parallélisme de tenseurs fragmente les matrices de poids sur les GPU pour entraîner des modèles massifs. Explore en quoi il diffère du parallélisme de données avec Ultralytics.
Le parallélisme de tenseurs est une technique avancée d'entraînement distribué utilisée en apprentissage automatique pour diviser de grandes structures mathématiques individuelles, ou tenseurs, entre plusieurs accélérateurs matériels tels que des GPU ou des TPU. Lors de l'entraînement de modèles massifs de deep learning, le nombre de paramètres peut facilement dépasser la capacité mémoire d'un seul appareil. Au lieu de placer une couche entière de réseau de neurones sur un seul GPU, le parallélisme de tenseurs fragmente les matrices de poids et divise les opérations mathématiques (comme les multiplications de matrices) entre plusieurs appareils dans un cluster. Cela permet au modèle de tirer parti de la mémoire et de la puissance de calcul combinées de toute l'installation matérielle, en exécutant des calculs en parallèle dans un paradigme Single-Program Multiple-Data (SPMD) tout en synchronisant les résultats via des interconnexions à haut débit comme NVIDIA NVLink.
Link to this sectionComment fonctionne le parallélisme de tenseurs#
Au cœur d'un réseau de neurones se trouvent des multiplications de matrices. Le parallélisme de tenseurs distribue ces opérations en divisant les matrices soit par ligne, soit par colonne. Par exemple, dans une couche entièrement connectée ou un mécanisme d'attention transformer, un GPU peut calculer la moitié gauche de la matrice tandis qu'un autre calcule la moitié droite. Une fois les calculs parallèles terminés, les appareils communiquent — souvent en utilisant des opérations collectives All-Reduce rapides — pour agréger les résultats partiels avant de passer le tenseur complet à la couche suivante. Les récentes avancées universitaires en 2025 optimisent davantage ce processus en introduisant des activations partiellement synchronisées pour réduire la surcharge de communication qui bloque généralement les grands clusters de calcul.
Link to this sectionDistinction entre les techniques de parallélisme connexes#
Comprendre comment le parallélisme de tenseurs s'intègre dans le paysage plus large de l'informatique distribuée nécessite de le différencier d'autres stratégies courantes :
- Parallélisme de tenseurs vs Parallélisme de modèles : Le parallélisme de tenseurs est une sous-catégorie très spécifique du parallélisme de modèles. Alors que le parallélisme de modèles général fait référence à la division d'un modèle entre des appareils de quelque manière que ce soit, le parallélisme de tenseurs fait strictement référence à la fragmentation des tenseurs individuels au sein d'une seule couche.
- Parallélisme de tenseurs vs Parallélisme de pipeline : Le parallélisme de pipeline est une autre forme de parallélisme de modèles qui partitionne le réseau par profondeur — plaçant les premières couches sur le GPU 0, les suivantes sur le GPU 1, et ainsi de suite. Cela crée des dépendances séquentielles appelées bulles de pipeline. Le parallélisme de tenseurs divise les couches elles-mêmes, les exécutant simultanément sans délai séquentiel, mais nécessite une bande passante réseau beaucoup plus élevée.
- Parallélisme de tenseurs vs Parallélisme de données : Dans le parallélisme de données, le modèle entier est entièrement répliqué sur chaque GPU, et seul le jeu de données d'entraînement est divisé entre les appareils. Pour des architectures hautement optimisées comme Ultralytics YOLO26, qui tiennent facilement sur des GPU modernes, le parallélisme de données via
DistributedDataParallelde PyTorch est la méthode par défaut. Le parallélisme de tenseurs n'est généralement nécessaire que lorsque les paramètres d'une seule couche dépassent la VRAM du matériel, provoquant des erreurs de mémoire insuffisante (OOM).
Link to this sectionApplications dans le monde réel#
Le parallélisme de tenseurs est indispensable dans les infrastructures IA modernes, en particulier pour les architectures de pointe nécessitant une échelle de calcul massive :
- Entraînement de grands modèles de langage (LLM) : Les modèles de base massifs comme Llama 3 de Meta et DeepSeek V3 utilisent des frameworks tels que NVIDIA Megatron-LM pour implémenter le parallélisme de tenseurs. Comme les dimensions cachées et les têtes d'attention de ces modèles sont si grandes, les diviser sur un nœud à 8 GPU est obligatoire pour entraîner efficacement et maintenir une faible latence pendant l'inférence en temps réel.
- Grands modèles de vision (LVM) et génération 3D : Alors que la vision par ordinateur évolue vers des systèmes de raisonnement multimodal massifs, les chercheurs utilisent le parallélisme de tenseurs combiné au parallélisme de pipeline sur des services comme AWS SageMaker pour entraîner des transformers de vision (ViT) gigantesques. Cette technique permet de traiter des images haute résolution et la génération de vidéo qui nécessitent d'énormes blocs de mémoire contigus.
Link to this sectionImplémentation du parallélisme de tenseurs dans PyTorch#
Historiquement, les ingénieurs devaient écrire une logique distribuée personnalisée complexe pour fragmenter les tenseurs. Récemment, PyTorch a introduit DTensor (Distributed Tensor), simplifiant nativement ce flux de travail. Voici un exemple de création d'un tenseur fragmenté par ligne en utilisant l'API officielle Distributed Tensor de PyTorch :
import torch
from torch.distributed.device_mesh import init_device_mesh
from torch.distributed.tensor import Shard, distribute_tensor
# Initialize a 1D device mesh across 2 GPUs
mesh = init_device_mesh("cuda", (2,))
# Create a standard PyTorch tensor (e.g., representing a layer's weights)
local_tensor = torch.randn(1024, 1024)
# Distribute the tensor across the GPUs by sharding along the first dimension (row-wise)
# Each GPU now holds a (512, 1024) chunk of the original tensor
distributed_tensor = distribute_tensor(local_tensor, mesh, [Shard(0)])
print(f"Global shape: {distributed_tensor.shape}, Local shape: {distributed_tensor.to_local().shape}")Pour les tâches de vision optimisées pour la périphérie et le déploiement rapide de modèles, les développeurs s'appuient généralement sur la plateforme Ultralytics pour gérer automatiquement l'utilisation optimale du matériel. Bien que les modèles de base à plusieurs milliards de paramètres nécessitent des configurations manuelles de parallélisme de tenseurs, tu peux faire évoluer efficacement l'entraînement pour des modèles comme YOLO26 en utilisant de simples commandes CLI prêtes à l'emploi. Cela garantit un débit maximal en utilisant de manière transparente des techniques natives de parallélisme de données ainsi que des conseils robustes pour l'entraînement de modèles.






