天天看點

案例詳解 | 當Rokid若琪遇上阿裡雲函數計算

作者:技術聯盟總壇

Serverless 阿裡雲 2023-06-25 18:56 發表于浙江

案例詳解 | 當Rokid若琪遇上阿裡雲函數計算

Rokid創立于2014年,是一家專注于人機互動技術的産品平台公司。Rokid作為行業的探索者,目前緻力于AR眼鏡等軟硬體産品的研發及以YodaOS作業系統為載體的生态建構。

早在2017年,Rokid就與阿裡雲達成戰略合作,雙方攜手為行業打造全棧語音智能方案語音解決方案。

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

随着 Serverless 技術浪潮的全面到來,Rokid面臨的圖像處理難題在阿裡雲函數計算上找到了新解法。

架構革新的必要性

Rokid 在數字文化領域,圍繞展陳導覽解決方案,主要形成了三維建圖,場景創作,場景體驗三個業務子產品,每個子產品都有不同的背景平台支撐。

  1. 三維建圖:制作展陳導覽的第一步是取景,通過裝置擷取場地的真實布景,然後通過算法處理,進行三維模組化,之後可以經過創作器進行下一步的内容創作。
  2. 場景創作:在三維模組化生成的視訊流上創作,通過 Web3D 渲染引擎,将創作内容與場景緊密結合,結合硬體裝置,在 AR 裝置使用時,形成一體化的體驗效果。
  3. 場景體驗:AR 裝置在使用時,根據定位服務,錨定在場景中的位置,根據位置的不同會顯示不同的空間内容,達到擴充現實場景的效果。
案例詳解 | 當Rokid若琪遇上阿裡雲函數計算

整體的産品架構圖

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

其中三維建圖屬于離線任務,在建構展陳模型時,需要将整個展陳場所的視訊内容進行預處理,是三個場景中消耗算力最大的部分;場景創作需要配合創作軟體,GPU 資源主要來自開發機器;場景體驗在裝置真實運作時提供實時服務,主要功能是定位服務,對服務的實時性要求很高。

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

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

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

在并發資源方面,Rokid 選擇的 GPU 計算資源是 ECI,相對 ECS,ECI 可選的資源粒度更加多樣,特别是在小規格的選擇上,對于切分的小塊視訊,通過并發的使用小規格 ECI 執行個體并行處理,大大縮短了整體視訊的處理時間。為此,Rokid 内部平台還開發了一套針對阿裡雲 ECI 資源的排程子產品,友善内部快速的申請和歸還 ECI 資源。

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

  1. ECI 資源的申請和釋放都依靠使用人員主動操作,有時在使用完畢後會忘記及時釋放資源,導緻資源閑置浪費。且開發和維護 ECI 的排程程式也需要占據對應同學一定的精力,帶來了一些額外的運維工作。
  2. 三維模組化的任務經過拆分後,分成了好幾個步驟,每個步驟的任務都需要異步執行,需要一個系統維持任務的調用關系,在上一個步驟完成後,拉起下一個步驟的任務繼續運作。
  3. 在運作過程中,會存在異常情況,排查下來,有時是因為申請的計算資源規格過小導緻計算負載較高,有時是存儲異常或存儲空間寫滿,還有些情況是程式本身性能瓶頸。對于程式的整體監控缺乏,使得出現問題時不能第一時間發現,發現有異常排查過程不夠直覺,需要通過多種工具擷取運作名額分析。
  4. GPU 算力在雲上規模有限,在高峰期會偶爾存在 ECI 資源彈不出的情況,影響開發效率。

為了解決上面問題,Rokid 内部架構組尋求優化已有的架構,針對第2點,Rokid 自行維護了一個總的排程系統,進行任務編排;針對第3點,通過阿裡雲 ARMS Tracing,Prometheus,Grafana 等元件的引入,結合 ECI 硬體名額,統一收集到 SLS,形成統一的監控報表,再配以監控名額的告警,也能夠初步的滿足 Rokid 使用需求。

但第1點和第4點,很難通過增加雲産品或者内部應用程式解決。為此 Rokid 架構組開始尋找雲上新的産品,以求徹底的解決使用過程中的痛點問題。此時,Serverless 架構的函數計算出現在了 Rokid 架構師的視野,經過一段時間的調研使用,函數計算的各項能力都能夠很好的滿足 Rokid 使用場景。

函數計算的出現恰逢其時

函數計算是事件驅動的全托管計算服務。使用函數計算,客戶無需采購與管理伺服器等基礎設施,隻需編寫并上傳代碼或鏡像。函數計算會準備好計算資源,彈性地、可靠地運作任務,并提供日志查詢、性能監控和報警等功能。

函數計算提供 CPU,GPU 的算力,秒級計費,客戶隻需要為實際資源使用付費。資源彈性可根據定時,請求量等名額自動伸縮,無需維護排程,負載,重試,異步回調等元件,提供了開箱即用,用完即走,按量付費的極緻 Serverless 能力。

