編者按:Microsoft Editor 是一款人工智能寫作輔助工具,其中的語法檢查器(grammar checker)功能不僅可以幫助不同水平、領域的用戶在寫作過程中檢查語法錯誤,還可以對錯誤進行解釋并給出正確的修改建議。神經語法檢查器模型是這款提供了強大拼寫檢查和語法糾正服務的 Microsoft Editor 背后的關鍵技術,該模型采用了微軟亞洲研究院創新的 Aggressive Decoding 算法,并借助高性能 ONNX Runtime(ORT) 進行加速,使服務器端的模型推理速度提升了200%,在不損失模型預測質量的情況下,節省了三分之二的成本。神經語法檢查器模型還使用了微軟亞洲研究院前沿的客戶端 seq2seq 建模技術 EdgeFormer,構建了性能優異的輕量級生成語言模型,結合部署中的模型和系統優化,該技術可賦能用戶在設備上的部署,從而實現零銷貨成本(zero-COGS,zero-cost-of-goods-sold)的目標。本文編譯自微軟研究院博客 “Achieving Zero-COGS with Microsoft Editor Neural Grammar Checker”。
自上世紀70年代以來,語法檢查器(grammar checker)所依賴的技術已經取得了顯著的發展,最初的第一代工具只是基于簡單的模式匹配(pattern matching)。1997年,一個標志性的事件發生了,當時 Microsoft Word 97 引入了一個基于成熟的自然語言處理系統(Heidorn, 2000)的語法檢查器,以支持更復雜的錯誤檢測和修改,并提高了準確率。2020年,語法檢查器再次實現關鍵性突破,微軟推出了神經語法檢查器(neural grammar checker),通過利用深度神經網絡和全新的流暢度提升學習和推理機制,神經語法檢查器在 CoNLL-2014 和 JFLEG 基準數據集上均取得了 SOTA 結果[1,2]。2022年,微軟發布了高度優化后的 Microsoft Editor 神經語法檢查器,并將其集成到 Word Win32、Word Online、Outlook Online 和 Editor Browser Extension 中。
如今 Microsoft Editor 版本中的神經語法檢查器模型主要采用了微軟亞洲研究院創新的 Aggressive Decoding 算法,而且借助高性能 ONNX Runtime(ORT)進行加速,可以使服務器端模型的推理速度提升200%,在不損失模型預測質量的情況下,節省了三分之二的成本。此外,該神經語法檢查器模型還使用微軟亞洲研究院前沿的客戶端 seq2seq 建模技術 EdgeFormer,構建了性能優異的輕量級生成語言模型,結合部署過程中設備開銷感知的模型和系統優化,該技術滿足交付要求,賦能用戶設備上的部署,最終實現了零銷貨成本(zero-COGS, zero-cost-of-goods-sold)的目標。
不僅如此,Microsoft Editor 中的神經語法檢查器模型在轉換為客戶端模型后,還有三個優勢:
1. 提升隱私性。客戶端模型在用戶設備本地運行,無需向遠程服務器發送任何個人數據。
2. 增強可用性。客戶端模型可以離線運行,不受網絡連接、帶寬或服務器容量的限制。
3. 降低成本、提高可擴展性。客戶端模型運行在用戶設備上,省去了服務器執行所需的所有計算,從而可以服務更多客戶。
另外,Microsoft Editor 還使用了 GPT-3.5 模型來生成高質量的訓練數據來識別和移除低質量的訓練示例,從而提升模型的性能。
Aggressive Decoding 算法具有巨大價值,它不僅適用于 Microsoft Editor 這樣對響應時間、請求頻率和準確度都有很高要求的應用場景,還可以拓展到更多功能模塊,如文本重寫、文本摘要等。Aggressive Decoding 算法讓我們能夠在保證模型預測質量不受損的同時更快地服務更多的客戶,降低服務成本并提高產品的競爭力和影響力, 這一創新技術也將在未來的客戶端模型研發中發揮重要作用。
陳思清
微軟首席應用科學家
Aggressive Decoding:首個在seq2seq任務上無損加速的高效解碼算法
Microsoft Editor 中的人工智能語法檢查器主要基于 Transformer 模型,并采用了微軟亞洲研究院在語法糾錯方面的創新技術[1,2,3]。與大多數 seq2seq 任務一樣,Microsoft Editor 此前的模型使用了自回歸解碼來進行高質量的語法校正。然而,傳統的自回歸解碼效率很低,尤其是由于低計算并行性,導致模型無法充分利用現代計算設備(CPU、GPU),從而使得模型服務成本過高,并且難以快速擴展到更多終端(Web/桌面)。
為了降低服務成本,微軟亞洲研究院的研究員們提出了創新的解碼算法 Aggressive Decoding[3]。與之前以犧牲預測質量為代價來加速推理的方法不同,Aggressive Decoding 是首個應用在 seq2seq 任務(如語法檢查和句子重寫)上達到無損加速的高效解碼算法。它直接將輸入作為目標輸出,并且并行驗證它們,而不是像傳統的自回歸解碼那樣逐個順序解碼。因此,這一算法可以充分發揮現代計算設備(如帶有 GPU 的 PC)強大的并行計算能力,極大地提升解碼速度,能夠在不犧牲質量的前提下以低廉的成本處理來自全球用戶(每年)數萬億次的請求。
圖1:Aggressive Decoding 的工作原理
如圖1所示,如果模型在 Aggressive Decoding 過程中發現了一個分歧點,那么算法將舍棄分歧點后的所有預測,并使用傳統的逐個自回歸解碼重新解碼。如果在逐個重新解碼時發現了輸出和輸入之間存在唯一的后綴匹配(圖1中藍色點線突出顯示的建議),那算法會通過把輸入的匹配字符(token)之后的字符(圖1中用橙色虛線突出顯示的部分)復制到解碼器的輸入中并假設它們是相同的,從而切換回 Aggressive Decoding。通過這種方式,Aggressive Decoding 可以確保生成的字符與自回歸貪婪解碼一致,但解碼步驟大幅減少,顯著提高了解碼效率。
我們在做模型推理加速算法研究時最重要的考慮就是無損,因為在實際應用中,模型生成質量是排在第一位的,以損失質量來換取更小的開銷會嚴重影響用戶體驗。為此,我們提出了 Aggressive Decoding 算法,它利用了語法糾錯任務的一個重要特性,即輸入與輸出高度相似,將整個計算過程(pipeline)高度并行化,充分利用 GPU 在并行計算上的優勢,在生成質量無損的前提下實現大幅加速的效果。
葛濤
微軟亞洲研究院高級研究員
離線+在線評估結果:Aggressive Decoding可顯著降低COGS
離線評估:研究員們在語法校正和其他文本重寫任務如文本簡化中,采用了一個6+6標準的 Transformer 及深度編碼器和淺層解碼器的 Transformer 來測試 Aggressive Decoding。結果表明 Aggressive Decoding 可以在沒有質量損失的情況下大幅提升速度。
表1:6+6標準 Transformer 測試結果
表2:深度編碼器和淺層解碼器的 Transformer 的測試結果
圖2:Aggressive Decoding 算法在更強大的并行計算設備上的運行效果更好
在線評估:研究員們還在 Marian 服務器模型和使用 ONNX Runtime 的 Aggressive Decoding 的同等服務器模型之間進行了 A/B 實驗。結果如圖3所示,與在 CPU 中使用傳統自回歸解碼的 Marian 運行時相比,后者在 p50 延遲上有超過2倍的提升,在 p95 和 p99 延遲上有超過3倍的提升。此外,與之前的自回歸解碼相比,后者提供了更高的效率穩定性。這種顯著的推理時間加速,將服務器端的 COGS 降低了三分之二。
圖3:所有區域 Marian 和 ONNX 語法檢查器延遲對比
離線和在線評估都驗證了 Aggressive Decoding 能夠在不降低模型預測質量的情況下顯著減少 COGS。基于此,研究員們將 Aggressive Decoding 也應用到了更通用的 seq2seq 任務中[4]。Aggressive Decoding 的高效率和無損質量特性,或將使其成為 seq2seq 任務高效解碼的標準范式,在降低 seq2seq 模型部署成本中起到重要作用。
ONNX Runtime加速語法檢查器
ONNX Runtime 是微軟開發的高性能引擎,它可在各種硬件平臺上加速人工智能模型。許多基于機器學習的微軟產品都利用 ONNX Runtime 來加速推理性能。為了進一步降低推理延遲,ORT 團隊的研發人員們首先將 PyTorch 版的 Aggressive Decoding 語法檢查器,通過 PyTorch-ONNX 導出器導出為 ONNX 格式,再使用 ONNX Runtime 進行推理。ONNX Runtime 支持 Transformer 的特定優化以及 INT8 量化,這不僅實現了 Transformer 在 CPU 上的性能加速,同時還可以縮減模型大小。該端到端解決方案使用了多項前沿技術,以實現高效地運行這個先進的語法檢查器模型。
ONNX Runtime 是一個具有很好延展性的跨硬件模型加速引擎,可以支持不同的應用場景。為了最高效運行 Aggressive Decoding 這一創新解碼算法,我們對 PyTorch 導出器和 ONNX Runtime 做了一系列提升,最終讓這一先進的語法檢查器模型以最高性能運行。
寧瓊
微軟首席產品主管
PyTorch 提供了一個內置函數,可以輕松地將 PyTorch 模型導出為 ONNX 格式。為了支持語法檢查模型的獨特架構,研發人員們在導出器里實現了復雜嵌套控制流導出到 ONNX,并擴展了官方 ONNX 規范來支持序列數據類型和運算符,以表示更復雜的場景,例如自回歸搜索算法。這樣就不需要單獨導出模型編碼器和解碼器組件,再使用序列生成邏輯將它們串聯在一起。由于 PyTorch-ONNX 導出器和 ONNX Runtime 支持序列數據類型和運算符,所以原模型可以導出成單一的一個包括編碼器、解碼器和序列生成的 ONNX 模型,這既帶來了高效的計算,又簡化了推理邏輯。此外,PyTorch ONNX 導出器的 shape type inference 組件也得到了增強,從而可以得到符合更嚴格的 ONNX shape type 約束下的有效的 ONNX 模型。
在語法檢查器模型中引入的 Aggressive Decoding 算法最初是在 Fairseq 中實現的。為了使其與 ONNX 兼容以便于導出,研發人員們在 HuggingFace 中重新實現了 Aggressive Decoding 算法。在深入實施時,研發人員們發現 ONNX 標準運算符集不直接支持某些組件(例如分叉檢測器)。目前有兩種方法可以將不支持的運算符導出到 ONNX 并在 ONNX Runtime 中運行:1. 利用 ONNX 已有的基本運算符組建一個具有等效語義的圖;2. 在 ONNX Runtime 中實現一個更高效的自定義運算符。ONNX Runtime 自定義運算符功能允許用戶實現自己的運算符,以便靈活地在 ONNX Runtime 中運行。用戶可以權衡實現成本和推理性能來選擇合適的方法。考慮到本模型組件的復雜性,標準 ONNX 運算符的組合可能會帶來性能瓶頸。因此,研發人員們選擇在 ONNX Runtime 中實現自定義運算符。
ONNX Runtime 支持 Transformer 的優化和量化,這在 CPU 和 GPU 上都能提升性能。此外,ONNX Runtime 針對語法檢查器模型進一步增強了編碼器 attention 以及解碼器 reshape 圖算融合。支持該模型的另一大挑戰是多個模型子圖,而 ONNX Runtime Transformer 優化器和量化工具對此也實現了子圖融合。ONNX Runtime 量化壓縮已被應用于整個模型,進一步改善了吞吐量和延遲。
GPT-3.5助力模型實現質的飛躍
為了進一步提高生產中模型的精度和召回率,研究員們使用了強大的 GPT-3.5 作為教師模型。具體而言,GPT-3.5 模型通過以下兩種方式來幫助提高結果:
訓練數據增強:通過對 GPT-3.5 模型進行微調,使其為大量未標注的文本生成標簽。所獲得的高質量標注,可以用作增強訓練數據來提高模型性能。
訓練數據清理:利用 GPT-3.5 強大的零樣本和少樣本學習能力來區分高質量和低質量的訓練示例。然后,通過 GPT-3.5 模型重新對已識別的低質量示例生成標注,從而產生更干凈、更高質量的訓練集,直接增強模型性能。
EdgeFormer:用于客戶端seq2seq建模的成本效益參數化
近年來,客戶端設備的計算能力大大增加,使得利用深度神經網絡來實現最終的零銷貨成本成為可能。然而,在這些設備上運行生成式語言模型仍然是一個很大的挑戰,因為這些模型的內存效率必須受到嚴格的控制。在涉及生成式語言模型時,自然語言理解中用于神經網絡的傳統壓縮方法往往不適用。
圖4:使用深度神經網絡來實現零銷貨成本
(zero-COGS)
運行在客戶端的語法模型應該具有很高的效率(例如延遲在100ms內),這個問題已經由 Aggressive Decoding 解決了。此外,客戶端模型還必須具有高效的內存(例如占用的空間在50MB以內),這是強大的 Transformer 模型(通常超過5000萬個參數)在客戶端設備上運行的主要瓶頸。
為了應對這一挑戰,微軟亞洲研究院的研究員們引入了前沿的客戶端 seq2seq 建模技術EdgeFormer[6],用于構建性能優異的輕量級生成語言模型,讓模型可以在用戶的計算機上輕松運行。
圖5:DNN 語法:服務器模型 VS 客戶端模型
EdgeFormer 有兩個原則,主要是為了參數化的成本效益:
有利于編碼器的參數化
負載均衡參數化
圖6:有利于編碼器的參數化
圖7:負載均衡參數化
遵循上述具有成本效益參數化的原則而設計的 EdgeFormer,使得每個參數都能發揮最大潛力,即使客戶端設備存在嚴格的計算和內存限制,也能獲得有競爭力的結果。
在 EdgeFormer 的基礎上,研究員們進一步提出了 EdgeLM——EdgeFormer 的預訓練版本,這是第一個在設備上公開可用的預訓練 seq2seq 模型,可以讓 seq2seq 任務的微調變得更容易,進而獲得好的結果。EdgeLM 作為語法客戶端模型的基礎模型,實現了零銷貨成本,與服務器端模型相比,該模型以最小的質量損失實現了超過5倍的模型壓縮。
微軟亞洲研究院異構計算組致力于以全棧協同設計的思想,構建深度學習模型到實際設備部署之間的橋梁。以 Microsoft Editor 為例,我們與算法、產品和 AI 框架團隊深度合作,通過系統和硬件感知的模型優化和壓縮,以及針對不同硬件的推理系統和運算符優化等,使模型開銷能夠滿足實際設備運行的要求,為未來將更多微軟產品的 AI 服務部署到設備端鋪平了道路。
曹婷
微軟亞洲研究院高級研究員
降低推理成本,賦能客戶端部署
客戶端設備的模型部署對硬件使用有嚴格的要求,如內存和磁盤使用量等,以避免干擾其他的應用程序。由于 ONNX Runtime 是一個輕量級的引擎并提供全面客戶端推理解決方案(如 ONNX Runtime 量化和 ONNX Runtime 擴展),所以其在設備部署方面也具有明顯的優勢。此外,為了在保持服務質量的前提下滿足交付要求,微軟亞洲研究院引入了一系列優化技術,包括系統感知的模型優化、模型元數據簡化、延遲參數加載以及定制量化策略。基于 EdgeFormer 建模,這些系統優化可以進一步將內存成本降低2.7倍,而不會降低模型性能,最終賦能模型在客戶端設備的部署。
系統感知的模型優化。由于模型在推理系統中被表示為數據流圖,因此該模型的主要內存成本來自于生成的許多子圖。如圖8所示,PyTorch 代碼中的每個分支被映射為一個子圖。所以,需要通過優化模型實現來減少分支指令的使用率。這其中尤為重要的是,因為波束搜索包含更多的分支指令,研究員們利用了貪婪搜索作為解碼器搜索算法,從而將內存成本降低了38%。
圖8:PyTorch 模型和 ONNX 模型圖的映射
模型元數據簡化。如圖8所示,模型包含大量消耗內存的元數據,如節點名稱和類型、輸入和輸出以及參數等。為了降低成本,研究員們需要簡化元數據,只保留推理所需的基本信息,例如,節點名稱從一個長字符串簡化為一個索引。此外,研究員們也優化了 ONNX Runtime 模型圖的實現,對所有子圖只保留一個元數據副本,而不是在每次生成子圖時復制所有可用的元數據。
延遲模型權重加載。當前的模型文件包含模型圖和權重,并在模型初始化期間將它們一起加載到內存中。然而,這會增加內存使用量,如圖9所示,這是因為在模型圖解析和轉換過程中會重復復制權重。為了避免這種情況,研究員們提出將模型圖和權重分別保存成獨立的文件,并將該方法在 ONNX Runtime 加以實現。通過該方法,在初始化期間,只有模型圖被加載到內存中進行實際解析和轉換,而權重仍然留在磁盤上,通過文件映射只把權重文件指針(pointer)保留在內存中,實際的權重到內存的加載將被推遲到模型推理之時。該技術可將峰值內存成本降低50%。
圖9:對比現有的模型圖和權重同時加載(虛線上),以及模型初始化期間通過文件映射實現的延遲權重加載(虛線下)
ONNX Runtime 量化和擴展。量化是眾所周知的模型壓縮技術,它在犧牲模型精度的同時,帶來了性能加速和模型縮減。ONNXRuntime 量化提供了多種微調選擇,使其能夠應用定制的量化策略。研發人員們為 EdgeFormer 模型定制了最優量化策略,以減少量化對精度的影響,具體包括訓練后、動態和 UINT8 量化,以及 per-channel 和既有所有運算符量化策略。Onnxruntime-extensions 提供了一組 ONNX Runtime 定制運算符,以支持視覺、文本和自然語言處理模型的常見預處理和后處理運算符。利用這一工具,研發人員們將模型的預處理和后處理,例如標記化(tokenization)、字符串操作等,都集成到一個獨立的 ONNX 模型文件中,從而提高性能、簡化部署、減少內存使用率并提供更好的可移植性。
這些創新成果只是微軟亞洲研究院為降低生成式語言模型的銷貨成本而做出的長期努力中的第一個里程碑。這些方法并不局限于加速神經語法檢查器,它可以很容易地應用在抽象摘要、翻譯或搜索引擎等廣泛的場景中,從而加速降低大語言模型的銷貨成本[5,8]。在人工智能的未來發展中,這些創新對微軟乃至對整個行業都將至關重要。
相關鏈接:
ONNX Runtime
https://onnxruntime.ai
EdgeFormer
https://www.microsoft.com/en-us/research/publication/edgeformer-a-parameter-efficient-transformer-for-on-device-seq2seq-generation/
EdgeLM
https://github.com/microsoft/unilm/tree/master/edgelm
ONNX Runtime 量化
https://onnxruntime.ai/docs/performance/model-optimizations/quantization.html
Onnxruntime-extensions
https://github.com/microsoft/onnxruntime-extensions
參考文獻:
[1] Tao Ge, Furu Wei, Ming Zhou: Fluency Boost Learning and Inference for Neural Grammatical Error Correction. In ACL 2018.
[2] Tao Ge, Furu Wei, Ming Zhou: Reaching Human-level Performance in Automatic Grammatical Error Correction: An Empirical Study.
https://arxiv.org/abs/1807.01270
[3] Xin Sun, Tao Ge, Shuming Ma, Jingjing Li, Furu Wei, Houfeng Wang: A Unified Strategy for Multilingual Grammatical Error Correction with Pre-trained Cross-lingual Language Model. In IJCAI 2022.
[4] Xin Sun, Tao Ge, Furu Wei, Houfeng Wang: Instantaneous Grammatical Error Correction with Shallow Aggressive Decoding. In ACL 2021.
[5] Tao Ge, Heming Xia, Xin Sun, Si-Qing Chen, Furu Wei: Lossless Acceleration for Seq2seq Generation with Aggressive Decoding.
https://arxiv.org/pdf/2205.10350.pdf
[6] Tao Ge, Si-Qing Chen, Furu Wei: EdgeFormer: A Parameter-efficient Transformer for On-device Seq2seq Generation. In EMNLP 2022.
[7] Heidorn, George. “Intelligent Writing Assistance.” Handbook of Natural Language Processing. Robert Dale, Hermann L. Moisl, and H. L. Somers, editors. New York: Marcel Dekker, 2000: 181-207.
[8] Nan Yang, Tao Ge, Liang Wang, Binxing Jiao, Daxin Jiang, Linjun Yang, Rangan Majumder, Furu Wei: Inference with Reference: Lossless Acceleration of Large Language Models.
https://arxiv.org/abs/2304.04487
了解更多科技前沿資訊
-
微軟
+關注
關注
4文章
6624瀏覽量
104307
原文標題:Microsoft Editor是怎樣實現零COGS的?
文章出處:【微信號:mstech2014,微信公眾號:微軟科技】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論