CTranslate2Transformer 模型的快速推理引擎
CTranslate2 是一个 C++ 和 Python 库,用于使用 Transformer 模型进行高效推理。
该项目实现了一个自定义运行时,应用了许多性能优化技术,如权重量化、层融合、批量重新排序等,以加速和减少Transformer 模型在 CPU 和 GPU 上的内存使用。目前支持以下模型类型:
- 编码器-解码器型号:Transformer base/big、M2M-100、NLLB、BART、mBART、Pegasus、T5、Whisper
- 仅解码器型号:GPT-2、GPT-J、GPT-NeoX、OPT、BLOOM、MPT、Llama、CodeGen、GPTBigCode、Falcon
- 仅编码器模型:BERT
兼容的模型应首先转换为优化的模型格式。该库包含多个框架的转换器:
该项目面向生产,具有向后兼容性保证,但它还包括与模型压缩和推理加速相关的实验功能。
主要特性
- 在 CPU 和 GPU 上快速高效地执行得益于许多高级优化:层融合、填充去除、批量重新排序、就地操作、缓存,在支持的模型和任务上,执行速度明显快于通用深度学习框架,并且需要的
资源更少机制等 - 量化和降低精度
模型序列化和计算支持降低精度的权重:16 位浮点(FP16)、16 位脑浮点(BF16)、16 位整数(INT16)和 8 位整数(INT8) 。 - 多种CPU架构支持
该项目支持x86-64和AArch64/ARM64处理器,并集成了针对这些平台优化的多个后端:Intel MKL、oneDNN、OpenBLAS、Ruy和Apple Accelerate。 - 自动CPU 检测和代码调度
一个二进制文件可以包含多个后端(例如Intel MKL 和oneDNN)和指令集架构(例如AVX、AVX2),这些架构是在运行时根据CPU 信息自动选择的。 - 并行和异步执行
可以使用多个 GPU 或 CPU 核心并行和异步处理多个批次。 - 动态内存使用
内存使用量根据请求大小动态变化,同时由于 CPU 和 GPU 上的缓存分配器仍然满足性能要求。 - 磁盘上的轻量级
量化可以使磁盘上的模型缩小 4 倍,同时将精度损失降至最低。 - 简单集成
该项目几乎没有依赖项,并公开了Python和 C++ 中的简单 API 来满足大多数集成需求。 - 可配置的交互式解码
高级解码功能允许自动完成部分序列并返回序列中特定位置的替代项。
其中一些功能很难使用标准深度学习框架来实现,这也是该项目的动机。
评论