ModelArts在線服務時延測試
前言
當一個模型部署成ModelArts的在線服務在本地調用,用戶往往會關注整個端到端的時延,本文將科學的帶大家了解和測試整個端到端各個階段的耗時。
獲取端到端時延
獲取單次請求的端到端時延,非常簡單,首先根據我之前寫的教程:https://bbs.huaweicloud.com/blogs/313145? ?部署好模型,然后通過:https://bbs.huaweicloud.com/blogs/313762? 本地通過代碼調用在線服務,然后再main.py函數加一句:
print(r.elapsed.total_seconds())
即可獲取整個端到端的時間。但是整個時延其實后置很多的方法,如下圖所示,首先是本地請求所在的區域,如果模型在線服務部署在北京,而用戶在華南地區,那這個地域的距離需要非常多跳,才能跳到北京那,非常需要時間,一個理想的做法,申請一個也在北京的ECS[在線虛擬機、帶寬足夠],用同區域的ECS去調用在線服務來推理,可以減小時延,下圖所示是整個鏈接的大體耗時:
從結果可以看到,傳輸一個600k的json到在線服務去推理,總時長來回大概是100ms,而其中推理的時間大概是只有6~8ms[數據前處理+推理+后處理],這是通過在模型部署中的customize_service.py打點打印出來獲取的時間,真實有效哈哈。而大部分的時間都花在網絡上,接下來詳細分析這100ms到底花在了哪里。
curl測試方法
通過curl命令可以測的更詳細的網絡耗時,具體指令教程可以參考華為云官方文檔:https://support.huaweicloud.com/inference-modelarts/inference-modelarts-0023.html
測試命令:
curl -o /dev/null -s -w %{http_code}:%{http_connect}:%{content_type}:%{time_namelookup}:%{time_redirect}:%{time_pretransfer}:%{time_connect}:%{time_starttransfer}:%{time_total}:%{speed_download} -H 'X-Auth-Token:xxxxxxxxxxxxxxxxxxxxx' -H 'Content-type: application/json' -d '{"type":"string"}' -X POST https://xxxxxxxxxxxxxx.apig.cn-north-4.huaweicloudapis.com/v1/infers/xxxx-xxxx-xxxxx-xxxxx-xxxxx
其中:
http_code http狀態碼,如200成功,301轉向,404未找到,500服務器錯誤等
http_connect The numerical code that was found in the last response (from a proxy) to a curl CONNECT request
time_namelookup DNS解析時間,從請求開始到DNS解析完畢所用時間。
time_redirect 重定向時間,包括到最后一次傳輸前的幾次重定向的DNS解析,連接,預傳輸,傳輸時間。
time_pretransfer 從開始到準備傳輸的時間。
time_connect 連接時間,從開始到建立TCP連接完成所用時間,包括前邊DNS解析時間,如果需要單純的得到連接時間,用這個time_connect時間減去前邊time_namelookup時間。
以上解釋來源于:https://blog.csdn.net/firehive/article/details/81706741,更豐富的命令可以參考其中。
結果:
http狀態碼: 200
DNS解析時間: 0.000629s
redirect重定向時間: 0.000000s
連接時間,從開始到建立TCP連接完成所用時間,包括前邊DNS解析時間time_connect: 0.001102s
連接建立完成時間,如SSL/SSH等建立連接或者完成三次握手時間time_appconnect: 0.008809s
從開始到準備傳輸的時間time_pretransfer: 0.008964s
開始傳輸時間。在client發出請求之后,Web 服務器返回數據的第一個字節所用的時間time_starttransfer: 0.008965s
size_download: 22074bytes
speed_download: 214310.000B/s
----------
time_total: 0.103954s
以上結果值得關注的是,和在線服務建立連接的時間都需要花接近10ms,這個時間是跑不掉了。
在線服務里的時間
模型部署成在線服務,相當于有個容器,把模型塞進容器里跑,里面是一個serving層暴露API讓外部調用,一個是內在的tensorflow推理,我通過在模型部署上線的customize_service.py通過同樣的request請求,請求容器內的serving[剔除了網絡時延],得到的時間是27ms,而推理的時間是7ms,也就是在600k的數據在serving處理需要20ms的時間,如下圖所示:
鏈路耗時
通過crul命令傳送空,得到的時間就是建立連接的時間+dispatcher時間+APIG時間+容器里的時間,同過上傳一個新的模型在線服務,讓customize_service.py的前處理推理后處理不做任何操作,直接return結果,可以剔除推理的時間,而我通過專屬dispatcher【花錢】的方法,繞開了APIG的驗證,又去除了APIG驗證的時間,而后通過一些方法測試到ECS到專屬dispatcher時間為2ms,最后結果如下圖所示:
AI AI開發平臺ModelArts 機器學習 深度學習 神經網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。