騰訊開源 TurboTransformers,推理加速性能超越 TensorRT 等主流優化引擎!

點擊上方「 傑哥的IT之旅 」,選擇「 」公衆號

重磅乾貨,第一時間送達


近期,騰訊發 布了在 GitHub 上的第 100 個開源項目「TurboTransformers」,在多 CPU 和 GPU 硬件測試中,這款 Transformer 推理加速工具得到了超越 PyTorch/Tens orFlow 和目前主流優化引擎的性能表現。



在天然語言處理領域,以 BERT 爲表明的 Transformer 神經網絡模型是近年來最重要的模型創新,爲諸如閱讀理解、文章摘要、語義分類、同義改寫等 NLP 任務帶了顯著的效果提高。但 Transformer 在提升模型精度的同時,也引入了更多的計算量,這致使 Transformer 的線上 NLP 服務在部署方面面臨着巨大挑戰。


業界廣泛採用 TensorFlow 或者 Pytorch 來完成 Transformer 的訓練部分,但因爲深度學習的訓練和推理任務存在差別,訓練框架直接應用於線上推理並不能獲得極致的性能。

昨日,騰訊宣佈開源 Transformer 推理加速工具「TurboTransformers」。Turbo 的意思是「渦輪」,通常用來增長髮動機氧氣含量,帶來更大動力,TurboTransformers 則意味着可以使推理引擎更增強勁。

項目地址: https://github.com/Tencent/TurboTransformers

從業界痛點出發:高速、實用、簡單

具體而言,TurboTransformers 具有高速、實用、簡單三個特色:
 
1. 優異的CPU/GPU 性能表現

面向 Intel 多核 CPU 和 NVIDIA GPU 硬件平臺,經過核心融合和並行算法優化,TurboTransformers 充發揮硬件的各層級並行計算的能力。在多種 CPU 和 GPU 硬件上得到了超過 PyTorch/TensorFlow 和目前主流優化引擎(如 onnxruntime-mkldnn/onnxruntime-gpu, torch JIT, NVIDIA faster transformers)的性能表現。

2. 爲NLP推理任務特色量身定製

TurboTransformers 能夠支持變長輸入序列處理,無需序列補零、截斷或者分桶帶來的無用計算,也無需任何針對計算圖在推理前進行預調優的過程。
 
3. 使用方式簡單

TurboTransformers 支持 python 和 C++接口進行調用。TurboTransformers 支持 TensorFlow 和 PyTorch 預訓練模型的載入。它能夠做爲 huggingface/transformers 的推理加速插件,經過加入幾行 python 代碼得到 BERT 模型的端對端加速效果。

和 ONNX-runtime、TensorRT、Torchlib 等推理優化引擎相比,TurboTransformers 在性能和使用方式上都具有優點。


此前,TurboTransformers 已應用在騰訊內部多個線上 BERT 服務服務場景,微信經常使用問題回覆服務得到 1.88x 加速,公有云情感分析服務得到 2.11x 加速,QQ 看點推薦服務得到 13.6x 加速。

總體架構

TurboTransformers 在算子優化、框架優化和接口部署方式簡化三個方面作了改進。

TurboTransformers 軟件架構圖。

算子層優化


上圖 (a) 展現了論文 Transformer 結構示意圖,灰色方框內的結構稱爲一個 Transformer Cell,BERT encoder 堆疊了 Nx 個這樣的 Transformer Cell。圖 (b) 爲 Cell 的展開細節,每個矩形都是一個獨立的計算核心。

Transformer Cell 計算包含了 8 個 GEMM(通用矩陣乘法,General Matrix Multiplication)運算,經過調優 Intel MKL 和 cuBLAS 的 GEMM 調用方式來得到最佳 GEMM 性能,並在硬件容許條件下,在 GPU 上使用 tensor core 方式進行 GEMM 運算。

相似於 NVIDIA FasterTransformers 方案,TurboTransformers 將全部 GEMM 運算之間的計算融合成一個調用核心。這樣有兩個好處,一是減小了內存訪問開銷,二是減小多線程啓動開銷。

對於這些核心,TurboTransformers 在 CPU 上採用 openmp 進行並行,在 GPU 上使用 CUDA 進行優化實現。對於比較複雜的 LayerNorm 和 Softmax 算子,它們包含了不適合 GPU 上並行的規約操做,TurboTransformers 爲它們設計了創新並行算法,極大下降了這些算子的延遲。

框架層優化

因爲 NLP 的採用變長輸入特性,每次運算中間結果的大小其實並不相同。爲了不每次都分配釋放內存,TurboTransformers 經過 Caching 方式管理顯存。

此外,團隊爲 TurboTransformers 提供了一些腳本,將兩者的預訓練模型轉化爲 npz 格式供其讀入,以無縫支持 pytorch/tensorflow 訓練好的序列化模型。考慮到 pytorch huggingface/transformers 是目前最流行的 transformer 訓練方法,TurboTransformers 支持直接讀入 huggingface/transformers 預訓練模型。

應用部署

爲了減小用戶開發難度,TurboTransformers 提供了 C++和 Python 調用接口,能夠嵌入到 C++多線程後臺服務流程中,也可加入到 pytorch 服務流程中,增長几行代碼便可得到端到端 BERT 加速。現階段更建議經過 docker 部署 TurboTransformers,一方面保證了編譯的可移植性,另外一方面也能夠無縫應用於 K8S 等線上部署平臺。

性能測試

團隊首先在三個 CPU 硬件平臺上測試了 TurboTransformers 的性能, 下圖顯示了在 Intel Xeon 6133 CPU 上的性能測試結果(150 次迭代的均值):


接下來在四個 GPU 硬件平臺上進行測試,下圖顯示了在 NVIDIA RTX 2060 GPU 和  NVIDIA V100 GPU 上的 性能測試結果(150 次迭代的均值):

NVIDIA RTX 2060 GPU 測試結果。

NVIDIA V100 GPU 測試結果。

此外,團隊還在多個CPU和GPU等平臺上測試了 TurboTransformers,更多性能測試結果可見項目主頁。

目前,TurboTransformers 暫時只支持 FP32 的計算,將來騰訊將對其進一步改進,包括對 GPU FP16 的支持等能力等。

來源:機器之心前端

本公衆號所有博文已整理成一個目錄,請在公衆號後臺回覆「m」獲取!
python

   
推薦閱讀:
一、 國內良心 Linux 桌面操做系統,全新 Deepin V20 來了!(附下載地址)
二、 2020年最漂亮的 Linux 發行版
三、 這多是史上最全的權限系統設計
四、 這張「二維碼」火到了GitHub熱榜第一:掃一掃,打破系統邊界,文件秒傳!
五、 太強了!GitHub 上值得收藏的100個精選前端項目!
六、 將來 10 年,軟件開發技術的 8 個發展趨勢
關注微信公衆號『 傑哥的IT之旅』,後臺回覆「 1024」查看更多內容,回覆「 微信」添加我微信。

好文和朋友一塊兒看~

本文分享自微信公衆號 - 傑哥的IT之旅(Jake_Internet)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。git

相關文章
相關標籤/搜索