天天看點

打造雲上深度學習實驗室

雲栖techday36期,來自阿裡雲技術專家必嘫帶來題為“打造雲上深度學習實驗室”的演講。本文主要從深度學習流程開始談起,解釋了深度學習應用建構的完整生命周期,進而分享了機遇與容器服務的深度學習解決方案架構,接着講解了端到端的深度學習體驗,最後作了簡要總結。以下是精彩内容整理:

深度學習流程

目前,人工智能已經進入了深度學習時代,

打造雲上深度學習實驗室

利用gpu加上深度學習理論,建構了一個模型,從2010年開始imagenet所有技術都是基于傳統機器視覺技術來做的,當時的識别率最好也差不多是在75%左右, 2012年達到了85%的準确率,基于深度學習的機器視覺能力上已經超越人類,機器識别的錯誤率是2.7%,而人的識别錯誤率是5.3%,這些技術基本上都是完全基于深入學習的技術往下做。從2012年開始,紫色的圖都是基于深度學習。

深度學習有一些必要的因素,才有今天成功的效果。從alphago身上,我們已經看到了機器的可怕,過去我們一直認為機器強大的是在于有強大的計算能力,但是深度學習能力使機器慢慢具備了強大的學習能力,而且這個學習能力是在某個領域可以深度加進的能力,也就是說它在某個固定的領域有一些足夠多的資料讓它去訓練的話,它很有可能在某個領域成為技術專家并超越人,這其實對大家是一個非常大的警示,不懂深度學習的都在談,因為大家确實開始感覺到了這項技術對我們是有影響的。

打造雲上深度學習實驗室

圖為深度學習很常見的應用,這是俄羅斯開發的一款個人app,這款app能夠把普通的照片加上一個大師的照片,相當于從你的照片中提取圖檔的内容,從大師圖檔的内容提取風格,最後合出來一張圖,其實它用的是深度學習的技術。這個應用去年是ios下載下傳榜的冠軍,打敗了口袋精靈app。

打造雲上深度學習實驗室

還有一個比較常見的應用就是語義分析,比如說看到中國能夠聯想到北京,這些都是深度學習廣泛使用的一些場景。

打造雲上深度學習實驗室

那麼,深度學習到底是幹什麼的?我們給它一個定義,深度學習是在端到端的去尋找一個y=f(x)的方程,或者是在做一個a到b的映射。具體來說,對于語音識别,我們傳給你一段語音,你就能夠翻譯出,它能夠知道是“你好”,然後在圖象裡面我畫出來一個猴子,能夠識别出來是猴子,alphago下棋的時候,當我把棋局發給你,回報就是下一步應該如何走,其實機器本身就在幹這件事情,當人不知道怎麼解決問題的時候,機器學習做一件事情,尋找一個方程能夠反應這個規律。

那麼,深度學習和機器學習的差別在哪裡?在于端到端,傳統機器學習不能直接把圖檔傳給機器學習來處理的,它需要一些資料科學家,在阿裡我們把算法工程師分成兩類,一類叫基礎算法工程師就是去開發f()裡面東西的人,另外一類叫業務算法工程師,從最開始圖檔開始特征工程,所謂特征工程就是我來定義有哪些特征,什麼是你的鼻子,什麼是你的眼睛,然後先把圖檔轉化成特征,把特征作為一個輸入,輸入到方程裡面去求解。那麼就意味着整個規律的提取實際上是由人來完成的,它對人是強行依賴的。而深度學習最不一樣的地方在于從原資料開始,是由計算機本身來做特征提取,不是由人來做特征提取讓機器去運算,這可以稱的上是一個革命性的變化。這是深度學習的價值,你隻需要在原資料中做計算,不需要做特征提取的事情,但是這也說明了它其實是有局限性的,深度學習其實是有自己的場景限制的,表現比較好的一些領域包括圖象識别、語音識别、文字處理和下圍棋等;還有對原資料的依賴性非常高,它必須要求原資料裡面沒有任何的特征丢失。

打造雲上深度學習實驗室

深度學習是直接從資料裡面學規律,那麼資料是很重要的事情。深度學習的真實應用比如語音識别和客服系統,這兩個領域很成功。還有人臉識别,現在所有銀行所用的人臉識别技術都是基于深度學習的。人工智能前面看到有多少智能,後面就有多少人工,它是完全資料驅動的,如果沒有足夠大的标注資料,深度學習是比較難開展的,是以要把資料标注出來,而這個東西耗時耗力,先要從網上拉圖檔,然後對這些圖檔進行辨別。

辨別完之後,要把資料分成訓練集和測試集,提高它的泛化能力。

