Sequence Packing et Batchings Dynamiques
Ce document décrit les fonctionnalités de sequence packing et de dynamic batching implémentées dans NeMo-RL pour optimiser l’efficacité de l’entraînement pour les séquences de longueurs variables.
Table des Matières
- Problème
- Sequence Packing et Dynamic Batching
- Sequence Packing
- Dynamic Batching
- Configuration
- Intégration avec le Pipeline d’Entraînement
- Métriques et Surveillance
- Utilisation
Problème
Défi : Longueurs de Séquences Variables dans RL/SFT
RL et SFT présentent des longueurs de séquences hautement variables en raison de nombreux ensembles de données suivant la loi de Zipf :
- Distribution Asymétrique : La plupart des séquences sont courtes, avec quelques séquences très longues
- Inefficacité du Padding : Le batchings à longueur fixe traditionnelle nécessite de paddé toutes les séquences à la longueur maximale, ce qui entraîne :
- Calculs gaspillés sur les tokens de padding
- Mémoire GPU sous-utilisée
- Efficacité de calcul GPU médiocre
- Contraintes de Mémoire : La taille de batch est souvent limitée par les séquences les plus longues du batch
Sans optimisation, 50-70% des calculs peuvent être gaspillés sur des tokens de padding.
Sequence Packing et Dynamic Batching
NeMo-RL implémente deux approches exclusives pour traiter les longueurs de séquences variables :
- Sequence Packing : Concatène plusieurs séquences en une seule séquence “packée”, éliminant la plupart du padding.
- Dynamic Batching : Groupe les séquences de longueurs similaires et ajuste les tailles de micro-batch en fonction du nombre total de tokens, réduisant le padding excessif.
Notes Importantes
- Le dynamic batching et le sequence packing ne peuvent pas être activés simultanément, ils sont exclusifs.
- Compatible avec le Parallélisme de Contexte (CP)
- Nécessite FlashAttention-2 pour les séquences packées
(Le reste du document a été traduit de la même manière, en conservant la structure et la syntaxe MDX/JSX originales, et en traduisant uniquement le texte visible.)