Tensor Parallelism
Apprends comment le parallélisme de tenseur fragmente les matrices de poids entre 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, sur plusieurs accélérateurs matériels tels que les GPU ou les TPU. Lors de l'entraînement de modèles d'apprentissage profond massifs, 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 répartit les opérations mathématiques (comme les multiplications de matrices) sur plusieurs appareils d'un cluster. Cela permet au modèle de tirer parti de la mémoire combinée et de la puissance de calcul de toute l'infrastructure matérielle, en exécutant des calculs parallèles dans un paradigme Single-Program Multiple-Data (SPMD) tout en synchronisant les résultats via des interconnexions à haut débit comme NVIDIA NVLink.
Comment fonctionne le parallélisme de tenseur#
Au cœur d'un réseau de neurones se trouvent les multiplications de matrices. Le parallélisme de tenseurs distribue ces opérations en divisant les matrices par lignes ou par colonnes. 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 académiques de 2025 optimisent davantage ce processus en introduisant des activations partiellement synchronisées pour réduire la surcharge de communication qui ralentit généralement les grands clusters de calcul.
Distinction des techniques de parallélisme connexes#
Comprendre comment le parallélisme de tenseur s'inscrit dans le paysage plus large de l'informatique distribuée nécessite de le différencier d'autres stratégies courantes :
- Parallélisme de tenseur vs parallélisme de modèle : Le parallélisme de tenseur est une sous-catégorie très spécifique du parallélisme de modèle. Alors que le parallélisme de modèle général désigne le fait de diviser un modèle entre plusieurs appareils de quelque manière que ce soit, le parallélisme de tenseur se réfère strictement au partitionnement des tenseurs individuels au sein d'une même couche.
- Parallélisme de tenseur vs parallélisme de pipeline : Le parallélisme de pipeline est une autre forme de parallélisme de modèle qui partitionne le réseau par profondeur — en 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 connues sous le nom de « bulles de pipeline ». Le parallélisme de tenseur divise les couches elles-mêmes, en 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 réparti entre les appareils. Pour les architectures hautement optimisées comme Ultralytics YOLO26, qui tiennent facilement sur les 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 dépassement de mémoire (OOM).
Applications concrètes#
Le parallélisme de tenseur 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 fondation massifs comme Llama 3 de Meta et DeepSeek V3 utilisent des frameworks tels que NVIDIA Megatron-LM pour mettre en œuvre le parallélisme de tenseurs. Étant donné que les dimensions cachées et les têtes d'attention de ces modèles sont si vastes, les diviser sur un nœud à 8 GPU est obligatoire pour s'entraîner efficacement et maintenir une faible latence lors de l'inférence en temps réel.
- Grands modèles de vision (LVM) et génération 3D : À mesure 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 de générer des vidéos qui nécessitent d'énormes blocs de mémoire contigus.
Implémentation du parallélisme de tenseur dans PyTorch#
Historiquement, les ingénieurs devaient écrire une logique distribuée personnalisée et 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 lignes en utilisant l'API officielle PyTorch Distributed Tensor :
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 de modèles rapide, les développeurs s'appuient généralement sur la plateforme Ultralytics pour gérer automatiquement l'utilisation optimale du matériel. Alors que les modèles de fondation à plusieurs milliards de paramètres nécessitent des configurations manuelles de parallélisme de tenseurs, tu peux mettre à l'échelle efficacement l'entraînement de modèles tels que YOLO26 à l'aide de commandes CLI simples et 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 d'entraînement de modèles robustes.






