Introduction

L'entraînement de grands modèles de langage sur de longues séquences est devenu essentiel pour construire des systèmes d'IA capables. Les modèles sont de plus en plus utilisés pour des tâches comme l'analyse de documents, la compréhension de code, la raisonnement complexe et les charges de travail RAG, ce qui nécessite de traiter des séquences de centaines de milliers ou même de millions de jetons.

Contexte Technique

Le mécanisme d'attention dans les transformateurs augmente quadratiquement avec la longueur de la séquence. Pour une séquence de longueur n, l'attention standard nécessite des opérations et de la mémoire pour calculer et stocker la matrice de scores d'attention. Les implémentations optimisées comme FlashAttention réduisent la mémoire à n^2 / t en divisant le calcul et en n'ayant jamais à matérialiser la matrice d'attention complète, mais le calcul reste.

Ulysses Sequence Parallelism (SP) propose une solution élégante en distribuant le calcul d'attention sur plusieurs GPU grâce au parallélisme des têtes d'attention. Ulysses fonctionne en divisant la séquence en morceaux, en calculant les projections de requête, de clé et de valeur pour chaque morceau, puis en redistribuant les données pour que chaque GPU possède toutes les positions de séquence après les projections, mais seulement pour un sous-ensemble de têtes d'attention.

Analyse et Implications

Ulysses nécessite deux opérations de communication de tous à tous par couche d'attention, avec un volume de communication total de n * h * p par GPU, où n est la longueur de la séquence, h est la dimension cachée et p est le degré de parallélisme. Cela présente un avantage significatif par rapport à Ring Attention, qui communique n * h * p^2 par GPU.

Ulysses est intégré dans l'écosystème Hugging Face, notamment avec Accelerate, Transformers Trainer et TRL's SFTTrainer. L'intégration avec Accelerate permet de configurer facilement le parallélisme de séquence avec la classe ParallelismConfig et DeepSpeedSequenceParallelConfig.

Perspective

Ulysses Sequence Parallelism offre une solution prometteuse pour l'entraînement de modèles de langage sur de longues séquences. Cependant, il est important de surveiller les limites de cette approche, notamment en termes de complexité de calcul et de communication. Les prochaines étapes pourraient inclure l'optimisation de l'implémentation et l'exploration de nouvelles applications pour Ulysses dans le domaine de l'IA.