Ctranslate2 es una biblioteca C ++ y Python para una inferencia eficiente con los modelos de transformadores.
El proyecto implementa un tiempo de ejecución personalizado que aplica muchas técnicas de optimización de rendimiento, como cuantización de pesas, fusión de capas, reordenamiento por lotes, etc., para acelerar y reducir el uso de la memoria de los modelos de transformadores en CPU y GPU.
Los siguientes tipos de modelo son compatibles actualmente:
Los modelos compatibles deben convertirse primero en un formato de modelo optimizado. La biblioteca incluye convertidores para múltiples marcos:
El proyecto está orientado a la producción y viene con garantías de compatibilidad hacia atrás, pero también incluye características experimentales relacionadas con la compresión del modelo y la aceleración de inferencia.
Algunas de estas características son difíciles de lograr con los marcos de aprendizaje profundo estándar y son la motivación para este proyecto.
Ctranslate2 se puede instalar con PIP:
pip install ctranslate2El módulo Python se usa para convertir modelos y puede traducir o generar texto con pocas líneas de código:
translator = ctranslate2 . Translator ( translation_model_path )
translator . translate_batch ( tokens )
generator = ctranslate2 . Generator ( generation_model_path )
generator . generate_batch ( start_tokens )Consulte la documentación para obtener más información y ejemplos.
Traducimos el conjunto de pruebas en-> DE NewStest2014 con múltiples modelos:
El punto de referencia informa el número de tokens objetivo generados por segundo (más alto es mejor). Los resultados se agregan en múltiples ejecuciones. Vea los scripts de referencia para obtener más detalles y reproducir estos números.
Tenga en cuenta que los resultados presentados a continuación solo son válidos para la configuración utilizada durante este punto de referencia: el rendimiento absoluto y relativo puede cambiar con diferentes configuraciones.
| Tokens por segundo | Max. memoria | Bleu | |
|---|---|---|---|
| Modelo OpenNMT-TF WMT14 | |||
| OpenNMT-TF 2.31.0 (con TensorFlow 2.11.0) | 209.2 | 2653Mb | 26.93 |
| Modelo OpenNMT-PY WMT14 | |||
| OpenNMT-PY 3.0.4 (con Pytorch 1.13.1) | 275.8 | 2012MB | 26.77 |
| - int8 | 323.3 | 1359MB | 26.72 |
| Ctranslate2 3.6.0 | 658.8 | 849mb | 26.77 |
| - int16 | 733.0 | 672 MB | 26.82 |
| - int8 | 860.2 | 529mb | 26.78 |
| - int8 + vmap | 1126.2 | 598mb | 26.64 |
| Modelo Opus-MT | |||
| Transformers 4.26.1 (con Pytorch 1.13.1) | 147.3 | 2332MB | 27.90 |
| Marian 1.11.0 | 344.5 | 7605mb | 27.93 |
| - int16 | 330.2 | 5901mb | 27.65 |
| - int8 | 355.8 | 4763mb | 27.27 |
| Ctranslate2 3.6.0 | 525.0 | 721MB | 27.92 |
| - int16 | 596.1 | 660MB | 27.53 |
| - int8 | 696.1 | 516 MB | 27.65 |
Ejecutado con 4 hilos en una instancia C5.2xLarge Amazon EC2 equipada con una CPU Intel (R) Xeon (R) Platinum 8275cl.
| Tokens por segundo | Max. Memoria de GPU | Max. Memoria de la CPU | Bleu | |
|---|---|---|---|---|
| Modelo OpenNMT-TF WMT14 | ||||
| OpenNMT-TF 2.31.0 (con TensorFlow 2.11.0) | 1483.5 | 3031MB | 3122mb | 26.94 |
| Modelo OpenNMT-PY WMT14 | ||||
| OpenNMT-PY 3.0.4 (con Pytorch 1.13.1) | 1795.2 | 2973mb | 3099mb | 26.77 |
| FastasterTransformer 5.3 | 6979.0 | 2402MB | 1131MB | 26.77 |
| - flotante16 | 8592.5 | 1360MB | 1135MB | 26.80 |
| Ctranslate2 3.6.0 | 6634.7 | 1261MB | 953 MB | 26.77 |
| - int8 | 8567.2 | 1005Mb | 807MB | 26.85 |
| - flotante16 | 10990.7 | 941MB | 807MB | 26.77 |
| - int8 + float16 | 8725.4 | 813MB | 800MB | 26.83 |
| Modelo Opus-MT | ||||
| Transformers 4.26.1 (con Pytorch 1.13.1) | 1022.9 | 4097mb | 2109MB | 27.90 |
| Marian 1.11.0 | 3241.0 | 3381MB | 2156 MB | 27.92 |
| - flotante16 | 3962.4 | 3239MB | 1976MB | 27.94 |
| Ctranslate2 3.6.0 | 5876.4 | 1197MB | 754mb | 27.92 |
| - int8 | 7521.9 | 1005Mb | 792mb | 27.79 |
| - flotante16 | 9296.7 | 909MB | 814 MB | 27.90 |
| - int8 + float16 | 8362.7 | 813MB | 766 MB | 27.90 |
Ejecutado con CUDA 11 en una instancia G5.xlare Amazon EC2 equipada con una GPU NVIDIA A10G (Versión del controlador: 510.47.03).