OpenNMT est un écosystème open source pour la traduction automatique neuronale lancé en 2016 par SYSTRAN et le groupe Harvard NLP. Le projet a été utilisé dans de nombreuses applications de recherche et industrielles, y compris SYSTRAN Translate et SYSTRAN Model Studio.
L'objectif principal d'OpenNMT est de rendre la traduction automatique neuronale accessible à tous. Cependant, la traduction automatique neuronale est notoirement coûteuse à exécuter car les modèles de traduction automatique nécessitent souvent beaucoup de mémoire et de puissance de calcul. Au début de ce projet, les ingénieurs de SYSTRAN se sont concentrés sur l'amélioration de l'efficacité de l'inférence OpenNMT pour réduire les coûts et améliorer la productivité.
Le défi informatique de la traduction automatique neuronale
Les modèles de traduction automatique neuronale sont généralement basés sur l'architecture Transformer qui alimente de nombreuses avancées récentes dans le traitement du langage naturel. Une variante commune connue sous le nom de "grand transformateur" contient environ 300 millions de paramètres qui sont réglés au cours d'une phase d'apprentissage. Étant donné que les paramètres sont stockés à l'aide de nombres à virgule flottante 32 bits, le modèle à lui seul prend au moins 1,2 Go sur disque et en mémoire.
- En faire moins : évitez les calculs en comprenant et en contrôlant l'exécution en détail.
- Faire mieux : optimisez les calculs avec une parallélisation améliorée et des instructions spécifiques au matériel.
- Faire différemment : remplacez les calculs par des approximations plus rapides.
Les ingénieurs de SYSTRAN ont exploré toutes ces méthodes dans le cadre du projet OpenNMT et ont publié CTranslate2, l'un des moteurs d'inférence les plus complets et les plus efficaces pour les modèles de traduction automatique neuronale.
CTranslate2 : le moteur d'inférence OpenNMT avec une efficacité de pointe
Sorti en 2019, CTranslate2 est un moteur d'inférence rapide et complet pour les modèles de traduction automatique neuronale, en particulier les modèles Transformer. Voici les principales caractéristiques du projet :
CTranslate2 est implémenté de A à Z en C++ et comprend de nombreuses optimisations pour accélérer les modèles Transformer et réduire leur utilisation de la mémoire : fusions de couches, transformations sur place, optimisations de mise en page par lots, etc.
Traductions parallèles avec une seule instance de modèle
Le moteur est conçu pour permettre à plusieurs traductions de s'exécuter en parallèle tout en gardant une seule version du modèle en mémoire.
Utilisation dynamique de la mémoire
L'utilisation de la mémoire change de manière dynamique en fonction de la taille de la demande tout en respectant les exigences de performances en réutilisant les tampons de mémoire précédents.
Quantification du modèle et précision réduite
La conversion des paramètres du modèle de nombres 32 bits en 16 bits ou 8 bits est une stratégie efficace pour réduire la taille du modèle et accélérer son exécution. CTranslate2 peut convertir des paramètres en virgules flottantes 16 bits (FP16), en entiers 16 bits (INT16) et en entiers 8 bits (INT8).
Construisez une fois, exécutez partout
Un binaire peut contenir des chemins de code optimisés pour plusieurs architectures de jeu d'instructions CPU (AVX, AVX2, AVX512) et familles de CPU (Intel, AMD) qui sont résolues au moment de l'exécution.
Méthodes de décodage interactives
La bibliothèque propose des méthodes pour compléter une traduction partielle (complétion automatique) et renvoyer des mots alternatifs à une position spécifique dans la traduction.
Prise en charge de plusieurs cadres d'entraînements
En plus des modèles Transformer formés avec OpenNMT, le moteur prend en charge les modèles formés avec Fairseq et Marian qui sont d'autres kits d'outils NMT open source populaires. Le projet comprend des scripts de conversion qui transforment ces différents modèles en une représentation de modèle unifiée. Les développeurs peuvent implémenter leur propre script de conversion et bénéficier du runtime CTranslate2 si leurs modèles suivent un ensemble de spécifications.
Performance de pointe
D'autres projets open-source ont le même intérêt pour l'efficacité. Par exemple, Marian, une boîte à outils NMT développée par Microsoft et l'Université d'Édimbourg, est également implémentée en C++ pur et inclut des optimisations telles que la quantification de modèle et la précision réduite.
Pour comparer l'efficacité de chaque système, nous avons utilisé le Modèle OPUS-MT anglais-allemand qui a été formé avec Marian et l'a converti en CTranslate2. Les performances sont ainsi comparées pour une qualité de traduction fixée (même modèle et mêmes paramètres de décodage). Les résultats ont été agrégés sur plusieurs exécutions pour éliminer les valeurs aberrantes.
GPU | Mots par seconde | Mémoire GPU max. | Mémoire CPU max. | BLEU sur WMT14 |
---|---|---|---|---|
Marian 1,11 | 2833 | 2 986 Mo | 1 713 Mo | 27.9 |
CTranslate2 2,13 | 4709 (+66%) | 816 Mo (-73%) | 560 Mo (-67%) | 27.9 |
UC | Mots par seconde | Mémoire max. | BLEU sur WMT14 |
---|---|---|---|
Marian 1,11 | 857 | 8 169 Mo | 27.3 |
CTranslate2 2,13 | 1486 (+73%) | 746 Mo (-91%) | 27.7 (+0.4) |
Sur GPU et CPU, CTranslate2 est plus rapide et utilise beaucoup moins de mémoire pour la même qualité. La quantification de modèle 8 bits appliquée par CTranslate2 sur CPU est également capable de conserver plus de qualité selon la métrique BLEU.
Plus de résultats et les scripts pour reproduire ce benchmark sont disponibles sur GitHub.
Rendre la traduction automatique neuronale efficace et accessible à tous avec OpenNMT
outes ces fonctionnalités et optimisations sont disponibles gratuitement dans le référentiel open source. La bibliothèque comprend un wrapper Python qui permet aux développeurs de démarrer facilement. Il peut être installé comme n'importe quel autre package Python avec une seule commande :
installation pip ctranslate2
De nouveaux binaires Python sont régulièrement publiés pour plusieurs plateformes : Linux, Linux ARM, Windows et macOS.
Chez SYSTRAN, nous avons utilisé ces dernières optimisations dans nos produits pour améliorer l'évolutivité, le temps de réponse et l'utilisation des ressources. Toutes les traductions en cours d'exécution sur Traduction SYSTRAN sont alimentés par le moteur d'inférence CTranslate2.