譯者 | 崔皓
審校 | 重樓
隨著機(jī)器學(xué)習(xí)模型的復(fù)雜性和規(guī)模不斷增長,任何企業(yè)或者組織在部署、擴(kuò)展模型上都面臨著巨大的挑戰(zhàn)。迫在眉睫的挑戰(zhàn)是如何在內(nèi)存限制與模型規(guī)模之間取得平衡,并保持高性能和成本效益。本文探討了一種創(chuàng)新的架構(gòu)解決方案,通過將共享神經(jīng)編碼器與專門的預(yù)測(cè)頭結(jié)合的混合方法來應(yīng)對(duì)這些挑戰(zhàn)。
挑戰(zhàn):ML 模型部署中的內(nèi)存限制
傳統(tǒng)機(jī)器學(xué)習(xí)模型的部署通常需要將完整模型加載到內(nèi)存中,以供用例或客戶應(yīng)用程序使用。例如,在自然語言理解(NLU)應(yīng)用中使用基于 BERT 的模型,每個(gè)模型通常消耗大約 210-450MB 的內(nèi)存。在為眾多客戶提供服務(wù)時(shí),這會(huì)面臨內(nèi)存容量不足需要擴(kuò)展的挑戰(zhàn)。擁有 72GB CPU 內(nèi)存的經(jīng)典服務(wù)器只能支持大約 100 個(gè)模型,如此這般就會(huì)為服務(wù)能力設(shè)定上限。
一種新穎的解決方案:解耦架構(gòu)
為了解決模型服務(wù)量增大而內(nèi)存不足的問題,我們采用了解耦架構(gòu),將模型分為兩個(gè)關(guān)鍵組件。第一個(gè)是共享神經(jīng)編碼器(SNE),一個(gè)預(yù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)組件,處理輸入數(shù)據(jù)的基本編碼。在實(shí)踐應(yīng)用過程中,基于 BERT 架構(gòu)的這個(gè)編碼器生成上下文嵌入 - 對(duì)于輸入文本中的每個(gè)標(biāo)記是 768 維向量。第二個(gè)組件是任務(wù)特定的預(yù)測(cè)頭(TSPH),它是用來嵌入特定預(yù)測(cè)的專業(yè)化組件。這種架構(gòu)允許多個(gè)客戶應(yīng)用相同的共享編碼器,同時(shí)通過各自的專業(yè)化組件保持其獨(dú)特的預(yù)測(cè)能力。
關(guān)鍵組件及其相互作用
共享神經(jīng)編碼器
共享神經(jīng)編碼器充分利用了預(yù)訓(xùn)練模型,該預(yù)訓(xùn)練模型在大型通用數(shù)據(jù)集上進(jìn)行過訓(xùn)練。實(shí)現(xiàn)過程中,編碼器組件需要大約 227 MB 的非量化形式,但通過 INT8 量化,可以將其減少到約 58 MB。在處理文本時(shí),它處理長達(dá) 250 個(gè)令牌的序列,生成高維上下文嵌入。對(duì)于典型的包含 15 個(gè)令牌的話語,編碼器生成尺寸為 15x768 的輸出張量,對(duì)嵌入需要約 45 KB 的內(nèi)存。
任務(wù)特定的預(yù)測(cè)頭
任務(wù)專用預(yù)測(cè)頭代表了在效率上的顯著改進(jìn),其非量化形式只需 36 MB,量化后甚至只需 10 MB。該組件針對(duì)意圖分類和實(shí)體識(shí)別等任務(wù)保留了自定義配置,同時(shí)比傳統(tǒng)完整模型消耗的內(nèi)存大大減少。例如,單個(gè)預(yù)測(cè)頭可以在標(biāo)準(zhǔn) CPU 硬件上在不到 5 毫秒內(nèi)處理 15x768 維的嵌入向量并輸出分類分?jǐn)?shù)。
性能指標(biāo)和實(shí)施
通過使用這種架構(gòu)進(jìn)行的測(cè)試,收獲了令人滿意的性能特征。使用一臺(tái)具有 36 個(gè)虛擬 CPU 和 72GB 內(nèi)存的 c5.9xlarge 實(shí)例,單個(gè)服務(wù)器在僅運(yùn)行預(yù)測(cè)頭時(shí)可以處理約每秒 1,500 筆運(yùn)算(TPS),且 p90 延遲為 25 毫秒。當(dāng)將兩個(gè)組件組合在同一硬件上時(shí),我們?nèi)匀豢梢詫?shí)現(xiàn) 300TPS,p90 延遲為 35 毫秒——對(duì)大多數(shù)生產(chǎn)工作負(fù)載來說已足夠。
編碼器組件在 GPU 硬件上部署時(shí)(具體為 p3.2xlarge 實(shí)例),可以以每秒超過 1,000 個(gè)請(qǐng)求的速度處理,延遲僅為 10 毫秒。該配置允許對(duì)請(qǐng)求進(jìn)行高效的分批處理,最佳分批大小為 16 個(gè)請(qǐng)求,提供吞吐量和延遲的最佳平衡。
基礎(chǔ)設(shè)施設(shè)計(jì)
采用具有特定性能目標(biāo)的單元架構(gòu)方法。架構(gòu)中的每個(gè)單元設(shè)計(jì)用于處理約 1,000 個(gè)活躍模型,同時(shí)具有自動(dòng)擴(kuò)展功能,可在三個(gè)可用區(qū)域中保持單元的健康狀態(tài)。系統(tǒng)采用復(fù)雜的負(fù)載平衡策略,能夠處理每個(gè)單元高達(dá) 600TPS 的突發(fā)量,同時(shí)保持 p99 延遲在 80 毫秒以下。
為了實(shí)現(xiàn)高可用性,架構(gòu)實(shí)施了一種多環(huán)設(shè)計(jì),其中每個(gè)環(huán)提供特定的語言區(qū)域。例如,所有英語變體可能共享一個(gè)環(huán),而法語變體則共享另一個(gè)環(huán),可根據(jù)特定語言模型特性進(jìn)行有效的資源分配。每個(gè)環(huán)包含多個(gè)單元格,可以根據(jù)需求獨(dú)立進(jìn)行擴(kuò)展。
資源優(yōu)化
解耦架構(gòu)實(shí)現(xiàn)了顯著的資源優(yōu)化。在生產(chǎn)環(huán)境中,實(shí)際測(cè)量顯示如下:
- 內(nèi)存減少。原始 210 MB 的模型被縮減到 10 MB 的預(yù)測(cè)頭部加上一個(gè)共享的 58 MB 編碼器。
- 存儲(chǔ)效率。編碼器可以為數(shù)千個(gè)預(yù)測(cè)頭提供服務(wù),最多可以減少 75%的總存儲(chǔ)需求。
- 成本效率。 GPU 資源在編碼器的所有請(qǐng)求之間共享,而更便宜的 CPU 資源用于處理預(yù)測(cè)頭。
- 延遲改善。端到端處理時(shí)間,對(duì)于緩存模型從 400 毫秒減少到大約 35 毫秒。
對(duì)未來的影響
這種架構(gòu)模式為 ML 部署打開了新的可能性,特別是隨著模型規(guī)模不斷增長。隨著當(dāng)前趨勢(shì)指向更大的語言模型,共享編碼表示變得越來越有價(jià)值。這種架構(gòu)通過以下方式支持未來的增長:
- 動(dòng)態(tài)模型更新:可以部署新的編碼器版本,而無需更新預(yù)測(cè)頭。
- 靈活的縮放:基于特定工作負(fù)載特征獨(dú)立縮放編碼器和預(yù)測(cè)組件。
- 資源池:高效共享 GPU 資源,服務(wù)于更多客戶。
結(jié)論
將“共享神經(jīng)編碼器”與“特定任務(wù)預(yù)測(cè)頭”相結(jié)合的解耦架構(gòu)代表著機(jī)器學(xué)習(xí)模型部署中的一項(xiàng)重大進(jìn)步。在性能提升方面表現(xiàn)優(yōu)秀,例如: 75% 的內(nèi)存減少、40% 的延遲改善,從而支持高并發(fā)模型。該方法提供了一種解決方案,既可以應(yīng)對(duì)規(guī)模挑戰(zhàn),同時(shí)又能保持性能并控制成本。
對(duì)于希望實(shí)施類似架構(gòu)的組織,應(yīng)仔細(xì)考慮特定工作負(fù)載特征。方案的成功與否取決于,對(duì)基礎(chǔ)設(shè)施設(shè)計(jì)和智能資源管理策略的深度思考,只有這樣才能支持強(qiáng)大的監(jiān)控和擴(kuò)展策略。
譯者介紹
崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開發(fā)和架構(gòu)經(jīng)驗(yàn),10年分布式架構(gòu)經(jīng)驗(yàn)。
原文標(biāo)題:Scaling ML Models Efficiently With Shared Neural Networks,作者:Meghana Puvvadi