因為深度學習其實是尋找方程,那個方程會有很多的參數,會産生什麼效果呢?會成為一個實驗室的書呆子,我隻能夠把實驗室的訓練資料學的特别好,輸入一個照片,可以給出正确的判斷,但是當拿到真實的社會上去用的時候,我發現它是一個書呆子,看起來隻是把那些資料的拟合程度做的比較好,但是它實際上叫過拟合,它隻符合自己實驗室的資料,沒有真正學到規律。是以我們真實處理深度學習的時候,通常會做兩件事情,資料标注好之後我會把資料分成兩類,一類是訓練資料,另外一類是測試資料,這是很重要的過程。後面做的事情就是把前面找到的一些後選方程輸入進來進行比較,看哪個方程表現最好,表現最好的方式再做一個測試,當這個方程能夠滿足測試條件的時候,它就可以用來做商業化,用來做預測的方程。

深度學習是有門檻的,資料的能力、算法的能力和計算能力。過去隻有資料科學家知道怎麼解決的一些問題,而現在,特别像google把tensorflow庫開放出來之後,對于普通的程式員來說,有許多東西你隻要知道它能幹什麼,而它的使用實際上隻是一個api的調用,這在深度學習方面有非常好的支援。

<b>開源代碼實作</b><b></b>

打造雲上深度學習實驗室

另外一件事情,深度學習有機會把一些論文用代碼實作,并且是可以下載下傳找到并且學習的。所有成功的在做深度學習的公司,其實還是依賴于大資料來做。但是實際上包括google、各個大學都已經把一些圖象的庫甚至一些視訊的庫放在了網上,如果大家肯去學習肯去看,這些庫都是可以拿到的,重要的是你想要讓深度學習幫你做什麼,你要做一盤什麼樣的菜。

<b>深度學習應用建構的完整生命周期</b><b></b>

打造雲上深度學習實驗室

對于普通人來說,深度學習到底跟我們有沒有關系?如果我想做成一個業務應用,你要做哪些事情?首先是資料準備,資料是深度學習的驅動力,然後裡面有模型開發和模型訓練,深度學習實際上在尋找一個方程,用這個方程去描述某些事情的規律,那麼這個方程有兩部分,這個方程長什麼樣,wx+b,後面加一個激活函數後面再加cnn,這個事情是由模型開發來決定的。我大概決定方程長成什麼樣,然後做模型訓練,我隻能知道模型長什麼樣,但是模型的參數實際上是訓練在做的事情,把參數進行優化,當整個模型訓練完成之後,就産生了一個模型。

那麼,模型預測是幹什麼的呢?實際上就是把辛辛苦苦通過資料搜集、通過模型開發模型訓練産生的模型進行商業化,它可以去做alphago跟人下棋,可以做圖象轉化,實際上它有兩種存在方式,一種是線上的存在方式,它作為一個api服務和整個微服務、其他外部服務進行整合,我從外部的api去調用,把這些輸入放進去,傳回一個值,這是一種方式;另外一種方式是手機app,把它作為一個圖書館加上一個配置放在手機應用裡面來做模型預測,當你的模型預測是為api所用的時候,這裡面就涉及到更新擴充的問題。

為什麼要用阿裡雲容器服務來跑我的gpu?阿裡雲容器服務助力深度學習靈活化:

快速部署:無需安裝,分鐘級别啟動/關閉;

多套環境共存:可以支援多個tensorflow,keras版本,不同python庫;

可複現,可遷移并且可擴充:可複制可備份的環境,擴容簡單,友善共享;

內建阿裡雲的分布式存儲,負載均衡,雲監控等服務,提供一站式的深度學習訓練體驗:ecs,egs,nas,oss,slb,sls等服務無縫內建。

基于容器服務的深度學習解決方案架構

打造雲上深度學習實驗室

這是我們深度學習解決方案的一個整體架構,可以看到向上關聯了它整個生命周期從資料的預處理,從開發訓練到預測,包括egs,我們支援gpu n卡,n卡是在深度學習場景下很重要的東西,包括vpc、共享存儲,我們都已經內建了。向上管理整個生命周期,向下內建阿裡雲所有服務,你隻需要使用我們的服務,就不需要管如何去用oss,nas的問題了。在運維的層面上,負載均衡、彈性伸縮包括你的資源監控都是在我們管理範圍之内。同時我們也和emr的內建。

<b>利用容器技術進行</b><b>gpu</b><b>管理和排程</b><b></b>

打造雲上深度學習實驗室

我們利用容器的技術進行gpu的排程,可以看到在控制台裡面隻需要告訴我,你的深度學習應用需要用幾塊gpu卡,如果是兩卡,就把兩卡都分割給你,如果是一卡,可以看到,在真正的主機上一個dvs要一個gpu0,一個dvs需要gpu1,寫程式必須要指明用gpu0還是gpu1。利用容器化技術可以把你的應用和底層相屏蔽,做到應用裡面是gpu0,雖然下面用的是gpu0和gpu1,但是在容器視角裡面看,他們都是gpu0,這樣使你的程式和底層相當于做到透明化管理。

