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 !