我在很多文章里都有吐槽大規(guī)模預(yù)訓(xùn)練模型的性能差,落地成本高,這一期就和大家講講,怎么評(píng)估算法的性能的。
當(dāng)然,這篇文章應(yīng)該是比較科普的,主要是為了讓大家樹(shù)立一個(gè)性能意識(shí),在進(jìn)行方案選型和最終檢測(cè)的時(shí)候,能有關(guān)注性能的這個(gè)意識(shí)。
性能的意義
這里所謂的性能,本質(zhì)是對(duì)執(zhí)行速度、執(zhí)行資源消耗的一種評(píng)估。在現(xiàn)實(shí)的落地場(chǎng)景,一個(gè)模型最終能不能用起來(lái),除了和算法效果有關(guān),即類(lèi)似準(zhǔn)確率召回率,還和依賴(lài)的資源以及速度是相關(guān)的。
我們可以把運(yùn)行環(huán)境比作一個(gè)空間有限的房間,如果你的刀是40米長(zhǎng)的,其實(shí)很難在這個(gè)房間里使的舒服,即使他的傷害很高很強(qiáng),與之相反,一把短一些的到在有限空間內(nèi),用起來(lái)會(huì)更得心應(yīng)手。這就是性能的意義,在預(yù)訓(xùn)練模型逐步熱門(mén)之后,這個(gè)問(wèn)題會(huì)更加尖銳,預(yù)訓(xùn)練無(wú)論是計(jì)算復(fù)雜度,還是空間需求,都很大,先不說(shuō)訓(xùn)練,就是推理,單機(jī)推理還算可以,但是耗時(shí),還是高并發(fā)需求下,并非所有的組織都能支持,因此,我們需要對(duì)性能有足夠的敏感性,否則會(huì)很可能會(huì)出現(xiàn),一頓操作效果調(diào)優(yōu)一個(gè)月的預(yù)訓(xùn)練模型,最終因?yàn)樯喜涣司€(xiàn)功虧一簣的尷尬情況,當(dāng)然,這也是作為一名算法工程師,必備的一種能力。
性能評(píng)估的觀測(cè)指標(biāo)
要評(píng)估性能好壞,有哪些評(píng)估項(xiàng),又有那些評(píng)估指標(biāo),詳細(xì)介紹下。
首先是單機(jī)速度的評(píng)估。即單進(jìn)程下,每次推理所需要的時(shí)間,或者單位時(shí)間下能處理的計(jì)算次數(shù),一般評(píng)估的是rt(Reaction Time,響應(yīng)時(shí)間)或者qps/tps(query per second,transaction per second)。但是,由于很多時(shí)候,不同的輸入可能會(huì)影響這個(gè)時(shí)間,所以一般使用和在線(xiàn)分布接近的樣本或者query來(lái)批量請(qǐng)求,求平均值,而常見(jiàn)的,耗時(shí)長(zhǎng)度的分布服從二八法則,因此我們要關(guān)注的是TOP耗時(shí)的情況,因此我們還會(huì)看不同位置的分位點(diǎn)情況,例如90%、95%或者99%分位點(diǎn)。另外還有種評(píng)估的方式,用合格率之類(lèi)的方法,例如最高耗時(shí)不能超過(guò)200ms,超過(guò)的算失敗,然后計(jì)算成功率,成功率99%以上。
對(duì)于互聯(lián)網(wǎng)環(huán)境,除了單機(jī)速度,還必須考慮并發(fā)能力,并發(fā)能力是指當(dāng)同時(shí)很多請(qǐng)求同時(shí)或者接近同時(shí)請(qǐng)求的時(shí)候的性能狀態(tài),很多時(shí)候,因?yàn)闊狳c(diǎn)事件的出現(xiàn),大家會(huì)大量開(kāi)始在網(wǎng)上檢索請(qǐng)求,對(duì)計(jì)算機(jī)而言,完不成的任務(wù)就會(huì)開(kāi)始排隊(duì)(這個(gè)和銀行柜臺(tái)類(lèi)似的),排隊(duì)太長(zhǎng)系統(tǒng)自然就難堪重負(fù)崩潰了,例如微博、B站、知乎這種偶爾的崩潰就很多是因?yàn)檫@個(gè)原因。指標(biāo)上,其實(shí)更多是和單機(jī)的評(píng)估類(lèi)似,只是評(píng)估的時(shí)候,一般是用多進(jìn)程同時(shí)請(qǐng)求以模擬在線(xiàn)情況,例如4進(jìn)程、8進(jìn)程這種,然后來(lái)看速度還能不能保證在合格范圍內(nèi)。
除了速度之外,偶爾還要看看其他的問(wèn)題,例如內(nèi)存,有沒(méi)有內(nèi)存泄漏(在服務(wù)運(yùn)行期間內(nèi)存有沒(méi)有持續(xù)增加),在高峰期內(nèi)存是否在正常范圍內(nèi)(例如80%以?xún)?nèi)),都是需要關(guān)注的。
從批跑到壓測(cè)
前面有提到,評(píng)估性能最簡(jiǎn)單的方式就是批量跑case,簡(jiǎn)單的性能評(píng)估,其實(shí)就是找一批和query批量跑,然后掐時(shí)間。這里,先說(shuō)下這個(gè)query需要有什么要求:
數(shù)量得足夠,否則均值和分位點(diǎn)計(jì)算就達(dá)不到統(tǒng)計(jì)意義。
而且盡可能和現(xiàn)實(shí)場(chǎng)景匹配,這樣測(cè)得時(shí)間和在線(xiàn)實(shí)際時(shí)間比較接近(這個(gè)其實(shí)沒(méi)那么難,直接撈日志抽樣即可)
這個(gè)時(shí)間的評(píng)估其實(shí)不難,簡(jiǎn)單的用tqdm,上面就顯示平均時(shí)間(X item/s),但是如果要算分位點(diǎn)了,肯定要把每個(gè)case的時(shí)間都記錄下來(lái)再統(tǒng)計(jì),例如弄numpy里面的函數(shù)計(jì)算,寫(xiě)起來(lái)并不算困難。
但是,一旦要考慮并發(fā)能力了,那就要壓測(cè)了,即壓力測(cè)試,所謂的壓測(cè),其實(shí)就是計(jì)算機(jī)模擬N個(gè)用戶(hù),同時(shí)不斷向服務(wù)發(fā)送請(qǐng)求,當(dāng)然,要壓測(cè)的話(huà),通常需要把模型打包成服務(wù),例如grpc或者h(yuǎn)ttp的。然后和觀測(cè)上面提的指標(biāo),耗時(shí)、qps、成功率、內(nèi)存等。一般情況,我們不需要用所有服務(wù)器來(lái)實(shí)驗(yàn),一般也是對(duì)一臺(tái)機(jī)器即可,因?yàn)槎嗯_(tái)機(jī)器,如果有做負(fù)載均衡,其實(shí)性能就是多臺(tái)機(jī)器求和而已。python實(shí)現(xiàn)上,先是對(duì)模型打包成服務(wù)形成服務(wù)端,而壓測(cè)腳本這邊寫(xiě)一個(gè)客戶(hù)端來(lái)請(qǐng)求服務(wù)端,上壓測(cè)的話(huà)就弄個(gè)多進(jìn)程觸發(fā)即可,網(wǎng)上有很多樣例代碼,直接搜,當(dāng)然別指望能照搬,肯定是需要自己服務(wù)的情況來(lái)修改額,畢竟接口不盡相同。
小結(jié)
本文給大家簡(jiǎn)單介紹了算法這邊需要關(guān)注的性能,以及評(píng)估的主要方式,能讓大家對(duì)性能樹(shù)立一個(gè)基本的概念,讓大家清楚性能是什么,怎么觀測(cè)等,后續(xù)會(huì)給大家介紹一些性能調(diào)優(yōu)的手段,幫助大家更好地優(yōu)化性能,成功把自己心心念念的模型推上線(xiàn)。
-
互聯(lián)網(wǎng)
+關(guān)注
關(guān)注
54文章
11219瀏覽量
105278 -
算法
+關(guān)注
關(guān)注
23文章
4687瀏覽量
94461 -
模型
+關(guān)注
關(guān)注
1文章
3471瀏覽量
49874
原文標(biāo)題:算法性能評(píng)估指南
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
主驅(qū)電機(jī)系統(tǒng)的扭矩估算方案

?為什么GPU性能效率比峰值性能更關(guān)鍵

VirtualLab Fusion應(yīng)用:F-Theta掃描透鏡的性能評(píng)估
VirtualLab Fusion應(yīng)用:F-Theta掃描透鏡的性能評(píng)估
MPU的性能評(píng)估方法
一文解析LOPA應(yīng)用-點(diǎn)火概率估算的策略與實(shí)踐

評(píng)論