Votre GPU n'est pas trop petit… c'est votre configuration qui l'est

BBetter Stack
컴퓨터/소프트웨어자격증/평생교육AI/미래기술

Transcript

00:00:00Voici DeepSpeed, la bibliothèque open source de Microsoft qui s'intègre directement à PyTorch pour résoudre le vrai problème de la mémoire.
00:00:07Elle vous permet d'entraîner des modèles qui, normalement, font planter votre GPU instantanément, sans le surcharger. Les gros modèles n'échouent pas parce qu'ils sont lents.
00:00:14Ils échouent parce que les états de l'optimiseur, les gradients et les paramètres finissent par saturer votre VRAM. Le secret de DeepSpeed, c'est ZeRO, qui fragmente (sharding) les états d'entraînement.
00:00:23Ainsi, vous ne stockez pas les mêmes données partout. Nous publions des vidéos régulièrement, alors n'oubliez pas de vous abonner.
00:00:30Maintenant, passons à l'action. Je vais lancer tout ça sur Google Colab puisque je suis sur un Mac M4 Pro.
00:00:40Je n'ai donc pas de GPU Nvidia, ce qui complique un peu les choses, mais je peux quand même utiliser Colab à la place.
00:00:46Je vais d'abord vérifier mes GPU, puis nous pourrons installer tous nos packages via pip.
00:00:51Je vais installer PyTorch, Hugging Face et DeepSpeed, puis lancer “ds_report” pour vérifier la configuration de CUDA et du compilateur.
00:00:59Encore quelques installations pour m'assurer que tout fonctionne parfaitement.
00:01:02Ensuite, nous allons créer notre fichier de configuration JSON pour paramétrer DeepSpeed. Ce fichier, c'est le cœur du système.
00:01:09Nous allons commencer avec ZeRO Stage 2, qui fragmente les états de l'optimiseur et les gradients sur les différents GPU.
00:01:14Cela réduit considérablement l'utilisation de la mémoire, tandis que les paramètres du modèle restent répliqués. Ne vous prenez pas trop la tête, car ça m'a rendu fou.
00:01:22Commencez simplement par la documentation officielle, changez une chose à la fois et résistez à l'envie d'ajouter des configurations au hasard.
00:01:28Vous trouverez la config sur les docs de Hugging Face et de DeepSpeed.
00:01:34C'est aussi de là que j'ai tiré la majeure partie de mon script Python.
00:01:37J'ai tout de même fait quelques ajustements pour que mon système Mac gère mieux l'exécution.
00:01:42Si cette étape échoue, arrêtez-vous là : la plupart des problèmes DeepSpeed sont des incompatibilités CUDA, pas des erreurs dans votre modèle.
00:01:48Lançons tout ça maintenant et regardons le résultat.
00:01:51Je vais utiliser un petit jeu de données importé pour cet exemple, afin que l'exécution soit plus rapide.
00:01:58Et voilà, après quelques minutes. On peut voir les étapes effectuées ainsi que le pic de mémoire GPU utilisé.
00:02:03C'est vrai, la perte d'entraînement (loss) n'a pas beaucoup baissé sur cette session.
00:02:08Mais nous pourrions optimiser cela ou utiliser un jeu de données plus large pour obtenir de meilleurs résultats.
00:02:13Voici ce que les gens pensent obtenir, avant de tomber quand même sur une erreur “out of memory”.
00:02:16ZeRO se décline en plusieurs étapes, chacune répondant à une question : que puis-je arrêter de stocker sur un seul GPU ?
00:02:24L'étape 1 fragmente les états de l'optimiseur ; l'étape 2 fait de même tout en ajoutant les gradients.
00:02:30Là, on commence à réduire sérieusement ce qui grignote silencieusement votre mémoire. Puis, il y a ZeRO Stage 3.
00:02:36C'est la version complète. Elle fragmente les états de l'optimiseur, les gradients ET les paramètres.
00:02:40C'est le gain de mémoire le plus massif, mais parfois, cela ne suffit toujours pas.
00:02:45Si le modèle ne rentre toujours pas, ZeRO-Infinity peut décharger les données sur le CPU ou même sur un NVMe.
00:02:50Certes, on échange de la vitesse contre de l'échelle. Mais parfois, la vraie victoire est simplement de réussir à faire tourner le modèle.
00:02:56Si vous vous dites que la mémoire n'est pas votre seul souci, vous avez raison. DeepSpeed supporte le parallélisme 3D : données, pipeline et tenseur.
00:03:04Il intègre aussi le support des modèles “Mixture of Experts” (MoE).
00:03:09Ainsi, les modèles dits “sparses” ne vous ruinent pas en termes de calcul.
00:03:12On a donc de vraies options. DeepSpeed s'intègre très bien avec Hugging Face et Accelerate.
00:03:19Pas besoin de tout construire de zéro.
00:03:21On prend l'essentiel et on ignore le reste. Après, les performances dépendent énormément de votre configuration.
00:03:27Ne vous fiez donc pas toujours aux chiffres impressionnants. J'ai essayé de le lancer plusieurs fois.
00:03:30Mais encore une fois, avec mon M4 Pro, je n'ai pas pu optimiser davantage avec ce modèle de base.
00:03:36Difficile à dire dans mon cas, mais d'autres projets DeepSpeed ont montré des gains de débit majeurs.
00:03:41Surtout quand la mémoire était le facteur limitant. Sur Windows ou Linux, les gains peuvent être énormes.
00:03:46La meilleure approche ? Essayez par vous-même en partant des configurations officielles.
00:03:51C'est ce que j'ai fait : adaptation pour Mac, puis résolution des problèmes CUDA.
00:03:56Surveillez la RAM du CPU si vous activez le déchargement (offload), et si vous passez au multi-GPU plus tard,
00:04:01Accelerate vous facilitera la tâche. DeepSpeed, c'est un peu le bouton “je refuse d'être à court de mémoire aujourd'hui”.
00:04:07Une fois qu'on a compris ZeRO et le fonctionnement de l'offloading, les modèles géants deviennent accessibles sur du matériel limité.
00:04:14Mais il est vrai que la configuration initiale peut être déroutante au début.
00:04:17Abonnez-vous si cela vous a fait gagner du temps de GPU ou si vous aimez ce genre d'outils de dev. À bientôt pour une prochaine vidéo !

