Passer à la navigation

Sequence Packing et Batchings Dynamiques

Afficher en Markdown

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

  1. Problème
  2. Sequence Packing et Dynamic Batching
  3. Sequence Packing
  4. Dynamic Batching
  5. Configuration
  6. Intégration avec le Pipeline d’Entraînement
  7. Métriques et Surveillance
  8. 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 :

  1. Sequence Packing : Concatène plusieurs séquences en une seule séquence “packée”, éliminant la plupart du padding.
  2. 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.)