案例詳解 | 當Rokid若琪遇上阿里云函數(shù)計算

來源:阿里云
作者:王彬 姚蘭天 聶大鵬
時間:2023-06-26
2706
隨著Serverless技術(shù)浪潮的全面到來,Rokid面臨的圖像處理難題在阿里云函數(shù)計算上找到了新解法。

Rokid創(chuàng)立于2014年,是一家專注于人機交互技術(shù)的產(chǎn)品平臺公司。Rokid作為行業(yè)的探索者,目前致力于AR眼鏡等軟硬件產(chǎn)品的研發(fā)及以YodaOS操作系統(tǒng)為載體的生態(tài)構(gòu)建。

早在2017年,Rokid就與阿里云達成戰(zhàn)略合作,雙方攜手為行業(yè)打造全棧語音智能方案語音解決方案。

此后,Rokid又與阿里云無影深度融合,推出了最新款的AR眼鏡以及Rokid Station,連接云端和眼鏡端,完成輕量化計算、4K高清解碼等通用能力,突破了人們對于移動計算平臺的想象,讓沉浸式的云上辦公和娛樂成為可能。

隨著Serverless技術(shù)浪潮的全面到來,Rokid面臨的圖像處理難題在阿里云函數(shù)計算上找到了新解法。

架構(gòu)革新的必要性

Rokid在數(shù)字文化領(lǐng)域,圍繞展陳導(dǎo)覽解決方案,主要形成了三維建圖,場景創(chuàng)作,場景體驗三個業(yè)務(wù)模塊,每個模塊都有不同的后臺平臺支撐。

1.三維建圖:制作展陳導(dǎo)覽的第一步是取景,通過設(shè)備獲取場地的真實布景,然后通過算法處理,進行三維建模,之后可以經(jīng)過創(chuàng)作器進行下一步的內(nèi)容創(chuàng)作。

2.場景創(chuàng)作:在三維建模生成的視頻流上創(chuàng)作,通過Web3D渲染引擎,將創(chuàng)作內(nèi)容與場景緊密結(jié)合,結(jié)合硬件設(shè)備,在AR設(shè)備使用時,形成一體化的體驗效果。

3.場景體驗:AR設(shè)備在使用時,根據(jù)定位服務(wù),錨定在場景中的位置,根據(jù)位置的不同會顯示不同的空間內(nèi)容,達到擴展現(xiàn)實場景的效果。

640.png

整體的產(chǎn)品架構(gòu)圖

三維建圖,場景創(chuàng)作,場景體驗三個場景都涉及到了的圖像處理,需要大量的GPU資源。

其中三維建圖屬于離線任務(wù),在構(gòu)建展陳模型時,需要將整個展陳場所的視頻內(nèi)容進行預(yù)處理,是三個場景中消耗算力最大的部分;場景創(chuàng)作需要配合創(chuàng)作軟件,GPU資源主要來自開發(fā)機器;場景體驗在設(shè)備真實運行時提供實時服務(wù),主要功能是定位服務(wù),對服務(wù)的實時性要求很高。

為了支撐GPU算力的需求,Rokid在開發(fā)的初期就決定盡可能的使用云資源承載,充分利用云計算的紅利。

最初,Rokid選擇購買ECS的GPU機型,用于業(yè)務(wù)的開發(fā)和測試。在三維建圖時,一般都會一次性采集展陳環(huán)境的所有場景資料,視頻量巨大,通過ECS串行處理需要時間很長,一個1小時的視頻資料,通過一臺ECS GPU機器需要處理3小時左右。

Rokid做的第一步是并行化,通過拆分CPU和GPU處理邏輯和優(yōu)化任務(wù)編排方式,盡可能的讓可以并發(fā)處理的部分拉起更多的資源加大并發(fā)量,通過這一系列的優(yōu)化,視頻的處理時間得到了不錯的提升。

在并發(fā)資源方面,Rokid選擇的GPU計算資源是ECI,相對ECS,ECI可選的資源粒度更加多樣,特別是在小規(guī)格的選擇上,對于切分的小塊視頻,通過并發(fā)的使用小規(guī)格ECI實例并行處理,大大縮短了整體視頻的處理時間。為此,Rokid內(nèi)部平臺還開發(fā)了一套針對阿里云ECI資源的調(diào)度模塊,方便內(nèi)部快速的申請和歸還ECI資源。

通過對ECI資源的靈活使用,在保證高峰期任務(wù)處理并發(fā)度的同時,也保證了算力成本的可控,使用流程上得到了初步的優(yōu)化。但是通過一段時間的使用,發(fā)現(xiàn)還是有很多的不足之處,主要問題總結(jié)如下:

