GUIDE Technique

Optimiseurs ZeRO et Sharded

ZeRO (Zero Redundancy Optimizer) élimine le gaspillage de mémoire dû au parallélisme des données en partageant l'état, les gradients et les pondérations de l'optimiseur entre les GPU.

2 minutes de lectureDernière mise à jour

Aperçu

It lets you train enormous models with the simplicity of data parallelism but a fraction of the per-GPU memory.

Plongée profonde

Dans le parallélisme de données ordinaire, chaque GPU stocke une copie complète redondante de l'état, des gradients et des paramètres de l'optimiseur, ce qui représente un énorme gaspillage, en particulier pour Adam, où l'état de l'optimiseur peut être plusieurs fois supérieur à la taille du modèle lui-même. ZeRO, introduit par Microsoft dans DeepSpeed, supprime cette redondance en partitionnant ces tenseurs entre les GPU afin que chaque appareil ne possède qu'une tranche. ZeRO se décline en trois étapes progressives : l'étape 1 partage l'état de l'optimiseur de fragments, l'étape 2 ajoute le partitionnement par gradient et l'étape 3 fragmente les paramètres eux-mêmes. Si nécessaire, les GPU rassemblent les tranches manquantes via la communication, les calculent, puis les libèrent. Le résultat est une mémoire considérablement réduite par GPU, permettant la formation de milliards, voire de milliards de paramètres, tout en conservant le modèle de programmation simple du parallélisme des données.

Aperçu technique

ZeRO échange des communications supplémentaires contre des économies de mémoire. À l'étape 3, avant le passage en avant d'une couche, un regroupement complet collecte tous les paramètres de cette couche sur chaque GPU ; Ensuite, les tranches non possédées sont supprimées pour récupérer de la mémoire. Les dégradés sont réduits et dispersés afin que chaque GPU conserve uniquement la tranche de dégradé correspondant aux paramètres qu'il possède. Le FSDP (Fully Sharded Data Parallel) de PyTorch implémente la même idée de manière native, en encapsulant les modules pour les fragmenter et les repartir à la volée.

Impact stratégique

Coût et budget

Les décisions en matière d'architecture déterminent les performances et les coûts d'exploitation pendant des années.

Décisions plus claires

La formation technique aide les équipes à choisir la bonne pile, pas seulement la plus récente.

Contrôle qualité

De meilleurs choix d’ingénierie réduisent les incidents de fiabilité en production.

L'avenir de ZeRO et des optimiseurs fragmentés

Le partage devient la norme par défaut pour la formation à grande échelle plutôt qu’une option exotique. Attendez-vous à une intégration plus profonde avec le déchargement (pousser les tranches vers le CPU ou NVMe via ZeRO-Infinity), un meilleur chevauchement de la collecte totale et de la réduction de la diffusion avec le calcul pour masquer leur coût, et des combinaisons avec le parallélisme du tenseur et du pipeline. À mesure que les modèles continuent de croître, les optimiseurs partitionnés économes en mémoire sont essentiels pour les adapter à des budgets matériels réalistes.

Mise en œuvre dans le monde réel

Utilisation de DeepSpeed ​​ZeRO Stage 2 pour affiner un modèle de langage de plusieurs milliards de paramètres qui, autrement, déborderait la mémoire du GPU.

Formation avec PyTorch FSDP, qui partage les paramètres, les dégradés et l'état de l'optimiseur sur les GPU et les rassemble par couche à la demande.

Application de ZeRO-Offload pour transférer l'état de l'optimiseur vers la mémoire du processeur, permettant à un seul GPU d'entraîner un modèle plusieurs fois plus grand que sa VRAM.

Mise à l'échelle d'un modèle comportant des milliards de paramètres avec ZeRO-Infinity en diffusant des fragments de paramètres à partir du stockage NVMe lorsque la mémoire GPU et CPU est épuisée.

Risques et garde-fous

L’optimisation d’un benchmark peut masquer des faiblesses plus larges du système.

Les coûts d’infrastructure et de maintenance sont souvent sous-estimés.

Les lacunes en matière de sécurité et d’observabilité peuvent se creuser à mesure que les systèmes deviennent plus complexes.

Feuille de route de mise en œuvre

1

Définissez les objectifs de latence, de qualité et de coût avant la mise en œuvre.

2

Benchmark dans des conditions de charge et de données réalistes.

3

Surveillance des instruments pour détecter les erreurs, la dérive et l'impact sur l'utilisateur.

4

Préparez les chemins de restauration et de réponse aux incidents avant la mise à l’échelle.

Continuez à explorer

Free newsletter

Get the daily AI briefing

Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.

One email each weekday. Unsubscribe in one click. We never sell or share your address.

Test yourself

Take the ZeRO and Sharded Optimizers quiz

Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.

Démarrer le quiz

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

Guide suivant

Lookahead et Lion Optimizers

Questions fréquemment posées

What is ZeRO and Sharded Optimizers?

ZeRO (Zero Redundancy Optimizer) élimine le gaspillage de mémoire dû au parallélisme des données en partageant l'état, les gradients et les pondérations de l'optimiseur entre les GPU. Il vous permet d'entraîner d'énormes modèles avec la simplicité du parallélisme des données mais avec une fraction de la mémoire par GPU.

Quelle redondance ZeRO élimine-t-il par rapport au simple parallélisme des données ?

Le parallélisme des données standard stocke une copie complète de l'état, des gradients et des poids de l'optimiseur sur chaque GPU ; ZeRO les fragmente afin que chaque GPU ne contienne qu'une tranche.

Pourquoi l'état de l'optimiseur est-il souvent le plus gros consommateur de mémoire chez Adam ?

Adam maintient des estimations courantes telles que les premier et deuxième moments par paramètre, qui, combinées aux poids principaux fp32, peuvent éclipser la taille du modèle.

Qu'est-ce que ZeRO Stage 3 fragmente par rapport aux Stages 1 et 2 ?

L'étape 1 partage l'état de l'optimiseur, l'étape 2 ajoute des dégradés et l'étape 3 va plus loin en partageant également les paramètres du modèle sur les GPU.

Dans ZeRO Stage 3, comment un GPU obtient-il tous les paramètres dont il a besoin pour le passage en avant d'une couche ?

Avant de calculer une couche, un all-gather assemble tous ses paramètres sur chaque GPU ; une fois cela fait, les tranches non possédées sont libérées pour récupérer de la mémoire.

Quelle fonctionnalité PyTorch implémente nativement le partitionnement de style ZeRO ?

Le système FSDP (Fully Sharded Data Parallel) de PyTorch partage les paramètres, les gradients et l'état de l'optimiseur, les rassemblant et les repartageant à la volée, reflétant ZeRO.