OpenNMT/CTranslate2
GitHub: OpenNMT/CTranslate2
CTranslate2 是一个用 C++ 和 Python 编写的高性能 Transformer 模型推理引擎,通过量化、层融合、batch 优化等技术加速推理并降低内存占用。
Stars: 4544 | Forks: 495
[](https://github.com/OpenNMT/CTranslate2/actions?query=workflow%3ACI) [](https://badge.fury.io/py/ctranslate2) [](https://opennmt.net/CTranslate2/) [](https://gitter.im/OpenNMT/CTranslate2?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [](https://forum.opennmt.net/)
# CTranslate2
CTranslate2 是一个用于高效执行 Transformer 模型推理的 C++ 和 Python 库。
该项目实现了一个自定义的 runtime,应用了多种性能优化技术(如权重量化、层融合、batch 重排序等),以在 CPU 和 GPU 上[加速 Transformer 模型并减少其内存占用](#benchmarks)。
目前支持以下模型类型:
* 编码器-解码器模型:Transformer base/big、M2M-100、NLLB、BART、mBART、Pegasus、T5、Whisper、T5Gemma、T5Gemma2、MADLAD-400
* 仅解码器模型:GPT-2、GPT-J、GPT-NeoX、OPT、BLOOM、MPT、Llama、Mistral、Gemma、CodeGen、GPTBigCode、Falcon、Qwen2
* 仅编码器模型:BERT、DistilBERT、XLM-RoBERTa
兼容的模型应首先转换为优化的模型格式。该库包含了针对多种框架的转换器:
* [OpenNMT-py](https://opennmt.net/CTranslate2/guides/opennmt_py.html)
* [OpenNMT-tf](https://opennmt.net/CTranslate2/guides/opennmt_tf.html)
* [Fairseq](https://opennmt.net/CTranslate2/guides/fairseq.html)
* [Marian](https://opennmt.net/CTranslate2/guides/marian.html)
* [OPUS-MT](https://opennmt.net/CTranslate2/guides/opus_mt.html)
* [Transformers](https://opennmt.net/CTranslate2/guides/transformers.html)
该项目面向生产环境并提供[向后兼容性保证](https://opennmt.net/CTranslate2/versioning.html),但也包含一些与模型压缩和推理加速相关的实验性功能。
## 主要特性
* **在 CPU 和 GPU 上快速高效地执行**
得益于许多高级优化(如层融合、padding 去除、batch 重排序、原地操作、缓存机制等),在支持的模型和任务上,其执行速度[显著快于通用深度学习框架,且所需资源更少](#benchmarks)。 * **量化和低精度计算**
模型序列化和计算支持[低精度](https://opennmt.net/CTranslate2/quantization.html)权重:16 位浮点数 (FP16)、16 位 Brain 浮点数 (BF16)、16 位整数 (INT16)、8 位整数 (INT8) 以及 AWQ 量化 (INT4)。 * **支持多种 CPU 架构**
该项目支持 x86-64 和 AArch64/ARM64 处理器,并集成了针对这些平台优化的多种 backend:[Intel MKL](https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onemkl.html)、[oneDNN](https://github.com/oneapi-src/oneDNN)、[OpenBLAS](https://www.openblas.net/)、[Ruy](https://github.com/google/ruy) 和 [Apple Accelerate](https://developer.apple.com/documentation/accelerate)。 * **自动 CPU 检测和代码调度**
同一个二进制文件可以包含多个 backend(例如 Intel MKL 和 oneDNN)以及指令集架构(例如 AVX、AVX2),它们会在运行时根据 CPU 信息自动选择。 * **并行和异步执行**
可以使用多个 GPU 或 CPU 核心并行、异步地处理多个 batch。 * **动态内存使用**
由于在 CPU 和 GPU 上都使用了缓存分配器,内存使用量会根据请求大小动态变化,同时仍能满足性能要求。 * **磁盘占用小**
量化可以使模型在磁盘上的大小缩小 4 倍,且准确率损失极小。 * **集成简单**
该项目依赖极少,并提供了简单的 [Python](https://opennmt.net/CTranslate2/python/overview.html) 和 C++ API,可满足大多数集成需求。 * **可配置和交互式解码**
[高级解码功能](https://opennmt.net/CTranslate2/decoding.html) 允许自动补全部分序列,并在序列中的特定位置返回备选结果。 * **支持用于分布式推理的 tensor parallelism**
可以将超大模型拆分到多个 GPU 上。请遵循此[文档](docs/parallel.md#model-and-tensor-parallelism)来设置所需的环境。 其中一些特性很难在标准的深度学习框架中实现,这也正是本项目的出发点。 ## 安装和使用 可以使用 pip 安装 CTranslate2: ``` 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) ``` 请参阅[文档](https://opennmt.net/CTranslate2) 获取更多信息和示例。 如果您有 AMD ROCm GPU,我们在[发布页面](https://github.com/OpenNMT/CTranslate2/releases/) 提供了特定的 Python wheels。 ## Web 服务器 [ctranslate2-web-server](https://github.com/jordimas/ctranslate2-web-server) 是一个基于 CTranslate2 构建的 Web 服务器,它暴露了兼容 OpenAI 的 REST API,使得将 CTranslate2 模型集成到已经支持 OpenAI API 的应用中变得非常容易。 ## 基准测试 我们使用多个模型翻译英德 (En->De) 测试集 *newstest2014*: * [OpenNMT-tf WMT14](https://opennmt.net/Models-tf/#translation):使用 OpenNMT-tf 在 WMT14 数据集(450 万行)上训练的基础 Transformer * [OpenNMT-py WMT14](https://opennmt.net/Models-py/#translation):使用 OpenNMT-py 在 WMT14 数据集(450 万行)上训练的基础 Transformer * [OPUS-MT](https://github.com/Helsinki-NLP/OPUS-MT-train/tree/master/models/en-de#opus-2020-02-26zip):使用 Marian 在 2020-02-26 可用的所有 OPUS 数据(8190 万行)上训练的基础 Transformer 该基准测试报告了每秒生成的目标 token 数量(越高越好)。结果基于多次运行的汇总。有关更多详细信息以及如何复现这些数字,请参阅[基准测试脚本](tools/benchmark)。 **请注意,下方呈现的结果仅对本次基准测试期间使用的配置有效:在不同的设置下,绝对和相对性能可能会有所变化。** #### CPU | | 每秒 Token 数 | 最大内存 | 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*](https://aws.amazon.com/ec2/instance-types/c5/) Amazon EC2 实例上使用 4 个线程执行。 #### GPU | | 每秒 Token 数 | 最大 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*](https://aws.amazon.com/ec2/instance-types/g5/) Amazon EC2 实例上使用 CUDA 11 执行。 ## 更多资源 * [文档](https://opennmt.net/CTranslate2) * [论坛](https://forum.opennmt.net) * [Gitter](https://gitter.im/OpenNMT/CTranslate2)
得益于许多高级优化(如层融合、padding 去除、batch 重排序、原地操作、缓存机制等),在支持的模型和任务上,其执行速度[显著快于通用深度学习框架,且所需资源更少](#benchmarks)。 * **量化和低精度计算**
模型序列化和计算支持[低精度](https://opennmt.net/CTranslate2/quantization.html)权重:16 位浮点数 (FP16)、16 位 Brain 浮点数 (BF16)、16 位整数 (INT16)、8 位整数 (INT8) 以及 AWQ 量化 (INT4)。 * **支持多种 CPU 架构**
该项目支持 x86-64 和 AArch64/ARM64 处理器,并集成了针对这些平台优化的多种 backend:[Intel MKL](https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onemkl.html)、[oneDNN](https://github.com/oneapi-src/oneDNN)、[OpenBLAS](https://www.openblas.net/)、[Ruy](https://github.com/google/ruy) 和 [Apple Accelerate](https://developer.apple.com/documentation/accelerate)。 * **自动 CPU 检测和代码调度**
同一个二进制文件可以包含多个 backend(例如 Intel MKL 和 oneDNN)以及指令集架构(例如 AVX、AVX2),它们会在运行时根据 CPU 信息自动选择。 * **并行和异步执行**
可以使用多个 GPU 或 CPU 核心并行、异步地处理多个 batch。 * **动态内存使用**
由于在 CPU 和 GPU 上都使用了缓存分配器,内存使用量会根据请求大小动态变化,同时仍能满足性能要求。 * **磁盘占用小**
量化可以使模型在磁盘上的大小缩小 4 倍,且准确率损失极小。 * **集成简单**
该项目依赖极少,并提供了简单的 [Python](https://opennmt.net/CTranslate2/python/overview.html) 和 C++ API,可满足大多数集成需求。 * **可配置和交互式解码**
[高级解码功能](https://opennmt.net/CTranslate2/decoding.html) 允许自动补全部分序列,并在序列中的特定位置返回备选结果。 * **支持用于分布式推理的 tensor parallelism**
可以将超大模型拆分到多个 GPU 上。请遵循此[文档](docs/parallel.md#model-and-tensor-parallelism)来设置所需的环境。 其中一些特性很难在标准的深度学习框架中实现,这也正是本项目的出发点。 ## 安装和使用 可以使用 pip 安装 CTranslate2: ``` 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) ``` 请参阅[文档](https://opennmt.net/CTranslate2) 获取更多信息和示例。 如果您有 AMD ROCm GPU,我们在[发布页面](https://github.com/OpenNMT/CTranslate2/releases/) 提供了特定的 Python wheels。 ## Web 服务器 [ctranslate2-web-server](https://github.com/jordimas/ctranslate2-web-server) 是一个基于 CTranslate2 构建的 Web 服务器,它暴露了兼容 OpenAI 的 REST API,使得将 CTranslate2 模型集成到已经支持 OpenAI API 的应用中变得非常容易。 ## 基准测试 我们使用多个模型翻译英德 (En->De) 测试集 *newstest2014*: * [OpenNMT-tf WMT14](https://opennmt.net/Models-tf/#translation):使用 OpenNMT-tf 在 WMT14 数据集(450 万行)上训练的基础 Transformer * [OpenNMT-py WMT14](https://opennmt.net/Models-py/#translation):使用 OpenNMT-py 在 WMT14 数据集(450 万行)上训练的基础 Transformer * [OPUS-MT](https://github.com/Helsinki-NLP/OPUS-MT-train/tree/master/models/en-de#opus-2020-02-26zip):使用 Marian 在 2020-02-26 可用的所有 OPUS 数据(8190 万行)上训练的基础 Transformer 该基准测试报告了每秒生成的目标 token 数量(越高越好)。结果基于多次运行的汇总。有关更多详细信息以及如何复现这些数字,请参阅[基准测试脚本](tools/benchmark)。 **请注意,下方呈现的结果仅对本次基准测试期间使用的配置有效:在不同的设置下,绝对和相对性能可能会有所变化。** #### CPU | | 每秒 Token 数 | 最大内存 | 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*](https://aws.amazon.com/ec2/instance-types/c5/) Amazon EC2 实例上使用 4 个线程执行。 #### GPU | | 每秒 Token 数 | 最大 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*](https://aws.amazon.com/ec2/instance-types/g5/) Amazon EC2 实例上使用 CUDA 11 执行。 ## 更多资源 * [文档](https://opennmt.net/CTranslate2) * [论坛](https://forum.opennmt.net) * [Gitter](https://gitter.im/OpenNMT/CTranslate2)
标签:Apex, C++, DLL 劫持, Python, Vectored Exception Handling, 人工智能, 大语言模型, 性能优化, 数据擦除, 无后门, 机器学习, 检测绕过, 模型推理, 用户模式Hook绕过, 逆向工具