CTranslate2 是一个用于高效推理 Transformer 模型的 C++ 和 Python 库。
该项目实现了一个自定义运行时,应用了多种性能优化技术,如权重量化、层融合、批次重排等,以在 CPU 和 GPU 上加速并减少 Transformer 模型的内存使用。
当前支持以下模型类型:
兼容的模型需先转换为优化的模型格式。该库包含多个框架的转换器:
该项目面向生产环境,并具有向后兼容性保证,同时也包含与模型压缩和推理加速相关的实验性功能。
其中一些特性是标准深度学习框架难以实现的,这也是本项目诞生的初衷。
CTranslate2 可通过 pip 安装:
pip install ctranslate2
Python 模块用于转换模型,并可用几行代码进行翻译或文本生成:
translator = ctranslate2.Translator(translation_model_path)
translator.translate_batch(tokens)
generator = ctranslate2.Generator(generation_model_path)
generator.generate_batch(start_tokens)
更多信息和示例请参阅文档。
如果您有 AMD ROCm GPU,我们在发布页面上提供了特定的 Python wheels。
ctranslate2-web-server 是一个基于 CTranslate2 构建的 Web 服务器,它公开了兼容 OpenAI 的 REST API,使得将 CTranslate2 模型集成到已支持 OpenAI API 的应用程序中变得简单。
我们使用多个模型翻译 En->De 测试集 newstest2014:
基准测试报告每秒生成的目标 tokens 数量(越高越好)。结果是多次运行的平均值。更多详情及复现方法请参阅基准测试脚本。
请注意,以下结果仅适用于本次基准测试的配置:绝对性能和相对性能可能因不同设置而发生变化。
| Tokens/秒 | 最大内存 | BLEU | |
|---|---|---|---|
| OpenNMT-tf WMT14 模型 | |||
| OpenNMT-tf 2.31.0 (含 TensorFlow 2.11.0) | 209.2 | 2653MB | 26.93 |
| OpenNMT-py WMT14 模型 | |||
| OpenNMT-py 3.0.4 (含 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 | 672MB | 26.82 |
| - int8 | 860.2 | 529MB | 26.78 |
| - int8 + vmap | 1126.2 | 598MB | 26.64 |
| OPUS-MT 模型 | |||
| Transformers 4.26.1 (含 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 | 516MB | 27.65 |
在配备 Intel(R) Xeon(R) Platinum 8275CL CPU 的 c5.2xlarge Amazon EC2 实例上,使用 4 个线程执行。
| Tokens/秒 | 最大 GPU 内存 | 最大 CPU 内存 | BLEU | |
|---|---|---|---|---|
| OpenNMT-tf WMT14 模型 | ||||
| OpenNMT-tf 2.31.0 (含 TensorFlow 2.11.0) | 1483.5 | 3031MB | 3122MB | 26.94 |
| OpenNMT-py WMT14 模型 | ||||
| OpenNMT-py 3.0.4 (含 PyTorch 1.13.1) | 1795.2 | 2973MB | 3099MB | 26.77 |
| FasterTransformer 5.3 | 6979.0 | 2402MB | 1131MB | 26.77 |
| - float16 | 8592.5 | 1360MB | 1135MB | 26.80 |
| CTranslate2 3.6.0 | 6634.7 | 1261MB | 953MB | 26.77 |
| - int8 | 8567.2 | 1005MB | 807MB | 26.85 |
| - float16 | 10990.7 | 941MB | 807MB | 26.77 |
| - int8 + float16 | 8725.4 | 813MB | 800MB | 26.83 |
| OPUS-MT 模型 | ||||
| Transformers 4.26.1 (含 PyTorch 1.13.1) | 1022.9 | 4097MB | 2109MB | 27.90 |
| Marian 1.11.0 | 3241.0 | 3381MB | 2156MB | 27.92 |
| - float16 | 3962.4 | 3239MB | 1976MB | 27.94 |
| CTranslate2 3.6.0 | 5876.4 | 1197MB | 754MB | 27.92 |
| - int8 | 7521.9 | 1005MB | 792MB | 27.79 |
| - float16 | 9296.7 | 909MB | 814MB | 27.90 |
| - int8 + float16 | 8362.7 | 813MB | 766MB | 27.90 |
在配备 NVIDIA A10G GPU(驱动版本:510.47.03)的 g5.xlarge Amazon EC2 实例上,使用 CUDA 11 执行。
CTranslate2 是一个由社区驱动的项目。我们欢迎各种形式的贡献:
* 支持新模型:帮助我们实现更多 Transformer 架构。
* 性能优化:提出 CPU 或 GPU 内核的优化方案。
* Bug 报告:如果发现某些功能未按预期工作,请提交 issue。
* 文档改进:完善我们的指南或添加新示例。
请查看我们的贡献指南,了解如何搭建开发环境。