OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  CTranslate2 — 高效的 Transformer 推理与部署引擎

CTranslate2 — 高效的 Transformer 推理与部署引擎

 
  absorb ·  2026-05-30 11:00:22 · 29 次点击  · 0 条评论  

CI PyPI version Documentation Gitter Forum

CTranslate2

CTranslate2 是一个用于高效推理 Transformer 模型的 C++ 和 Python 库。

该项目实现了一个自定义运行时,应用了多种性能优化技术,如权重量化、层融合、批次重排等,以在 CPU 和 GPU 上加速并减少 Transformer 模型的内存使用

当前支持以下模型类型:

  • 编码器-解码器模型:Transformer base/big、M2M-100、NLLB、BART、mBART、Pegasus、T5、Whisper T5Gemma
  • 仅解码器模型:GPT-2、GPT-J、GPT-NeoX、OPT、BLOOM、MPT、Llama、Mistral、Gemma、CodeGen、GPTBigCode、Falcon、Qwen2
  • 仅编码器模型:BERT、DistilBERT、XLM-RoBERTa

兼容的模型需先转换为优化的模型格式。该库包含多个框架的转换器:

该项目面向生产环境,并具有向后兼容性保证,同时也包含与模型压缩和推理加速相关的实验性功能。

核心特性

  • 在 CPU 和 GPU 上快速高效执行
    得益于层融合、去除填充、批次重排、原地操作、缓存机制等多项先进优化,在支持的模型和任务上,执行速度显著更快且资源需求更少
  • 量化与低精度
    模型序列化和计算支持低精度权重:16位浮点数 (FP16)、16位脑浮点数 (BF16)、16位整数 (INT16)、8位整数 (INT8) 和 AWQ 量化 (INT4)。
  • 支持多种 CPU 架构
    项目支持 x86-64 和 AArch64/ARM64 处理器,并集成了针对这些平台优化的多个后端:Intel MKLoneDNNOpenBLASRuyApple Accelerate
  • 自动 CPU 检测与代码分发
    单个二进制文件可包含多个后端(如 Intel MKL 和 oneDNN)及指令集架构(如 AVX、AVX2),并在运行时根据 CPU 信息自动选择。
  • 并行与异步执行
    可并行且异步地使用多个 GPU 或 CPU 核心处理多个批次。
  • 动态内存使用
    内存使用量会根据请求大小动态调整,同时借助 CPU 和 GPU 上的缓存分配器满足性能要求。
  • 磁盘占用轻量
    量化可使模型在磁盘上缩小 4 倍,且精度损失极小。
  • 易于集成
    项目依赖少,并提供 Python 和 C++ 的简单 API,满足大多数集成需求。
  • 可配置的交互式解码
    高级解码功能支持自动补全部分序列,并在序列的特定位置返回候选项。
  • 支持分布式推理的张量并行
    非常大的模型可拆分到多个 GPU 上。请按照此文档设置所需环境。

其中一些特性是标准深度学习框架难以实现的,这也是本项目诞生的初衷。

安装与使用

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

  • OpenNMT-tf WMT14:使用 OpenNMT-tf 在 WMT14 数据集(450 万行)上训练的基础 Transformer。
  • OpenNMT-py WMT14:使用 OpenNMT-py 在 WMT14 数据集(450 万行)上训练的基础 Transformer。
  • OPUS-MT:使用 Marian 在截至 2020-02-26 的所有 OPUS 数据(8190 万行)上训练的基础 Transformer。

基准测试报告每秒生成的目标 tokens 数量(越高越好)。结果是多次运行的平均值。更多详情及复现方法请参阅基准测试脚本

请注意,以下结果仅适用于本次基准测试的配置:绝对性能和相对性能可能因不同设置而发生变化。

CPU

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 个线程执行。

GPU

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。
* 文档改进:完善我们的指南或添加新示例。

请查看我们的贡献指南,了解如何搭建开发环境。

其他资源

29 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 19 ms
Developed with Cursor