AI的場景豐富多彩,AI的評價方法百花齊放,這對於設計一套更通用的評測框架來講,是一個極大的挑戰,須要兼顧不一樣的協議,不一樣的模型環境,甚至是不一樣的操做系統。本文分享了咱們在AI評測路上的一些實踐經驗,重點介紹了咱們在解決執行環境的不肯定性方面所作的一些嘗試。彈性容器是咱們當前最合適的解決方案,指望對你們也有所啓發。算法
在當前的AI產品研發中,須要常常回答相似這樣的問題。好比哪一款智能音箱更好一些,哪一款引擎更加厲害,或者是哪個機器學習算法更適合我去用。架構
諸如此類,要回答這樣的問題,咱們就須要有一個度量的尺子,這個尺子就是評測。咱們須要設計指標是什麼,可以用什麼數據出這些指標,每一類指標所體現出來的優缺點又是什麼,怎麼纔能有效提高指標,這就是評測所作的事情。框架
如下是平臺的一個總體架構,分爲接入層、邏輯層、數據層和存儲層。這個架構是一個純雲原生系統,全部的服務部署以及所應用的一些存儲資源所有都是基於雲上邊的。機器學習
下面是評測任務的一個流程圖,咱們有流水線、任務調度、有任務封裝這樣的重要環節。咱們發現要調度和執行的任務會有一個極大的挑戰,那就是這些任務要支持到多種對象。每一種任務又是協同開發的一種方式,這就致使任務執行的一個環境是不肯定的,還有就是任務在執行時所消耗的資源也是不肯定的。學習
這裏舉一些不一樣場景的特色:操作系統
好比咱們要去評服務,可能面臨多種請求協議和返回的內容。設計
咱們要去評模型,會面臨不一樣的深度學習框架,好比基於tensorflow的,基於pytorch的。3d
咱們要評算法,可能又會面臨不一樣格式的一些數據。對象
那麼怎麼解決這些不肯定性呢?咱們其實作了幾種不一樣的嘗試,接下來就跟你們分享一下咱們所作的幾步嘗試。blog
最開始的方案就是用一套專門的服務來支持全部的場景。全部功能和環境集成在一塊兒,最明顯的一個問題就是任務間耦合特別高,維護起來特別麻煩,很難作到共同開發,由於咱們評服務、評模型、評算法有多是不一樣的團隊或者不一樣的同窗,若是把全部的服務都封裝在一個服務裏面,實際上在每一層之間都有一個特別大的影響,其實也會致使整個的複用性特別低。
咱們又探索了第二種方案,就是將一類的服務獨立出來,在必定程度上解決了服務的複雜性,可是複雜度仍是較高,由於同一類服務裏邊,好比以模型評測爲例,不一樣的模型的框架是不同的,若是仍是封裝在同一個服務裏面,實際上要兼容不一樣的框架在同一個服務裏邊也是一個特別複雜的事情。
方案二有一個好處,各類服務功能相對獨立,可是仍是有一個問題,同一類服務複雜度較高,另外服務是常駐的,不一樣業務即便是同一種類型的評測,它的頻率是不同的,甚至是相差特別大,那麼就致使服務空載比較多,資源利用率是不高的。
在EKS[1]推出後,做爲公司內首批吃螃蟹的業務,咱們真正面向客戶的一個業務,開始進行了另外一種方案的探索,就是用彈性容器任務的方式進行一個評測任務。咱們確實感受它是一個真香的,將全部的任務徹底隔離,而後如今的一個維護成本是很是低的,不用本身部署服務,也不用本身管理資源的事情。
對每個評測任務的開發者也是一個很好的福利,開發者甚至能夠隨心所欲地去作一些事情,不用擔憂平臺的框架不支持,另外也不用擔憂他所作的事情會影響到其餘業務。固然對整個平臺設計來講,最大的好處就是用完就釋放,很是合理地利用資源。
如下是三個方案的一個對比,也是EKS帶給咱們的一些收益。
在方案一的時候雖然能夠統一維護,可是確實要實現一個服務要獲得評測對象的各類依賴是很是難的,同時任務間的耦合也特別高,致使只能支持有限的場景。
方案二,雖然作到的必定的隔離,任務間的耦合相對也是比較低的。可是每個服務的忙閒狀態是不同的,咱們的資源空耗是特別多的,就像這個圖所示,可能有的服務仍是比較規律,忙一段閒一段。有的服務就會一直忙,而後有的服務就特別零散地忙一下,而後就長期處於一個閒置的狀態。
基於彈性的容器任務,能夠作到任務能夠隨啓隨銷,維護成本低,資源可以達到一個合理利用。
如下是基於EKS後的總體任務調度流程,咱們會把任務封裝到一個鏡像庫,而後調度鏡像部署到一個EKS倉庫中進行執行,這個就是解決評測任務所面臨的不肯定性的問題。
這是一個更具像化的過程,任務的開發者只須要把開發代碼提交到代碼庫,咱們會有一套標準流程將代碼封裝到鏡像裏面,在具體流水線調度的時候,會將這個鏡像啓動到EKS的調度中調度執行,這個執行結果會返回到開發者這邊,他就能夠及時地知道這一次任務執行的一個效果是怎麼樣的。
EKS確實在咱們支持不一樣的場景的評測任務時起到了很是大的一個助力,這樣對於咱們拓展本身的評測場景起到了很是好的幫助。
在以前,咱們要解決不一樣場景的評測,不少時候就須要靠咱們本身平臺的開發者跟具體任務的開發者不斷地適配,此次任務須要什麼環境,我須要幫你準備好,而後讓個人任務可以給你提供一個比較好的環境,也可以去執行。
自從有了EKS以後,咱們能夠只關注平臺架構的一個設計,任務裏面須要依賴什麼環境,須要什麼包,徹底都交給任務的一個開發者去設計,而後咱們將他所須要的包、環境都打到一個鏡像裏邊,各個任務的鏡像又相互獨立,而後我就能夠很好地經過EKS調度執行,這樣對整個平臺的架構的一個可擴展性以及咱們本身能力的拓展都有了一個很好的助力。
[1]EKS: https://cloud.tencent.com/product/eks
【騰訊雲原生】雲說新品、雲研新術、雲遊新活、雲賞資訊,掃碼關注同名公衆號,及時獲取更多幹貨!!