Ctranslate2 ist eine C ++ - und eine Python -Bibliothek für effiziente Inferenz mit Transformatormodellen.
Das Projekt implementiert eine benutzerdefinierte Laufzeit, die viele Leistungsoptimierungstechniken wie die Quantisierung der Gewichte, die Schichtfusion, die Batch -Neuordnung usw. anwendet, um die Speicherverwendung von Transformatormodellen auf CPU und GPU zu beschleunigen und zu verringern.
Derzeit werden die folgenden Modelltypen unterstützt:
Kompatible Modelle sollten zunächst in ein optimiertes Modellformat umgewandelt werden. Die Bibliothek enthält Konverter für mehrere Frameworks:
Das Projekt ist produktionsorientiert und verfügt über die Abwärtskompatibilitätsgarantien. Es umfasst jedoch auch experimentelle Merkmale im Zusammenhang mit Modellkomprimierung und Inferenzbeschleunigung.
Einige dieser Merkmale sind mit Standard -Deep -Learning -Frameworks schwer zu erreichen und die Motivation für dieses Projekt.
Ctranslate2 kann mit PIP installiert werden:
pip install ctranslate2Das Python -Modul wird zum Konvertieren von Modellen verwendet und kann Text mit wenigen Codezeilen übersetzen oder generieren:
translator = ctranslate2 . Translator ( translation_model_path )
translator . translate_batch ( tokens )
generator = ctranslate2 . Generator ( generation_model_path )
generator . generate_batch ( start_tokens )Weitere Informationen und Beispiele finden Sie in der Dokumentation.
Wir übersetzen den En-> de Test Set Newstest2014 mit mehreren Modellen:
Der Benchmark berichtet über die Anzahl der pro Sekunde generierten Zieltoken (höher ist besser). Die Ergebnisse werden über mehrere Läufe aggregiert. Weitere Informationen finden Sie in den Benchmark -Skripten und reproduzieren Sie diese Zahlen.
Bitte beachten Sie, dass die nachstehenden Ergebnisse nur für die Konfiguration gültig sind, die während dieses Benchmarks verwendet werden: Die absolute und relative Leistung kann sich mit unterschiedlichen Einstellungen ändern.
| Token pro Sekunde | Max. Erinnerung | Bleu | |
|---|---|---|---|
| OpenNMT-TF WMT14-Modell | |||
| OpenNMT-TF 2.31.0 (mit TensorFlow 2.11.0) | 209.2 | 2653 MB | 26.93 |
| OpenNMT-PY WMT14-Modell | |||
| OpenNMT-PY 3.0.4 (mit Pytorch 1.13.1) | 275.8 | 2012mb | 26.77 |
| - int8 | 323.3 | 1359 MB | 26.72 |
| Ctranslate2 3.6.0 | 658.8 | 849MB | 26.77 |
| - int16 | 733.0 | 672 MB | 26.82 |
| - int8 | 860.2 | 529 MB | 26.78 |
| - int8 + vmap | 1126.2 | 598MB | 26.64 |
| Opus-MT-Modell | |||
| Transformatoren 4.26.1 (mit Pytorch 1.13.1) | 147,3 | 2332MB | 27.90 |
| Marian 1.11.0 | 344.5 | 7605 MB | 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 | 660 MB | 27.53 |
| - int8 | 696.1 | 516 MB | 27.65 |
Ausgeführt mit 4 Threads auf einem C5.2Xlarge Amazon EC2 -Instanz mit einer Intel (R) Xeon (R) Platinum 8275Cl CPU.
| Token pro Sekunde | Max. GPU -Speicher | Max. CPU -Speicher | Bleu | |
|---|---|---|---|---|
| OpenNMT-TF WMT14-Modell | ||||
| OpenNMT-TF 2.31.0 (mit TensorFlow 2.11.0) | 1483.5 | 3031MB | 3122MB | 26.94 |
| OpenNMT-PY WMT14-Modell | ||||
| OpenNMT-PY 3.0.4 (mit Pytorch 1.13.1) | 1795.2 | 2973MB | 3099mb | 26.77 |
| FasterTransformer 5.3 | 6979.0 | 2402MB | 1131MB | 26.77 |
| - Float16 | 8592.5 | 1360 MB | 1135 MB | 26.80 |
| Ctranslate2 3.6.0 | 6634.7 | 1261MB | 953 MB | 26.77 |
| - int8 | 8567.2 | 1005 MB | 807MB | 26.85 |
| - Float16 | 10990.7 | 941MB | 807MB | 26.77 |
| - int8 + float16 | 8725.4 | 813MB | 800 MB | 26.83 |
| Opus-MT-Modell | ||||
| Transformatoren 4.26.1 (mit Pytorch 1.13.1) | 1022.9 | 4097MB | 2109 MB | 27.90 |
| Marian 1.11.0 | 3241.0 | 3381mb | 2156 MB | 27.92 |
| - Float16 | 3962.4 | 3239MB | 1976MB | 27.94 |
| Ctranslate2 3.6.0 | 5876.4 | 1197MB | 754MB | 27.92 |
| - int8 | 7521.9 | 1005 MB | 792 MB | 27.79 |
| - Float16 | 9296.7 | 909 MB | 814MB | 27.90 |
| - int8 + float16 | 8362.7 | 813MB | 766 MB | 27.90 |
Ausgestellt mit CUDA 11 auf einem G5.xlarge Amazon EC2 -Instanz mit einer NVIDIA A10G -GPU (Treiberversion: 510.47.03).