Skip to content
ND-Parallel accéléré : Guide pour un entraînement multi-GPU efficace
Source: huggingface.co

ND-Parallel accéléré : Guide pour un entraînement multi-GPU efficace

Sources: https://huggingface.co/blog/accelerate-nd-parallel, Hugging Face Blog

Aperçu

Former des modèles extrêmement vastes sur plusieurs GPU demande plus que de simplement laisser passer les données sur une seule carte. Accelerate, avec Axolotl, offre une approche rapide et intégrée pour composer plusieurs stratégies de parallélisme dans votre script d’entraînement. L’objectif est de minimiser les coûts de communication tout en maximisant le débit des données et l’efficacité mémoire à mesure que les modèles atteignent des milliards, voire des centaines de milliards de paramètres. L’approche ND-Parallel mélange le parallélisme de données, le sharding mémoire et des stratégies de parallélisme de modèle dans un flux configurable. Dans ce cadre, le parallélisme de données (DP) est le niveau supérieur : le modèle, les gradients et les états de l’optimiseur sont répliqués sur les dispositifs et les données sont réparties entre eux. Si le modèle est trop grand pour tenir sur une seule carte, le Fully Sharded Data Parallel (FSDP) fragmente les poids, les gradients et les états de l’optimiseur entre les GPUs, échangeant mémoire contre communication. Le Tensor Parallel (TP) répartit le calcul des couches linéaires entre les dispositifs, tandis que le Context Parallel (CP) segmente les séquences pour limiter la mémoire nécessaire à l’attention dans les grands contextes. La plateforme permet aussi de combiner ces stratégies entre les nœuds, ce qui crée un monde (world size) qui croît avec le nombre de devices du cluster. La configuration Axolotl reflète le ParallelismConfig d’Accelerate, permettant de définir le degré de chaque stratégie et la manière dont elles s’enchaînent. À mesure que les modèles évoluent vers des séquences très longues ou des milliards de paramètres, les motifs de communication et la disposition mémoire deviennent les goulots d’étranglement dominants. ND-Parallel aide les utilisateurs à raisonner sur ces compromis et à choisir des configurations qui minimisent la communication entre les dispositifs tout en maintenant le débit d’entraînement. L’article explore le comportement de DP, FSDP, TP et CP, comment ils interagissent et quand les combiner pour obtenir des performances pratiques. Vous trouverez aussi comment les fragments du modèle sont rassemblés et réduits, comment les dispositifs à travers les nœuds participent aux opérations d’all-reduce et de reduce-scatter, et comment la taille du monde influe sur l’évolutivité. Le script d’entraînement de bout en bout dans le dépôt Accelerate illustre la configuration du DataLoader, de l’optimiseur et de la boucle d’entraînement, ainsi que l’enregistrement du modèle entraîné. La capacité ND-Parallel est intégrée à Axolotl pour faciliter l’affinage à grande échelle, rendant simple l’ajout d’une ou plusieurs stratégies de parallélisme dans vos configs existants.

Caractéristiques clés

  • Composer plusieurs stratégies de parallélisme (DP, FSDP, TP, CP) dans un seul script d’entraînement via Accelerate et Axolotl.
  • Contrôler le degré de chaque stratégie à l’aide de ParallelismConfig dans Accelerate ou via les champs de configuration dans Axolotl (par exemple, dp_replicate_size, tp_size, dp_shard_size).
  • Le parallélisme de données (DP) en haut : le modèle, les gradients et les états de l’optimiseur sont répliqués entre les dispositifs et les données sont reparties entre eux; prend en charge les configurations multi-nœuds.
  • Fully Sharded Data Parallel (FSDP) fragmentant les poids, les gradients et les états de l’optimiseur pour les grands modèles, échangeant mémoire contre communication; la granularité de regroupement affecte l’échange mémoire/communication.
  • Tensor Parallel (TP) distribue le calcul des couches linéaires entre dispositifs pour une réduction mémoire statique; optimal en un seul node à cause de la communication plus élevée.
  • Context Parallel (CP) segmente les séquences pour atténuer la croissance mémoire des attentions dans les contextes très longs.
  • Scalabilité inter-nœuds avec des backends de communication intra- et inter-nœud pour le entraînement réparti, en profitant des liens rapides intra-nœud (ex. NVLink) et des réseaux inter-nœud plus lents (ex. Infiniband).
  • Exemple de bout en bout dans Accelerate démontrant la configuration d’un DataLoader, d’un optimiseur, d’une boucle d’entraînement et la sauvegarde du modèle; intégration avec Axolotl pour l’affinage à grande échelle.
  • Considérations sur les compromis mémoire-calcul, y compris les options de déchargement (offload), pour permettre l’entraînement de modèles plus grands dans les limites matérielles.

