由於要執行大型Transformer模型存在諸多挑戰,包括多層架構可能會消耗大量的記憶體和GPU計算時間,因此微軟採用開源的ONNX Runtime,來解決大型Transformer模型在生產環境中的限制,因此得以在Visual Studio和Visual Studio Code提供整行程式碼完成功能。

GPT-2和GPT-3等大規模Transformer模型是好用的自我監督Transformer語言模型,可用於翻譯、問答、摘要和文字生成等自然語言處理任務,而微軟移植這些模型,開發了GPT-C模型,以深度學習來支援IntelliCode的程式碼完成功能,在Visual Studio和Visual Studio Code中,提供整行程式碼完成建議。

將GPT-C模型部署在雲端有諸多限制

微軟為了滿足大型Transformer模型計算能力的需求,一開始的目標是利用Azure機器學習服務,以及GPU虛擬機器叢集,部署生產環境用GPT-C模型,不過,這樣的作法卻遇到了一些挑戰,首先是要將模型部署在雲端上,就必須將用戶的程式碼,經過網路傳輸以進行推理,但是這樣的方式增加了暴露敏感資料的風險。

而且當斷開網路連接或是離線模式下,就無法繼續提供程式碼建議,這個限制要求開發人員在工作期間,必須保持網際網路連接,對於在網際網路連接條件不好的地區工作的人,可能不是一個好辦法。

另外,典型的語言模型目標是要使用集束搜尋(Beam Search)解碼演算法來搜尋最佳解,而GPT-C也不例外,但這種情境卻會產生很大的記憶體開銷,導致較高的延遲和服務成本,官方提到,一個12層的生成Transformer模型,需要使用374 MB記憶體,每次推理呼叫需要使用約80毫秒的GPU時間,當所有用戶的運算都集中到雲端上運算,過於龐大的資源消耗使得這個方法不切實際。

採用ONNX Runtime在客戶端高效執行GPT-C

由於上述原因,微軟放棄在雲端上部署模型的念頭,而改使用ONNX Runtime來解決執行GPT-C模型的問題。ONNX(Open Neural Network Exchange)以及ONNX Runtime在加速和簡化Transformer模型,扮演重要的角色,ONNX是一種機器學習模型的開發標準格式,使用諸如PyTorch與TensorFlow等各種框架訓練的模型,可以簡單地轉換為ONNX格式。

而ONNX Runtime則是以ONNX標準為基礎開發,是一種最佳化推理引擎,可在不同的硬體和作業系統上,高效率執行ONNX模型,由於ONNX框架的互通性,ONNX Runtime提高了模型訓練到推理的開發效率,透過各種最佳化技術,ONNX Runtime能夠跨硬體平臺,以最佳效能執行各種模型。

要以低成本提供IntelliCode程式碼完成體驗,微軟決定要直接在客戶端部署GPT-C模型,也就是說,GPT-C模型模型要能夠高效率地在CPU上運作,並且支援廣泛的客戶端裝置。微軟提到,他們把GPT-C模型放到ONNX Runtime上執行,可以明顯減少原本要用到的370 MB記憶體,最終僅需要80 MB。

ONNX Runtime最佳化Transformer模型執行

ONNX Runtime支援Transformer最佳化,跟PyTorch比起來,在CPU上可處理大序列長度,並且達到超過2倍效能加速。PyTorch提供了內建的ONNX匯出程式,可以將PyTorch模型匯出為ONNX,微軟提到,最重要的是,ONNX Runtime擁有GPT2轉換工具,因此GPT-C Transformer模型可以簡單地從PyTorch轉換到ONNX。

除了使用ONNX Runtime來縮減運算資源外,集束搜尋也是部署的重要部分,該模組會評分並且排名ONNX Runtime模型推理步驟中的張量輸出,當評分和排名完成後,模型會從集束搜尋模組中擷取張量輸出,並執行另一輪的推理。一開始,微軟的集束搜尋模組是以C#和Typescript程式語言實作,但由於這類程式語言效能很低,導致GPT-C推理回應時間表現不佳,每次完成推理都需要CPU時間1秒鐘。

為了要提高客戶端執行GPT-C模型的效能,微軟擴展GPT2轉換工具,以支援GPT-2模型原生一步(One-step)集束搜尋,在微軟改進了訓練和部署GPT-2模型後,使得具有原生一步集束搜尋功能的GPT-2模型,可以在ONNX Runtime上獲得完全的硬體加速。

微軟測試了經最佳化後的GPT-C ONNX模型,在CPU和GPU上的效能,使用英特爾Core i7-8650U CPU執行模型,與初始客戶端GPT-C相比,效能提高了4倍,每次推理約為300毫秒,而在GPU上,使用Nvidia V100-PCIE-16GB GPU以及FP16配置,ONNX Runtime在記憶體效率和效能都有明顯提升,與PyTorch相比分別達5倍和4倍。


熱門新聞

Advertisement