O CTRANSLATE2 é uma biblioteca C ++ e Python para inferência eficiente nos modelos de transformadores.
O projeto implementa um tempo de execução personalizado que aplica muitas técnicas de otimização de desempenho, como quantização de pesos, fusão de camadas, reordenação de lote etc., para acelerar e reduzir o uso de memória dos modelos de transformadores na CPU e GPU.
Os seguintes tipos de modelo são suportados atualmente:
Os modelos compatíveis devem ser convertidos primeiro em um formato de modelo otimizado. A biblioteca inclui conversores para várias estruturas:
O projeto é orientado para a produção e vem com garantias de compatibilidade com versões anteriores, mas também inclui características experimentais relacionadas à compressão do modelo e aceleração de inferência.
Alguns desses recursos são difíceis de alcançar com estruturas de aprendizado profundo padrão e são a motivação para este projeto.
Ctranslate2 pode ser instalado com PIP:
pip install ctranslate2O módulo Python é usado para converter modelos e pode traduzir ou gerar texto com poucas linhas 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 a documentação para obter mais informações e exemplos.
Traduzimos o conjunto de testes do EN-> de Newstest2014 com vários modelos:
O benchmark relata o número de tokens de destino gerados por segundo (mais alto é melhor). Os resultados são agregados em várias execuções. Consulte os scripts de referência para obter mais detalhes e reproduzir esses números.
Observe que os resultados apresentados abaixo são válidos apenas para a configuração usada durante esta referência: o desempenho absoluto e relativo pode mudar com diferentes configurações.
| Tokens por segundo | Máx. memória | Bleu | |
|---|---|---|---|
| Modelo OpenNMT-TF WMT14 | |||
| Opennmt-tf 2.31.0 (com Tensorflow 2.11.0) | 209.2 | 2653MB | 26.93 |
| Modelo Opennmt-Py WMT14 | |||
| Opennmt-Py 3.0.4 (com Pytorch 1.13.1) | 275.8 | 2012MB | 26.77 |
| - Int8 | 323.3 | 1359 MB | 26.72 |
| Ctranslate2 3.6.0 | 658.8 | 849 MB | 26.77 |
| - Int16 | 733.0 | 672 MB | 26.82 |
| - Int8 | 860.2 | 529 MB | 26.78 |
| - INT8 + VMAP | 1126.2 | 598 MB | 26.64 |
| Modelo Opus-MT | |||
| Transformers 4.26.1 (com 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 | 721 MB | 27.92 |
| - Int16 | 596.1 | 660MB | 27.53 |
| - Int8 | 696.1 | 516 MB | 27.65 |
Executado com 4 threads em uma instância C5.2xlarge Amazon EC2 equipada com uma CPU Intel (R) Xeon (R) Platinum 8275Cl.
| Tokens por segundo | Máx. Memória da GPU | Máx. Memória da CPU | Bleu | |
|---|---|---|---|---|
| Modelo OpenNMT-TF WMT14 | ||||
| Opennmt-tf 2.31.0 (com Tensorflow 2.11.0) | 1483.5 | 3031MB | 3122MB | 26.94 |
| Modelo Opennmt-Py WMT14 | ||||
| Opennmt-Py 3.0.4 (com Pytorch 1.13.1) | 1795.2 | 2973MB | 3099 MB | 26.77 |
| Fastertransformer 5.3 | 6979.0 | 2402 MB | 1131 MB | 26.77 |
| - Float16 | 8592.5 | 1360MB | 1135 MB | 26.80 |
| Ctranslate2 3.6.0 | 6634.7 | 1261 MB | 953MB | 26.77 |
| - Int8 | 8567.2 | 1005 MB | 807 MB | 26.85 |
| - Float16 | 10990.7 | 941 MB | 807 MB | 26.77 |
| - Int8 + Float16 | 8725.4 | 813MB | 800 MB | 26.83 |
| Modelo Opus-MT | ||||
| Transformers 4.26.1 (com Pytorch 1.13.1) | 1022.9 | 4097 MB | 2109MB | 27.90 |
| Marian 1.11.0 | 3241.0 | 3381MB | 2156 MB | 27.92 |
| - Float16 | 3962.4 | 3239MB | 1976 MB | 27.94 |
| Ctranslate2 3.6.0 | 5876.4 | 1197 MB | 754MB | 27.92 |
| - Int8 | 7521.9 | 1005 MB | 792 MB | 27.79 |
| - Float16 | 9296.7 | 909MB | 814MB | 27.90 |
| - Int8 + Float16 | 8362.7 | 813MB | 766 MB | 27.90 |
Executado com CUDA 11 em uma instância do G5.xlarge Amazon EC2 equipada com uma GPU NVIDIA A10G (versão do driver: 510.47.03).