1.ECI資源的申請和釋放都依靠使用人員主動操作,有時在使用完畢后會忘記及時釋放資源,導(dǎo)致資源閑置浪費。且開發(fā)和維護ECI的調(diào)度程序也需要占據(jù)對應(yīng)同學(xué)一定的精力,帶來了一些額外的運維工作。

2.三維建模的任務(wù)經(jīng)過拆分后,分成了好幾個步驟,每個步驟的任務(wù)都需要異步執(zhí)行,需要一個系統(tǒng)維持任務(wù)的調(diào)用關(guān)系,在上一個步驟完成后,拉起下一個步驟的任務(wù)繼續(xù)運行。

3.在運行過程中,會存在異常情況,排查下來,有時是因為申請的計算資源規(guī)格過小導(dǎo)致計算負載較高,有時是存儲異?;虼鎯臻g寫滿,還有些情況是程序本身性能瓶頸。對于程序的整體監(jiān)控缺乏,使得出現(xiàn)問題時不能第一時間發(fā)現(xiàn),發(fā)現(xiàn)有異常排查過程不夠直觀,需要通過多種工具獲取運行指標分析。

4.GPU算力在云上規(guī)模有限,在高峰期會偶爾存在ECI資源彈不出的情況,影響開發(fā)效率。

為了解決上面問題,Rokid內(nèi)部架構(gòu)組尋求優(yōu)化已有的架構(gòu),針對第2點,Rokid自行維護了一個總的調(diào)度系統(tǒng),進行任務(wù)編排;針對第3點,通過阿里云ARMS Tracing,Prometheus,Grafana等組件的引入,結(jié)合ECI硬件指標,統(tǒng)一收集到SLS,形成統(tǒng)一的監(jiān)控報表,再配以監(jiān)控指標的告警,也能夠初步的滿足Rokid使用需求。

但第1點和第4點,很難通過增加云產(chǎn)品或者內(nèi)部應(yīng)用程序解決。為此Rokid架構(gòu)組開始尋找云上新的產(chǎn)品,以求徹底的解決使用過程中的痛點問題。此時,Serverless架構(gòu)的函數(shù)計算出現(xiàn)在了Rokid架構(gòu)師的視野,經(jīng)過一段時間的調(diào)研使用,函數(shù)計算的各項能力都能夠很好的滿足Rokid使用場景。

函數(shù)計算的出現(xiàn)恰逢其時

函數(shù)計算是事件驅(qū)動的全托管計算服務(wù)。使用函數(shù)計算,客戶無需采購與管理服務(wù)器等基礎(chǔ)設(shè)施,只需編寫并上傳代碼或鏡像。函數(shù)計算會準備好計算資源,彈性地、可靠地運行任務(wù),并提供日志查詢、性能監(jiān)控和報警等功能。

函數(shù)計算提供CPU,GPU的算力,秒級計費,客戶只需要為實際資源使用付費。資源彈性可根據(jù)定時,請求量等指標自動伸縮,無需維護調(diào)度,負載,重試,異步回調(diào)等組件,提供了開箱即用,用完即走,按量付費的極致Serverless能力。

640 (1).png

底層依托阿里云的大計算池,提供近乎無限的計算資源,通過阿里云的cGPU技術(shù),可將單卡GPU資源切分成多種更小粒度的資源規(guī)格??蛻粼诤瘮?shù)計算選擇GPU規(guī)格創(chuàng)建函數(shù),在有請求時,函數(shù)計算會實時從預(yù)熱資源池獲取資源,配合對應(yīng)的鏡像程序,啟動客戶函數(shù),啟動完畢后對外提供服務(wù)。

函數(shù)計算在第一次運行實例時會涉及到資源的拉起,彈性交付時間在1s(熱啟動)~20s(冷啟動)。Rokid的三維建圖場景是離線任務(wù),單個視頻的處理時間也在分鐘級,對于秒級別的啟動時延完全可以接受。

在三維建圖任務(wù)接入函數(shù)計算后,Rokid不再需要手動申請ECI資源,在使用結(jié)束之后也不需要在手動釋放。

1.函數(shù)計算會根據(jù)請求流量,動態(tài)的拉起與請求量匹配的后端GPU算力資源,在請求處理結(jié)束后,一段時間沒有新請求的情況下,自動釋放資源;

2.整個三維建模在拆分后涉及好幾個步驟,每個步驟都是異步執(zhí)行,通過函數(shù)計算的異步系統(tǒng),在一個步驟的任務(wù)完成后,可以自動觸發(fā)下一個任務(wù);

3.函數(shù)計算控制臺內(nèi)置了指標監(jiān)控,異常告警,鏈路追蹤,調(diào)用日志,異步配置的功能,可以滿足Rokid從開發(fā),運行監(jiān)控到運維全函數(shù)生命周期的功能需求;

