多年前,Google開始在ML運維中導(dǎo)入SRE的做法,確保系統(tǒng)的服務(wù)可靠性,在2年前一場OpML’20技術(shù)大會上,Google ML SRE運維負(fù)責(zé)人Todd Underwood與另一位團(tuán)隊資深成員Daniel Papasian實際以Google搜索服務(wù)運維為例,公開分享他們從搜索服務(wù)ML宕機(jī)經(jīng)驗中,發(fā)展出一套應(yīng)對對策,除了希望改善大型ML系統(tǒng)宕機(jī)的問題,還要幫助Google創(chuàng)建更有韌性的ML運維策略,甚至還發(fā)現(xiàn)到,許多ML宕機(jī)事故并非真的ML服務(wù)出錯,而是系統(tǒng)管理的問題。他們更依據(jù)超過10年Google ML運維歸納出19種ML出錯場景的分類,來提供企業(yè)借鑒參考。
從老舊ML系統(tǒng)宕機(jī)經(jīng)驗中找解決方案,成了Google ML運維團(tuán)隊研究新課題
搜索引擎可說是Google最重要核心服務(wù)之一,如今近半數(shù)全球人口都在用,平均每秒就要處理高達(dá)7萬次用戶搜索查詢的請求,從回答各種生活大小事,到天氣、交通信息都難不倒它。
早在多年以前,Google就已經(jīng)在搜索引擎中加入各種ML算法,提供更精準(zhǔn)的搜索結(jié)果,像是分析搜索字詞、搜索比對、網(wǎng)頁實用性排名的算法等,只要依據(jù)用戶查詢字詞、網(wǎng)頁的關(guān)聯(lián)性和實用性、信息來源的專業(yè)度分析等綜合不同考量,就能從搜索索引中的上萬億個網(wǎng)頁排序里,決定查詢的搜索結(jié)果,來貼近用戶搜索查詢。
Google搜索引擎算法核心有個大型排名及推薦系統(tǒng),這套系統(tǒng)經(jīng)過多年發(fā)展,其中有套用了超過15年的老舊ML系統(tǒng),也是Google使用最久且規(guī)模最大一套重要ML系統(tǒng),但多年下來,這套系統(tǒng)屢屢發(fā)生宕機(jī)的事故,無法用ML模型進(jìn)行推論,來優(yōu)化排名及推薦內(nèi)容,導(dǎo)致服務(wù)品質(zhì)不穩(wěn)定。這也成了Google所要面對的ML運維大考驗。直到兩年多前,Google ML運維團(tuán)隊終于找出了對策。
Google最老舊一套大型ML系統(tǒng),建有上千個模型優(yōu)化排名及推薦服務(wù)
以系統(tǒng)規(guī)模來看,這套大型ML系統(tǒng)中,每天同時要執(zhí)行上千個ML模型,來優(yōu)化排名及推薦服務(wù),而且不只ML模型數(shù)量眾多,模型訓(xùn)練更是個大問題,只要新資料進(jìn)來,就必須不斷更新生產(chǎn)環(huán)境中的ML模型,光是上千個模型同時訓(xùn)練,需訪問和運算用的模型參數(shù)累計就高達(dá)1,000億個,才能用于全部模型訓(xùn)練,加上這套系統(tǒng)歷經(jīng)多次翻新,系統(tǒng)越來越復(fù)雜,就在這樣一個龐大且復(fù)雜大型系統(tǒng)架構(gòu)下,有時只要ML工作流程或環(huán)節(jié)稍有差錯,就可能造成ML系統(tǒng)宕機(jī)。
為了探究長期以來造成ML系統(tǒng)宕機(jī)的原因,Google ML運維團(tuán)隊兩年前嘗試進(jìn)行研究,希望能找出適當(dāng)?shù)慕夥?,避免相似問題再發(fā)生。他們分析以往所有ML系統(tǒng)宕機(jī)事件,要從這些歷史事件中找到問題的根本原因,作為改善ML系統(tǒng)可靠性的參考依據(jù),正好這套ML系統(tǒng)過去10年宕機(jī)過程的詳細(xì)記錄都有完整保留在數(shù)據(jù)庫中,提供包含元數(shù)據(jù)(metadata)在內(nèi)的完整事后的調(diào)查分析,可供團(tuán)隊研究使用。
這段期間,Google ML運維團(tuán)隊一共分析近百起ML宕機(jī)事故,從這些實際發(fā)生的事件中,自行分析歸納出19種ML出錯場景要注意。其中,最常見的一種就包辦了15起宕機(jī)事故。
具體來說,這19種ML出錯場景的分類,有流程調(diào)度問題、后端系統(tǒng)重載、預(yù)期性資料導(dǎo)入臨時出錯、CPU硬件出錯、緩存失效問題、模型推論參考的抽樣分配出現(xiàn)改變、組態(tài)配置改變導(dǎo)致的混亂、數(shù)據(jù)結(jié)構(gòu)沒有優(yōu)化、跨集群分派工作的挑戰(zhàn)、訓(xùn)練策略執(zhí)行沒有按照預(yù)期順序、過于頻繁調(diào)整ML模型超參數(shù)、組態(tài)變動而沒有妥善試驗或驗證、用戶端對模型的推論做出錯誤推測、模型推論時間過長、在程序代碼中使用不正確assert宏、誤用標(biāo)注錯誤的數(shù)據(jù)來訓(xùn)練模型、embedding矢量空間維度不匹配、測試任務(wù)與正式環(huán)境的溝通不正確,以及無法調(diào)度必要的帶寬、內(nèi)存、CPU資源。
基本上,從系統(tǒng)宕機(jī)歸納出的原因中,可以看見有些出錯原因較單純,像是緩存失效問題,還有一些是不易發(fā)現(xiàn)的錯誤,如跨集群分派工作的問題。另外有些錯誤則是與ML相關(guān),例如embedding矢量空間維度不匹配就是屬于這一類,甚至在復(fù)雜大型分布式系統(tǒng)環(huán)境下,也有可能因為使用的CPU芯片出錯,導(dǎo)致ML系統(tǒng)宕機(jī)的情況出現(xiàn)。
當(dāng)完成近百起ML宕機(jī)事故調(diào)查,歸類成19種ML出錯場景后,還進(jìn)一步以分組方式加以劃分,并分成兩個組別來進(jìn)行比較,一組是純ML與非純ML工作流程兩者的比較,另一組則是單一系統(tǒng)或分布式系統(tǒng)間的比較。例如系統(tǒng)調(diào)度出錯造成宕機(jī),就是屬于分布式系統(tǒng)管理的問題。
運維團(tuán)隊經(jīng)過比較后發(fā)現(xiàn),許多ML系統(tǒng)宕機(jī)事故和其出錯原因,并非歸因于ML本身的問題,大多是系統(tǒng)管理所造的錯誤,才有后面宕機(jī)的結(jié)果。從系統(tǒng)架構(gòu)角度來看,他們則發(fā)現(xiàn),若是ML系統(tǒng)有采取分布式架構(gòu)設(shè)計,發(fā)生宕機(jī)事故比例會比單一系統(tǒng)時更高,甚至多達(dá)6成出錯都跟分布式ML系統(tǒng)處理有關(guān),這也可以用來說明,ML宕機(jī)和其系統(tǒng)采用單一或分布式架構(gòu),彼此之間有一定的關(guān)聯(lián)性。
要運維一套大型ML系統(tǒng),不能只懂ML,分布式系統(tǒng)管理更重要
從這些研究結(jié)果,Google ML運維團(tuán)隊也找到一些方法,來改善ML系統(tǒng)可靠性,像是要求對ML工作流程進(jìn)行全面監(jiān)控及關(guān)注,包含監(jiān)測資料吞吐量、ML系統(tǒng)執(zhí)行率,以及結(jié)合各種診斷測試等。對于不同源頭的訓(xùn)練數(shù)據(jù)、ML模型及文件,也要創(chuàng)建系統(tǒng)化版本管控機(jī)制,以便發(fā)生宕機(jī)事故時,團(tuán)隊馬上能修正。重新訓(xùn)練的ML模型部署前,也要確保能正常執(zhí)行沒問題才能放行,避免影響到整體系統(tǒng)性能與利用率。
正因為許多宕機(jī)事件都與分布式ML系統(tǒng)密切關(guān)聯(lián),也讓Google ML運維團(tuán)隊更加意識到,一套大型系統(tǒng)中,從構(gòu)建到運維管理,除了必須有專門團(tuán)隊來負(fù)責(zé),對于運維團(tuán)隊組成,不能只有ML工程師,還必需要有分布式系統(tǒng)的工程師加入,甚至人數(shù)比例要比ML工程師都還高,來負(fù)責(zé)大型系統(tǒng)測試和診斷,通過這樣的系統(tǒng)管理方式,才能提升系統(tǒng)的可靠性,甚至幫助Google創(chuàng)建起更有韌性的ML運維行法。
盡管,Google ML運維經(jīng)驗不一定適用每一家企業(yè),但從這家公司多年ML運維和思考策略,也能提供企業(yè)借鑒來參考。Todd Underwood就建議,企業(yè)可以根據(jù)歷史ML宕機(jī)事件,按影響程度、對公司沖擊、事故持續(xù)時間和原因來進(jìn)行分類,創(chuàng)建自己一套ML運維行法,除了經(jīng)由分析找出根本原因,每年可以定期重新審視,持續(xù)改進(jìn)內(nèi)部ML工作流程。
Google ML運維經(jīng)驗:19種ML出錯場景
1.流程調(diào)度問題
2.后端系統(tǒng)重載
3.預(yù)期性資料導(dǎo)入臨時出錯
4.CPU硬件出錯
5.緩存失效問題
6.模型推論參考的抽樣分配出現(xiàn)改變
7.組態(tài)配置改變導(dǎo)致的混亂
8.數(shù)據(jù)結(jié)構(gòu)沒有優(yōu)化
9.跨集群分派工作的挑戰(zhàn)
10.訓(xùn)練策略執(zhí)行沒有按照預(yù)期順序
11.過于頻繁調(diào)整ML模型超參數(shù)
12.組態(tài)變動而沒有妥善試驗或驗證
13.用戶端對模型的推論做出錯誤推測
14.模型推論時間過長
15.在程序代碼中使用不正確assert宏
16.誤用標(biāo)注錯誤的數(shù)據(jù)來訓(xùn)練模型
17.矢量空間維度不匹配
18.測試任務(wù)與正式環(huán)境的溝通不正確
19.無法調(diào)度必要的帶寬、內(nèi)存、CPU資源
數(shù)據(jù)源:Google,iThome整理,2022年3月