案例詳解 | 當Rokid若琪遇上阿裡雲函數計算

底層依托阿裡雲的大計算池,提供近乎無限的計算資源,通過阿裡雲的 cGPU 技術,可将單卡 GPU 資源切分成多種更小粒度的資源規格。客戶在函數計算選擇 GPU 規格建立函數,在有請求時,函數計算會實時從預熱資源池擷取資源,配合對應的鏡像程式,啟動客戶函數,啟動完畢後對外提供服務。

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

在三維建圖任務接入函數計算後,Rokid 不再需要手動申請 ECI 資源,在使用結束之後也不需要在手動釋放。

  1. 函數計算會根據請求流量,動态的拉起與請求量比對的後端 GPU 算力資源,在請求處理結束後,一段時間沒有新請求的情況下,自動釋放資源;
  2. 整個三維模組化在拆分後涉及好幾個步驟,每個步驟都是異步執行,通過函數計算的異步系統,在一個步驟的任務完成後,可以自動觸發下一個任務;
  3. 函數計算控制台内置了名額監控,異常告警,鍊路追蹤,調用日志,異步配置的功能,可以滿足 Rokid 從開發,運作監控到運維全函數生命周期的功能需求;
  4. 函數計算底層依托阿裡雲大計算池,加上預熱和資源評估的後端算法,可以最大程度的保證資源供給。

這幾點正是 Rokid 之前遇到的痛點問題,通過接入函數計算單一的産品,就解決了 Rokid 近乎全部的主要問題。接入函數計算後,Rokid 的雲産品技術架構如下:

案例詳解 | 當Rokid若琪遇上阿裡雲函數計算

函數計算資源使用率監控圖如下,從監控圖可以看出,在有任務進入時,GPU 計算使用率可以達到60%甚至接近100%。

案例詳解 | 當Rokid若琪遇上阿裡雲函數計算

體驗與架構的妥協

Serverless 理念的函數計算确實給 Rokid 帶了很多的便利,在高峰期資源的擴充性和成本節約方面都做到了目前雲産品的極緻,但函數計算也并非萬能,對于 Rokid 的場景體驗功能,也就是需要實時提供定位服務的子產品,函數計算還是存在了一定的問題。

函數計算在第一次拉起執行個體資源時,會存在1s(熱啟動)~20s(冷啟動)的啟動時間,這個時間對于實時定位服務子產品是不可接受的,實時定位是在使用者身處展陳場地時,AR裝置通過實時定位,擷取空間位置的AR拓展資訊,接口響應的時間對客戶的體驗非常重要,定位請求需要在1s以内傳回。

在成本和服務品質之間,Rokid 選擇了服務品質優先,場景體驗子產品采用 ECI 部署,通過每天的定時任務,在高峰期提前彈出更多的 ECI 執行個體,在低峰期時,保留少量的 ECI 執行個體,以此達到體驗和成本的平衡。

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

針對實時場景,函數計算 GPU 執行個體在做的是預留執行個體,該功能可以在資源閑置時,釋放計算資源的同時,保留程式的記憶體運作鏡像,在有新的請求進來時,隻需要供給算力資源,函數就能提供服務,免去了中間硬體資源拉起,函數鏡像拉取和啟動的時間,可以提供實時的服務。

預留執行個體已經在 CPU 執行個體上線,閑置時 CPU 價格是運作态的1/10,在保證明時能力的情況下,大大降低了資源成本。GPU 版本的預留能力預計年底上線。

案例詳解 | 當Rokid若琪遇上阿裡雲函數計算

場景體驗采用 ECI 後,Rokid 的業務架構

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

通過一系列的雲架構改造,目前 Rokid 三維建圖子產品運作在函數計算的 GPU 資源上,場景體驗子產品運作在 ECI 資源,在成本和性能上,都做到了兼顧,且給整個系統強大的可拓展性,達到了系統設計時設定的架構目标,從2023/2上線提供服務以來,達到了不錯的效果。

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

下一步,Rokid 對于函數計算的 GPU 預留執行個體還是非常期待,期待函數計算能夠盡快上線,這樣 Rokid 内部可以将整個的 GPU 算力都遷移到函數計算,達到架構的統一。

經過展陳展覽項目的實踐,Rokid 相信以函數計算為代表的 Serverless 一定是雲計算的未來,通過 Serverless,雲計算的使用者不再需要關注底層的 IaaS層運維和排程,在保證成本最優的情況下能夠得到最大限度的拓展能力,且在整服務的生命周期,都能使用雲産品提供的原生能力,簡單,快速的定位,解決問題。

Rokid 在3D模型處理,音視訊後處理方面正在大規模嘗試函數計算,Rokid 相信以函數計算為代表的 Serverless 架構也一定會在越來越多的雲産品上得到應用。

作者:

王彬 | 阿裡雲解決方案架構師

姚蘭天 | Rokid 技術專家

聶大鵬 | 阿裡雲進階技術專家

繼續閱讀