天天看點

Microsoft Editor是怎樣實作零COGS的?

作者:微軟科技
Microsoft Editor是怎樣實作零COGS的?

編者按: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)強大的并行計算能力,極大地提升解碼速度,能夠在不犧牲品質的前提下以低廉的成本處理來自全球使用者(每年)數萬億次的請求。

Microsoft Editor是怎樣實作零COGS的?

圖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 可以在沒有品質損失的情況下大幅提升速度。

Microsoft Editor是怎樣實作零COGS的?

表1:6+6标準 Transformer 測試結果

Microsoft Editor是怎樣實作零COGS的?

表2:深度編碼器和淺層解碼器的 Transformer 的測試結果

Microsoft Editor是怎樣實作零COGS的?

圖2:Aggressive Decoding 算法在更強大的并行計算裝置上的運作效果更好

線上評估:研究員們還在 Marian 伺服器模型和使用 ONNX Runtime 的 Aggressive Decoding 的同等伺服器模型之間進行了 A/B 實驗。結果如圖3所示,與在 CPU 中使用傳統自回歸解碼的 Marian 運作時相比,後者在 p50 延遲上有超過2倍的提升,在 p95 和 p99 延遲上有超過3倍的提升。此外,與之前的自回歸解碼相比,後者提供了更高的效率穩定性。這種顯著的推理時間加速,将伺服器端的 COGS 降低了三分之二。

Microsoft Editor是怎樣實作零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模組化的成本效益參數化

近年來,用戶端裝置的計算能力大大增加,使得利用深度神經網絡來實作最終的零銷貨成本成為可能。然而,在這些裝置上運作生成式語言模型仍然是一個很大的挑戰,因為這些模型的記憶體效率必須受到嚴格的控制。在涉及生成式語言模型時,自然語言了解中用于神經網絡的傳統壓縮方法往往不适用。

Microsoft Editor是怎樣實作零COGS的?

圖4:使用深度神經網絡來實作零銷貨成本 (zero-COGS)

運作在用戶端的文法模型應該具有很高的效率(例如延遲在100ms内),這個問題已經由 Aggressive Decoding 解決了。此外,用戶端模型還必須具有高效的記憶體(例如占用的空間在50MB以内),這是強大的 Transformer 模型(通常超過5000萬個參數)在用戶端裝置上運作的主要瓶頸。

為了應對這一挑戰,微軟亞洲研究院的研究員們引入了前沿的用戶端 seq2seq 模組化技術 EdgeFormer[6],用于建構性能優異的輕量級生成語言模型,讓模型可以在使用者的計算機上輕松運作。

Microsoft Editor是怎樣實作零COGS的?

圖5:DNN 文法:伺服器模型 VS 用戶端模型

EdgeFormer 有兩個原則,主要是為了參數化的成本效益:

有利于編碼器的參數化

負載均衡參數化

Microsoft Editor是怎樣實作零COGS的?

圖6:有利于編碼器的參數化

Microsoft Editor是怎樣實作零COGS的?

圖7:負載均衡參數化 圖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%。

Microsoft Editor是怎樣實作零COGS的?

圖8:PyTorch 模型和 ONNX 模型圖的映射

模型中繼資料簡化。如圖8所示,模型包含大量消耗記憶體的中繼資料,如節點名稱和類型、輸入和輸出以及參數等。為了降低成本,研究員們需要簡化中繼資料,隻保留推理所需的基本資訊,例如,節點名稱從一個長字元串簡化為一個索引。此外,研究員們也優化了 ONNX Runtime 模型圖的實作,對所有子圖隻保留一個中繼資料副本,而不是在每次生成子圖時複制所有可用的中繼資料。

延遲模型權重加載。目前的模型檔案包含模型圖和權重,并在模型初始化期間将它們一起加載到記憶體中。然而,這會增加記憶體使用量,如圖9所示,這是因為在模型圖解析和轉換過程中會重複複制權重。為了避免這種情況,研究員們提出将模型圖和權重分别儲存成獨立的檔案,并将該方法在 ONNX Runtime 加以實作。通過該方法,在初始化期間,隻有模型圖被加載到記憶體中進行實際解析和轉換,而權重仍然留在磁盤上,通過檔案映射隻把權重檔案指針(pointer)保留在記憶體中,實際的權重到記憶體的加載将被推遲到模型推理之時。該技術可将峰值記憶體成本降低50%。

Microsoft Editor是怎樣實作零COGS的?

圖9:對比現有的模型圖和權重同時加載(虛線上) 模型初始化期間通過檔案映射實作的延遲權重加載(虛線下)

ONNX Runtime 量化和擴充。量化是衆所周知的模型壓縮技術,它在犧牲模型精度的同時,帶來了性能加速和模型縮減。ONNXRuntime 量化提供了多種微調選擇,使其能夠應用定制的量化政策。研發人員們為 EdgeFormer 模型定制了最優量化政策,以減少量化對精度的影響,具體包括訓練後、動态和 UINT8 量化,以及 per-channel 和既有所有運算符量化政策。Onnxruntime-extensions 提供了一組 ONNX Runtime 定制運算符,以支援視覺、文本和自然語言處理模型的常見預處理和後處理運算符。利用這一工具,研發人員們将模型的預處理和後處理,例如标記化(tokenization)、字元串操作等,都內建到一個獨立的 ONNX 模型檔案中,進而提高性能、簡化部署、減少記憶體使用率并提供更好的可移植性。

這些創新成果隻是微軟亞洲研究院為降低生成式語言模型的銷貨成本而做出的長期努力中的第一個裡程碑。這些方法并不局限于加速神經文法檢查器,它可以很容易地應用在抽象摘要、翻譯或搜尋引擎等廣泛的場景中,進而加速降低大語言模型的銷貨成本[5,8]。在人工智能的未來發展中,這些創新對微軟乃至對整個行業都将至關重要。

關注@微軟科技,了解更多行業資訊。

繼續閱讀