Key Takeaway

DeepSpeed transforme la gestion de la mémoire GPU grâce à l'optimiseur ZeRO, rendant l'entraînement de modèles massifs accessible même sur des configurations matérielles modestes.

Highlights

DeepSpeed est une bibliothèque open source de Microsoft optimisée pour PyTorch.

L'algorithme ZeRO (Zero Redundancy Optimizer) permet de fragmenter les données d'entraînement pour économiser la VRAM.

La configuration se fait via un fichier JSON définissant les étapes (stages) de ZeRO.

Le déchargement (offload) sur CPU ou NVMe permet d'entraîner des modèles géants sur du matériel limité.

L'intégration avec Hugging Face et Accelerate simplifie grandement la mise en œuvre technique.

La plupart des erreurs rencontrées sont liées à des incompatibilités CUDA plutôt qu'au modèle lui-même.

Timeline

Introduction à DeepSpeed et au problème de la mémoire

Le présentateur introduit DeepSpeed comme la solution de Microsoft pour pallier les limites de mémoire des GPU lors de l'entraînement de grands modèles. Il explique que les échecs d'entraînement ne sont pas dus à une lenteur de calcul, mais à la saturation de la VRAM par les états de l'optimiseur, les gradients et les paramètres. Le concept clé présenté est ZeRO, qui utilise le partitionnement (sharding) pour éviter la redondance des données sur les différents processeurs. Cette approche permet d'exécuter des modèles qui, autrement, feraient planter le système instantanément. L'objectif est de poser les bases théoriques avant de passer à la démonstration technique.

Configuration de l'environnement et installation

L'auteur utilise Google Colab pour sa démonstration car il travaille sur un Mac M4 Pro dépourvu de GPU Nvidia compatible. Il détaille le processus d'installation des bibliothèques essentielles telles que PyTorch, Hugging Face et DeepSpeed via le gestionnaire de paquets pip. Un point crucial est l'utilisation de la commande "ds_report" pour valider la configuration de CUDA et du compilateur avant de commencer. Cette étape de vérification est présentée comme indispensable pour s'assurer que l'environnement est prêt pour les calculs intensifs. Il souligne que la préparation minutieuse de l'environnement évite de nombreux problèmes de compatibilité ultérieurs.

Paramétrage de ZeRO Stage 2 et conseils pratiques

Cette section se concentre sur la création du fichier de configuration JSON, décrit comme le cœur du système DeepSpeed. L'explication porte sur le ZeRO Stage 2, qui fragmente les états de l'optimiseur et les gradients tout en gardant les paramètres répliqués. L'auteur conseille vivement de s'appuyer sur la documentation officielle de Hugging Face et de ne modifier qu'un paramètre à la fois pour éviter toute confusion. Il mentionne avoir dû ajuster son script Python pour que son système gère correctement l'exécution malgré l'absence de GPU local. Le message principal est que la majorité des erreurs proviennent de mauvaises configurations CUDA et non de la logique interne du modèle.

Exécution du modèle et analyse des résultats

Le script est lancé en utilisant un petit jeu de données importé pour garantir une exécution rapide durant la vidéo. Après quelques minutes de traitement, l'auteur analyse les résultats, notamment le pic de mémoire GPU utilisé et la progression des étapes d'entraînement. Bien que la perte (loss) n'ait pas chuté de manière significative, l'expérience prouve que le modèle tourne sans erreur de mémoire. Il explique que ce résultat peut être amélioré en optimisant les hyperparamètres ou en utilisant un jeu de données plus vaste. Cette phase démontre concrètement l'efficacité de DeepSpeed pour stabiliser l'exécution sur une infrastructure cloud standard.

Exploration approfondie des étapes ZeRO et de l'offloading

L'explication détaille la hiérarchie des étapes de ZeRO, allant du Stage 1 au Stage 3, ce dernier fragmentant l'intégralité des données d'entraînement. Pour les cas les plus extrêmes, la fonction ZeRO-Infinity est présentée comme une solution permettant de décharger les données vers la RAM du CPU ou un disque NVMe. Cette stratégie permet d'échanger de la vitesse d'exécution contre une capacité d'échelle massive pour des modèles géants. L'auteur mentionne également des fonctionnalités avancées comme le parallélisme 3D et le support des modèles "Mixture of Experts" (MoE). Ces outils offrent aux développeurs des options flexibles pour gérer des architectures complexes sans se ruiner en matériel de calcul.

Conclusion et recommandations finales

Le narrateur conclut en soulignant que DeepSpeed s'intègre parfaitement avec l'écosystème Hugging Face, évitant ainsi de devoir tout reconstruire manuellement. Il rappelle que les gains de performance réels dépendent fortement de la configuration matérielle, surtout sur les systèmes Linux ou Windows. Bien que la configuration initiale puisse paraître déroutante, la maîtrise de l'offloading et de ZeRO rend les modèles d'IA géants accessibles aux développeurs indépendants. Il encourage les spectateurs à expérimenter par eux-mêmes en partant des exemples officiels pour surmonter les obstacles techniques. La vidéo se termine sur une invitation à s'abonner pour découvrir d'autres outils de développement efficaces.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video