Rendre la traduction automatique neuronale efficace et accessible à tous avec OpenNMT

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.

L'architecture Transformer se compose de plusieurs blocs de construction de réseaux neuronaux exécutés de manière séquentielle. L'ajout de blocs plus nombreux ou plus gros augmente la capacité d'apprentissage du modèle, mais ralentit son exécution.
La plupart de ces paramètres de modèle sont ensuite utilisés dans des multiplications matricielles coûteuses à exécuter en raison de leur complexité non linéaire. Cette opération peut être accélérée en ajoutant plus de puissance de calcul, par exemple en augmentant le nombre de cœurs de processeur, en utilisant un processeur plus rapide ou en utilisant un GPU à la place. Cependant, il existe plusieurs autres façons d'améliorer les performances :

  • 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 :

Implémentation C++ optimisée pour CPU et GPU

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.

GPUMots par secondeMémoire GPU max.Mémoire CPU max.BLEU sur WMT14
Marian 1,1128332 986 Mo1 713 Mo27.9
CTranslate2 2,134709 (+66%)816 Mo (-73%)560 Mo (-67%)27.9
Comparaison des traductions GPU FP16. Exécuté avec CUDA 11.2 sur une instance Amazon EC2 g4dn.xlarge équipée d'un GPU NVIDIA® T4 (version du pilote : 470.82.01).

UCMots par secondeMémoire max.BLEU sur WMT14
Marian 1,118578 169 Mo27.3
CTranslate2 2,131486 (+73%)746 Mo (-91%)27.7 (+0.4)
Comparaison des traductions du processeur INT8. Exécuté avec 8 threads sur une instance Amazon EC2 c5.metal équipée d'un processeur Intel® Xeon® Platinum 8275CL.

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.

 

Auteur
Guillaume Klein, Open NMT - Tech Lead Software Engineering
Temps
Lecture : 4 min.
S'inscrire à la newsletter
Retrouvez toute l'actu et les dernières technos. Un magazine conçu par SYSTRAN