4.函數(shù)計算底層依托阿里云大計算池,加上預(yù)熱和資源評估的后端算法,可以最大程度的保證資源供給。

這幾點正是Rokid之前遇到的痛點問題,通過接入函數(shù)計算單一的產(chǎn)品,就解決了Rokid近乎全部的主要問題。接入函數(shù)計算后,Rokid的云產(chǎn)品技術(shù)架構(gòu)如下:

640 (2).png

函數(shù)計算資源利用率監(jiān)控圖如下,從監(jiān)控圖可以看出,在有任務(wù)進入時,GPU計算利用率可以達到60%甚至接近100%。

640 (3).png

體驗與架構(gòu)的妥協(xié)

Serverless理念的函數(shù)計算確實給Rokid帶了很多的便利,在高峰期資源的擴展性和成本節(jié)約方面都做到了當前云產(chǎn)品的極致,但函數(shù)計算也并非萬能,對于Rokid的場景體驗功能,也就是需要實時提供定位服務(wù)的模塊,函數(shù)計算還是存在了一定的問題。

函數(shù)計算在第一次拉起實例資源時,會存在1s(熱啟動)~20s(冷啟動)的啟動時間,這個時間對于實時定位服務(wù)模塊是不可接受的,實時定位是在使用者身處展陳場地時,AR設(shè)備通過實時定位,獲取空間位置的AR拓展信息,接口響應(yīng)的時間對客戶的體驗非常重要,定位請求需要在1s以內(nèi)返回。

在成本和服務(wù)質(zhì)量之間,Rokid選擇了服務(wù)質(zhì)量優(yōu)先,場景體驗?zāi)K采用ECI部署,通過每天的定時任務(wù),在高峰期提前彈出更多的ECI實例,在低峰期時,保留少量的ECI實例,以此達到體驗和成本的平衡。

另一方面,函數(shù)計算在實時的場景也并非完全沒有解決方案。目前GPU的模型一般都很大,鏡像都在G級別,所以對于第一次資源拉起,在接下來一段時間內(nèi)還看不到跟CPU資源一樣100ms級別的拉起速度。

針對實時場景,函數(shù)計算GPU實例在做的是預(yù)留實例,該功能可以在資源閑置時,釋放計算資源的同時,保留程序的內(nèi)存運行鏡像,在有新的請求進來時,只需要供給算力資源,函數(shù)就能提供服務(wù),免去了中間硬件資源拉起,函數(shù)鏡像拉取和啟動的時間,可以提供實時的服務(wù)。

預(yù)留實例已經(jīng)在CPU實例上線,閑置時CPU價格是運行態(tài)的1/10,在保證實時能力的情況下,大大降低了資源成本。GPU版本的預(yù)留能力預(yù)計年底上線。

640 (4).png

場景體驗采用ECI后,Rokid的業(yè)務(wù)架構(gòu)

出色的效果和進一步的期待

通過一系列的云架構(gòu)改造,當前Rokid三維建圖模塊運行在函數(shù)計算的GPU資源上,場景體驗?zāi)K運行在ECI資源,在成本和性能上,都做到了兼顧,且給整個系統(tǒng)強大的可拓展性,達到了系統(tǒng)設(shè)計時設(shè)定的架構(gòu)目標,從2023/2上線提供服務(wù)以來,達到了不錯的效果。

其中三維建圖模塊降本明顯,相比最初的ECS架構(gòu),算力成本降低了40%,更為重要的是,通過實時的并發(fā)處理,大大減少了子任務(wù)的排隊時間,加快了整個任務(wù)的完成時間。

下一步,Rokid對于函數(shù)計算的GPU預(yù)留實例還是非常期待,期待函數(shù)計算能夠盡快上線,這樣Rokid內(nèi)部可以將整個的GPU算力都遷移到函數(shù)計算,達到架構(gòu)的統(tǒng)一。

經(jīng)過展陳展覽項目的實踐,Rokid相信以函數(shù)計算為代表的Serverless一定是云計算的未來,通過Serverless,云計算的使用者不再需要關(guān)注底層的IaaS層運維和調(diào)度,在保證成本最優(yōu)的情況下能夠得到最大限度的拓展能力,且在整服務(wù)的生命周期,都能使用云產(chǎn)品提供的原生能力,簡單,快速的定位,解決問題。

Rokid在3D模型處理,音視頻后處理方面正在大規(guī)模嘗試函數(shù)計算,Rokid相信以函數(shù)計算為代表的Serverless架構(gòu)也一定會在越來越多的云產(chǎn)品上得到應(yīng)用。

立即登錄,閱讀全文
原文鏈接:點擊前往 >
版權(quán)說明:本文內(nèi)容來自于阿里云,本站不擁有所有權(quán),不承擔相關(guān)法律責任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多