另外,我們提供了docker鏡像,我們提供的東西跟你的需求還是有差異的,你也可以用自定義的鏡像來管理你的深度學習技術庫。

端到端的深度學習體驗

打造雲上深度學習實驗室

我們做的實驗也是基于我們的解決方案,我們在模型開發、模型訓練和模型預測三個最主要的場景下給大家一些支援。

模型開發支援很多學習架構,正确學習深度學習的話,是需要比較大資料量的,是以需要一些外接的資料券支援,包括oss、nas、hdfs,這個我們在模型開發上都做了支援,你可以選擇要用gpu還是cpu;模型訓練現在支援tensorflow,我們支援tensorboard的分布式訓練,如果你的資料比較大,模型比較大,可以在我們這套架構下做分布式的訓練。我們同時還有oss、nas和hdfs的支援等。我們也支援job的曆史記錄以及訓練的時候要用到gpu和cpu;模型預測所做的事情是什麼呢?我前面做的所有努力都是為了最後業務結果來付出的,最後的業務結果就是算出一個模型,把它做成一個服務暴露出去,存儲現在支援oss和nas,也支援大執行個體和負載均衡。

打造雲上深度學習實驗室

簡單看一下,如果要做模型開發,怎麼建立一套egs的環境?首先要選一個叢集,整個環境實際上都是你自己的,實際上對你來說完全安全的。然後選擇開發環境的名字,然後選擇訓練架構,然後選擇gpu的數量。可以選擇使用資料券也可以選擇不适用資料券。另外一個就是jupyter,相當于外部開發環境下面的密碼,當你開發完之後,運作訓練的時候,會有一個訓練監控,就是我要看整個訓練效果準确率等等。

下面就涉及到你是不是用ssh的方式去通路,當它被建立出來之後,可以看到有兩個連結,一個是jupyter,一個是tensorboard的通路連接配接,你可以通過這兩個連結分别去通路兩個不同的服務。

打造雲上深度學習實驗室

同樣,模型開發我們提供了ssh的登入方式,這種方式對大多的程式員來說還是比較熟悉的。

打造雲上深度學習實驗室

圖為分布式模型訓練,因為我們現在多數客戶,除了一些比較先進客戶在用這套東西,多數人還停留在模型開發,而模型訓練的東西和模型開發有一點類似,但是最大的差別是有一個分布式訓練選擇。分布式訓練我就可以選擇去做參數伺服器,然後做worker, worker是來做乘法操作的,是以要指定每個worker要用幾個gpu。資料券是把資料加載進來,如果你有比較大的資料量,另外我們有一個規約,相當于訓練中間每隔1000步、2000步會産生一個中間的訓練結果,把它記錄下來,儲存到某個地方,如果你的程式不幸挂掉,還可以自動恢複來進行運算,保證整個訓練的時間沒有因為意外而間隔。同樣它也支援訓練監控,一旦你把訓練監控加長的話你就可以這裡看到,每台worker訓練的效果是一個什麼樣子,包括日志。

分布式預測是用所謂的預測程式去加載模型,可以利用阿裡雲的負載均衡去做負載均衡的工作,用你的用戶端來通路,相當于支援預測這個場景。除此之外,我們還提供了深度學習的一些基礎服務,我們可以從hdfs上拿資料。

打造雲上深度學習實驗室

另外就是運維支撐,包括gpu的監控和報警,還有負載均衡以及根據監控和報警産生結果來做一些彈性伸縮的工作。大家可以看到,我們其實提供兩個監控方式,一種監控方式是完全由你自己一個開源架構來做的,就是這套監控環境就布在你自己的機器上,阿裡雲不會拿到他的資料,另外一個方式是你可以把你的監控資料對接到你的監控上,我們監控能夠給你提供一些像報警、自動恢複的能力,大家可以看到我們監控的次元,像gpu的使用率、gpu顯存的使用率、gpu的溫度。

雲上深度學習的價值

打造雲上深度學習實驗室

總結來看,大家經常說可以自己手操一套,自己買一個gpu機器,自己來搭一套環境是沒問題的,實際上有一些隐性的成本可能要跟大家談一談。圖中就是整個手工操作所必須的,包括這些深度學習庫的版本維護,還有多版本的共存,以及它的監控和運維等,阿裡雲深度學習的方案給大家提供的就是一套基于深度學習的線上運維系統,幫助你把阿裡雲的經驗放到雲裡面,幫助你更有效的訓練出來你的深度訓練模式。

繼續閱讀