歡迎光臨
每天分享高質量文章

人工智慧資料流中Golang的應用實踐

薛磊:Momenta資深研發工程師,前Sun中國工程研究院工程師,專註於分散式系統、儲存系統、容器等技術,目前從事深度學習訓練平臺的基礎架構研發。熱愛開源和分享,目前是Kubeflow member及多個開源專案contributor。


前言  

      目前人工智慧非常火,大家所熟知的人臉識別、智慧安防、自動駕駛等領域都在應用人工智慧技術。但在自動駕駛這個行業中我們能用Go語言做什麼事情?今天分享的主要是人工智慧資料流的流轉方式,也是Golang在Momenta大資料平臺當中的應用。



Momenta大資料平臺


       
     

      Momenta的標的是打造自動駕駛大腦,基於深度學習和海量資料,Momenta已經形成服務多個場景的自動駕駛解決方案,解決了逆光、橋、隧道、雨天、夜間、匝道等複雜道路場景。

      在實現自動駕駛的過程中,深度學習的演演算法在訓練模型時得有基礎資料作支撐,需要大量的影象資料。藉助團隊極強的研究能力與工程能力,Momenta已經建立起大資料平臺、大計算平臺、大測試平臺三大基礎平臺,從而實現大資料與AI演演算法的反饋閉環——以強大的計算資源處理豐富的海量資料,得到更精準、更可靠的演演算法模型。

      其中,大資料平臺能夠完美處理自動駕駛領域的資料流,具體而言,便是處理收集資料、篩選資料、資料標註、訓練模型、模型測試、封裝釋出的整個過程。


              

人工智慧資料流


資料篩選        



              

       上圖是車輛識別的一個典型,富有中國特色和北京特色——電動車,Momenta目前對電動車、腳踏車、人力三輪車、三輪電動車等,都能進行識別,並且達到很高的準確度。在人工智慧資料流中,資料篩選這一步驟主要有以下作用:

  • 降低成本:無需重覆標註已經可以很好識別的素材,降低標註成本,模型執行結果可用於輔助標註;

  • 提高模型訓練效率:去除無效素材,提取包含識別標的的素材,提高訓練效率;

  • 提高模型訓練邊際效用:透過對極端情況(corner case)的資料進行針對性訓練,可以有效的提高模型效能。


    資料標註


           經過篩選之後,會有部分圖片需要人工標註。基於極強的工程能力,Momenta開發了線上遠端眾包資料標註系統,實習視覺化操作,即便標註人員不懂程式碼也能遠端完成各類標註任務。資料標註的作用主要是提高模型訓練精度, 獲得更多標註圖片,提取包含識別標的的素材,提高訓練精度。


    模型訓練



                  

            上圖是模型訓練的流程圖,其中,在資料匯入、模型訓練和模型驗證Momenta都做出了極大的創新。

    • 資料匯入:支援多種資料型別,支援多批次資料合併,支援多種組合規則;

    • 模型訓練:多機多卡併發訓練,共享式叢集、支援多人多工同時進行,支援多種主流訓練框架,所有任務由 Kubernetes 自動排程完成;

    • 模型驗證:訓練所得模型自動在驗證集上進行驗證,透過驗證的模型將進入模型倉庫供後續流程使用。

            與傳統方式相比,Momenta採用的共享叢集排程讓使用者(內部的演演算法研發人員)可以編寫任務描述和訓練指令碼,而管理員透過網頁介面進行叢集管理和工作排程。極大地節省人工成本,提高資源利用率,實現集中性管理,提高安全性。


           
           
          

    Golang 在人工智慧資料流中的應用


    Golang在人工智慧資料流中主要應用在篩選系統、標註系統和訓練系統。


    篩選系統


           
             

          Momenta每天可能需要處理幾千萬張圖片,資料量巨大,如果逐一進行標註將給儲存帶來很大的挑戰。解決這個問題的方法就是篩選系統,透過篩選系統,我們將大的資料集拆分為小的單元,每個單元中包含小的任務,而每個單元對應一個 GPU,使用 GPU進行智慧篩選。最終只有約10%的圖片時需要進行標註的,大大減少了資料標註的成本。


    標註系統


           
         

           Momenta為內部演演算法研發人員服務的標註系統,可以實現使用者管理、任務分發、計費、結算和自動審核。自動審核是比較特殊的,在一般場景和服務中用得比較少,自動審核是指用Momenta的模型來證實使用者(在平臺上兼職標註的人員)的標註結果是否符合需求或預期,主要是應付較大的使用者訪問,特別是節假日的時候。(節假日期間平臺的使用者比較閑,會希望在平臺上賺點零花錢。)


    訓練系統


           
         

           訓練系統是基於K8S搭建使用的,能夠實現自己的排程。K8S作為容器的排程平臺,預設是排程一個pod在不同的機器上面執行的,但是做多機訓練可能需要同時使用多個Pod,每個機器上面一個Pod。這樣就需要相應的管理以及生命週期的維護,我們這套系統是基於K8S做的開發,承擔這樣的工作。

    機器學習場景下Golang的發展


           如果此前沒有接觸過機器學習?如何能夠加入人工智慧的浪潮中,學習併進入機器學習領域呢?Go Notebooks、Caffe和Caffe2,TensorFlow-Go幾個工具都是很好的工具。接下來將演示如何用TensorFlow的Golang binding做一個簡單工具。