01.31 把BERT的推斷速度提升17倍

編譯:ronghuaiyang

導讀

微軟剛剛開源了Transformer的突破性優化,大大提升了CPU和GPU上的推理速度。

用於自然語言處理的最流行的深度學習模型之一是BERT。由於需要大量的計算,在大規模推斷上BERT計算量非常大,甚至在嚴格的延遲約束下都不可能。最近,我們分享了“Bing has improved BERT inference on GPU for its real-time”,在必應的延遲限制內,每秒服務超過100萬個BERT推斷。我們很高興地宣佈,微軟已經在ONNX Runtime中開源了這些優化的增強版本,並將它們擴展到GPU和CPU上。

有了ONNX Runtime,人工智能開發人員現在可以很容易地在CPU和GPU硬件上生產出高性能的大型transformer模型,使用和微軟一樣的技術來服務客戶。

Bing裡的自然語言處理

為了向我們的客戶提供最相關的結果,Bing使用了最先進的自然語言處理(NLP)技術來更好地理解用戶查詢、網頁和其他文檔。NLP的一個關鍵組件是語言表示模型,如BERT、RoBERTa或MT-DNN。必應開發和調優了自己的語言表徵模型,用於網絡搜索,問答,以及圖像的描述等任務上面。

然而,在實時生產環境中使用大型的transformer network會帶來延遲和成本方面的挑戰,因為為每個查詢運行12層或24層的BERT在計算上非常昂貴。正如去年11月宣佈的那樣,我們首先使用知識蒸餾將較大的模型濃縮成一個三層的BERT模型,沒有顯著的精度損失,顯著降低了計算成本。但是,經過提煉的三層BERT模型仍然以77ms的延遲為基準,每秒運行數百萬個查詢和文檔的速度仍然非常昂貴。為了進一步優化,使用c++ api重新實現了整個模型,充分利用了GPU架構,與CPU相比,該架構實現了800x的吞吐量提升。

一旦這些優化在Bing產品中成功使用,就有更多的事情要做。由於這些大型的transformer network可用於web搜索之外的更多NLP任務,所以我們需要一種簡單的方法來為其他人共享這些有益的工作。當前的解決方案要求每個模型開發人員使用我們的c++庫重新實現模型,這是非常耗時的。為了進一步普及transformer推理並使其他人能夠從這些改進中獲益,我們進一步優化了它們,將它們擴展到CPU,並在ONNX Runtime中開放它們的源代碼。

使用ONNX Runtime實現17x BERT推理加速

ONNX Runtime是一個高性能的機器學習模型推理引擎。它與PyTorch、TensorFlow以及許多其他支持ONNX標準的框架和工具兼容。ONNX Runtime設計了一個開放和可擴展的體系結構,通過利用內置的圖形優化和跨CPU、GPU和邊緣設備的各種硬件加速功能,可以輕鬆地優化和加速推理。ONNX Runtime可以很容易地插入到你的技術堆棧中,因為它可以在Linux、Windows、Mac和Android上工作,並且為Python、c#、c++、C和Java提供了方便的api。

像BERT這樣的Transformer模型由許多操作符組成。圖形優化,從小的圖形簡化和節點清除到更復雜的節點融合和佈局優化,是構建在ONNX Runtime中的一項基本技術。由於BERT模型主要由堆疊的Transformer單元組成,我們通過將多個基本運算符的關鍵子圖融合成CPU和GPU的單一內核來優化每個單元,包括Self-Attention層、LayerNormalization層和Gelu層。這大大減少了大量基本計算之間的內存複製。

另外,在Self-Attention的CPU實現中,根據Self-Attention heads的數量對矩陣Q、K、V的列進行了劃分。通過這種優化,我們可以顯著提高並行性,並充分利用可用的CPU內核。並且,Q、K、V全連接後的轉置運算可以在GEMM中進行計算,進一步降低了計算成本。

通過這些優化,ONNX Runtime在Azure標準NC6S_v3 (GPU V100)上對128個序列長度和批大小為1的BERT-SQUAD執行推理:

  • 12層 fp16 BERT-SQUAD為1.7ms。
  • 24層 fp16 BERT-SQUAD為4.0ms。

下面是ONNX Runtime上3層fp32 BERT與128序列長度的詳細的性能數字。在CPU上,我們看到了17x的加速,在GPU上,我們看到了超過3倍的加速。

把BERT的推斷速度提升17倍

在全局大規模使用ONNX Runtime推理

隨著最新的BERT優化在ONNX Runtime可用,Bing將transformer推理代碼庫轉換為聯合開發的ONNX Runtime。ONNX不僅在Bing流量範圍內對大型transformer網絡進行了推理,而且新的優化還降低了Bing的延時。此外,Bing發現ONNX Runtime更容易使用,並將新場景優化的重用時間從幾天縮短到幾個小時。

除了Bing之外,ONNX Runtime還被微軟的數十種產品和服務所部署,包括Office、Windows、Cognitive services、Skype、Bing Ads和PowerBI等。ONNX Runtime用於計算機視覺、語音、語言處理、預測等各種模型。與以前的推理解決方案相比,團隊在相同的硬件上實現了最多18倍的性能改進。

開始使用BERT加速

你可以利用微軟的技術在你自己的產品中使用的相同的加速,不管你是針對雲還是智能邊緣,或者你是使用cpu還是gpu。我們開始:

  1. 使用或從流行的框架(如PyTorch或TensorFlow)加載預訓練的模型。
  2. 通過從PyTorch導出或從TensorFlow/Keras轉換為ONNX格式,為優化推斷準備模型。
  3. 使用ONNX Runtime進行跨多個平臺和硬件的高性能推理。

我們提供了PyTorch BERT加速:http://aka.ms/pytorchbertwithort和TensorFlow BERT加速:http://aka.ms/tfbertwithort的示例代碼。

英文原文:https://cloudblogs.microsoft.com/opensource/2020/01/21/microsoft-onnx-open-source-optimizations-transformer-inference-gpu-cpu/


分享到:


相關文章: