CTranslate2Transformer 模型的快速推理引擎
CTranslate2 是一個 C++ 和 Python 庫,用于使用 Transformer 模型進行高效推理。
該項目實現(xiàn)了一個自定義運行時,應(yīng)用了許多性能優(yōu)化技術(shù),如權(quán)重量化、層融合、批量重新排序等,以加速和減少Transformer 模型在 CPU 和 GPU 上的內(nèi)存使用。目前支持以下模型類型:
- 編碼器-解碼器型號: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
兼容的模型應(yīng)首先轉(zhuǎn)換為優(yōu)化的模型格式。該庫包含多個框架的轉(zhuǎn)換器:
該項目面向生產(chǎn),具有向后兼容性保證,但它還包括與模型壓縮和推理加速相關(guān)的實驗功能。
主要特性
- 在 CPU 和 GPU 上快速高效地執(zhí)行得益于許多高級優(yōu)化:層融合、填充去除、批量重新排序、就地操作、緩存,在支持的模型和任務(wù)上,執(zhí)行速度明顯快于通用深度學(xué)習(xí)框架,并且需要的
資源更少機制等 - 量化和降低精度
模型序列化和計算支持降低精度的權(quán)重:16 位浮點(FP16)、16 位腦浮點(BF16)、16 位整數(shù)(INT16)和 8 位整數(shù)(INT8) 。 - 多種CPU架構(gòu)支持
該項目支持x86-64和AArch64/ARM64處理器,并集成了針對這些平臺優(yōu)化的多個后端:Intel MKL、oneDNN、OpenBLAS、Ruy和Apple Accelerate。 - 自動CPU 檢測和代碼調(diào)度
一個二進制文件可以包含多個后端(例如Intel MKL 和oneDNN)和指令集架構(gòu)(例如AVX、AVX2),這些架構(gòu)是在運行時根據(jù)CPU 信息自動選擇的。 - 并行和異步執(zhí)行
可以使用多個 GPU 或 CPU 核心并行和異步處理多個批次。 - 動態(tài)內(nèi)存使用
內(nèi)存使用量根據(jù)請求大小動態(tài)變化,同時由于 CPU 和 GPU 上的緩存分配器仍然滿足性能要求。 - 磁盤上的輕量級
量化可以使磁盤上的模型縮小 4 倍,同時將精度損失降至最低。 - 簡單集成
該項目幾乎沒有依賴項,并公開了Python和 C++ 中的簡單 API 來滿足大多數(shù)集成需求。 - 可配置的交互式解碼
高級解碼功能允許自動完成部分序列并返回序列中特定位置的替代項。
其中一些功能很難使用標(biāo)準(zhǔn)深度學(xué)習(xí)框架來實現(xiàn),這也是該項目的動機。
評論
圖片
表情
