Alors que beaucoup d’efforts ont été consacrés à l’optimisation de transformer de type décodeur, abandonnant ainsi l’encodeur, nous pensons qu’il est essentiel de maintenir une architecture encodeur-décodeur.
En effet, cette architecture qui présente des performances intéressantes pour l’instruction tuning, est propice à la distillation et semble supérieure aux modèles décodeur lorsqu’elle est finetunée.
Il a aussi été montré que les modèles encodeur-décodeur entraînés avec une modélisation du langage masqué obtiennent une meilleure performance zéro-shot après un finetuning multitâche par rapport à un modèle décodeur. L'encodeur d'une telle architecture est également utilisé dans des modèles de diffusion.
Au-delà du NLP sur lequel nous nous sommes concentrés, l’architecture encodeur-décodeur est très utilisée dans d’autres domaines comme l’audio ou les séries temporelles par exemple.
Dans cette logique, nous avons décidé de nous concentrer sur le T5.
Dans cet article, sont détaillons les optimisations que nous avons mises en place afin de pré-entraîner de manière efficiente un T5 de 147M de paramètres en français en un temps raisonnable (1 461 H pour 419Mds de tokens) et avec des moyens limités (1 A100 ; soit un budget de calcul d'environ 2 200 euros). Pour ce faire, nous avons conçu des noyaux CUDA/Triton afin de rendre la Flash Attention compatible avec T5 et de fournir une inférence linéaire, étendant ainsi la taille du contexte qui peut être prise en compte par le modèle. L'ensemble des optimisations appliquées sont détaillées sur Hugging Face.
Le code de pré-entrainement est disponible sur notre répertoire GitHub sous licence Apache-2.0 et les poids du modèle entraîné sur notre compte Hugging Face.