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 :

Optimized C++ implementation for CPU and GPU

CTranslate2 is implemented from the ground up in C++ and includes many optimizations to accelerate Transformer models and reduce their memory usage: layer fusions, in-place transformations, batch layout optimizations, etc.

Parallel translations with a single model instance

The engine is designed to allow multiple translations to run in parallel while keeping a single version of the model in memory.

Dynamic memory usage

The memory usage changes dynamically depending on the request size while still meeting performance requirements by reusing previous memory buffers.

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 2986 MB 1713 MB 27.9
CTranslate2 2.13 4709 (+66%) 816 MB (-73%) 560 MB (-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).

CPU Mots par seconde Mémoire max. BLEU sur WMT14
Marian 1.11 857 8169 MB 27.3
CTranslate2 2.13 1486 (+73%) 746 MB (-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 :

pip install ctranslate2

New Python binaries are regularly released for several platforms: Linux, Linux ARM, Windows, and macOS.

At SYSTRAN, we used these latest optimizations in our products to improve scalability, response time, and resource usage. All translations running on SYSTRAN Translate are powered by the CTranslate2 inference engine.

 

Auteur
Alexandre, Translation technology specialist
Temps
Lecture : 4 min.
S'inscrire à la newsletter
Retrouvez toute l'actu et les dernières technos. Un magazine conçu par SYSTRAN