Cas d’usage courants

  • Fine-tuning ou entraînement de modèles avec des dizaines à des centaines de milliards de paramètres sur plusieurs GPU.
  • Scénarios nécessitant des longueurs de contexte très importantes (affinage de longues séquences) où la mémoire d’attention est prépondérante.
  • Utilisateurs souhaitant minimiser la communication entre dispositifs en combinant DP avec FSDP, TP et CP.
  • Configurations à cluster multi-nœuds disponibles, lorsque une approche purement sur un seul nœud ne suffit pas.
  • Situations où la collaboration entre Accelerate et Axolotl simplifie l’ajout de plusieurs stratégies de parallélisme dans les configs existantes.

Setup & installation

L’article évoque la configuration et l’utilisation d’Accelerate avec Axolotl, y compris un script d’entraînement de bout en bout dans le dépôt Accelerate. Il mentionne la classe ParallelismConfig dans Accelerate et les champs de configuration correspondants dans Axolotl pour activer le ND-Parallel, mais ne fournit pas les commandes exactes dans l’extrait.

Remarque: les commandes d’installation et de configuration exactes ne sont pas fournies dans l’extrait. Consultez le dépôt Accelerate et la documentation Axolotl pour les commandes et fichiers de configuration concrets.

# Setup & installation non fournis dans l’extrait source.

Démarrage rapide

Le texte indique un exemple minimal exécutable dans le dépôt Accelerate qui montre :

  • comment configurer un DataLoader, un optimiseur et une boucle d’entraînement,
  • appliquer une ou plusieurs stratégies ND-Parallel via ParallelismConfig (dp_replicate_size, tp_size, dp_shard_size),
  • et sauvegarder le modèle entraîné.

Le code de démarrage rapide n’est pas inclus dans l’extrait fourni. Un exemple minimal est disponible dans le dépôt Accelerate, avec les configurations ND-Parallel et l’intégration Axolotl.

# Démarrage rapide non fourni dans l’extrait source.

Avantages et inconvénients

  • Avantages
  • Permet d’entraîner des modèles volumaux en combinant parallélisme de données, fragmentation mémoire et stratgies de parallélisme de modèle.
  • Réduit l’utilisation mémoire maximale par rapport à une simple réplication DP en utilisant FSDP et CP.
  • Peut s’étendre sur plusieurs nœuds, tirant parti des communications intra-nœud rapides et des réseaux inter-nœud.
  • Configuration flexible via ParallelismConfig et Axolotl pour ajuster les compromis mémoire/ calcul selon le cas d’usage.
  • Inconvénients
  • La configuration devient complexe lorsque le nombre de stratégies et leurs combinaisons augmente.
  • FSDP entre nœuds peut entraîner des surcoûts de communication importants; il existe des recommandations pour éviter FSDP sur toute la longueur d’un nœud dans certains scénarios.
  • TP est plus efficace à l’intérieur d’un seul nœud et peut introduire des surcoûts de synchronisation; une utilisation multi-nœuds nécessite une combinaison avec d’autres stratégies.
  • CP ajoute un partitionnement de données et peut nécessiter un traitement spécifique pour les longues séquences.

Alternatives (brève comparaison)

| Approche | Remarques | Focus d’utilisation typique |---|---|---| | ND-Parallel (Accelerate + Axolotl) | Combine DP, FSDP, TP, CP dans une seule config; exemples dans Accelerate | Entraînement à grande échelle avec plusieurs stratégies dans un seul pipeline |DeepSpeed ZeRO-3 | Économies de mémoire via ZeRO-3; scaling important sur multi-GPU | Modèles très volumineux avec optimisation mémoire ZeRO |DP sur un seul nœud | Parallélisme de données simple sur un seul nœud | Modèles qui tiennent en mémoire d’un seul nœud mais nécessitent plus de débit |

Licence

Les informations de licence ne sont pas explicitement fournies dans le contenu source.

Références

More resources