雲端計算時代的深度學習訓練

七牛雲發表於2017-01-18

雲端計算時代,資料量和資料維度急劇增加,對深度學習訓練造成越來越大的壓力,來自七牛雲的技術專家林亦寧在 OSC 年終盛典上帶來了關於深度學習訓練的演講,將就大量分散式叢集下,如何高效、可靠地構建深度學習訓練計算任務進行了乾貨分享。以下是他的演講內容。

林亦寧,七牛雲技術專家,浙江大學博士畢業,在機器視覺和深度學習領域有 10 餘年的研究和開發經驗,有多年創業經驗,曾任無人機、智慧家電領域公司技術長。


雲端計算和深度學習這兩個東西很火,它們只有緊密地聯絡在一起才能發揮出各自最大的優勢。

在與客戶或者同行交流的過程中,我們發現除了一些很大的公司,比如 BAT 或鏈家這樣上軌道的公司之外,大部分的公司做演算法、深度學習時用的還是單機版的深度學習平臺。這樣的平臺,對於滿足目前的資料量、資料吞吐量以及對計算的迭代速度要求,都有很大的侷限性,也無法滿足現在的處理要求。

Why?

接下來我將會以七牛為例,分享七牛是如何考慮和實現深度學習的。 主要從三個階段分享,首先是考慮清楚為什麼要做這件事。七牛雲是一個以雲端儲存技術為核心的雲服務公司,平臺上現在有 60 多萬企業使用者和個人開發者, 80% 的手機 App 或多或少都用到了七牛的雲端儲存,幾乎在場的每個人的手機裡,都有正在用著七牛雲端儲存服務的 App 。

簡要介紹一下七牛的歷史,七牛一開始做雲端儲存,開發儲存 API 。2012、2013 年短視訊有了一個爆發式的增長,包括媒體行業都有爆發式的增長,所以七牛隨著這一波網際網路 App 的興起也有了爆發式的增長。後來七牛給客戶提供了很多基礎服務,主要是一些富媒體資料,例如音視訊。隨後客戶提出更多要求,例如需要計算、檔案處理、點播以及直播的解決方案等等。所以現在七牛是一個雲平臺公司,包含以上所有的服務。

第二個階段是要到哪裡去,七牛提出的口號是 「Time to be an AI Company 」,這個口號不僅是內部的,也是對客戶的引導。

提出這個口號有兩個原因,第一個是內在原因,可以看到移動終端年增長率在逐年下降;另外,三五年前,拿到一個客戶需要一塊錢,新增一塊錢可以多十塊錢的利潤,這就是很好的生意。但現在拉一個客戶成本是十塊錢,產生的經濟效益也還是十塊錢。這個時候,賬就算不平了。所以現在並不是一個做 App 創業的好時機。

第二個是外因,現在的應用環境和技術環境,都已經到了一個 AI 可以成熟應用的時間點。應用環境是有海量的富媒體資料,可以通過一些手段充分挖掘出大資料內在的價值;互動方式開始日益多樣化,以前是發簡訊,後來流量多了可以發圖片,後來網路好了,又可以發視訊,現在可以看直播,直播以前是用聊天室聊天,現在可以發彈幕、送主播「海陸空」。互動方式越來越多樣化,帶來的好處是能夠更容易讓使用者付費。

另外一點,從技術環境來說,雲端計算技術和深度學習技術都已經到了一個可以轉化為生產力的時間點。30 年前就有了深度網路,那時候還稱為神經網路;上個世紀八十年代的東西到現在突然火起來的主要原因是,硬體技術可以實時把推理的結果返回來,而且結果還不錯。做一個人臉檢測挺準的,這個就是應用環境和技術環境可以把 AI 轉化為生產力的時間,給客戶提出一個口號,即尋找更多的連線,讓這個連線更加智慧,使得客戶願意在單位的連線上掏出更多的錢,這個才是以後生意的方式。

所以要給客戶設計這樣一個機器學習的平臺,包括三部分:一個資料,一個演算法,一個模型。這是對一個機器學習平臺最簡單的抽象。

How ?

首先思考需要解決哪些問題,最重要的分為三個方面:效率、規模以及機器學習本身的一些內在性的需求。 * 規模 所謂的規模問題有三點。一是資料總量增長很快,每年公有云和視訊資料增長比例達 60% 多。第二點是資料量非常大,比如七牛有 2000 億張圖片,有超過 10 億小時的視訊,如何去挖掘資料內在的價值,這本身就是一個非常頭疼的問題。第三點是吞吐量大,例如 1080P 的攝像頭,一個攝像頭在一個小時產生的資料是 1.8G,一個城市有幾十萬個攝像頭,像北京這種城市甚至幾百萬,三個月產生的資料是 EB 級別,資料的吞吐量非常大,所以在設計系統的時候必須能跟上新增資料的節奏。

  • 效率 很多人說現在的網際網路是雲端計算。但是實際上雲端計算不是一朵雲,網際網路上也不是隻有一朵公有云,而是有很多雲,例如儲存、日誌伺服器、計算叢集等等。我們的系統需要在這一朵朵雲之間架起橋樑,連線起來。很多時候它們不在同一個機房,甚至不在同一個城市,而系統需要在能保證足夠的速度和頻寬的前提下,讓資料可靠地傳到最終學習的叢集。

  • 規模機器學習的原生需求

enter image description here 圖 1

第三個是機器學習的原生需求,七牛把機器學習的計算過程抽象為兩種:資料和訓練的作業。原生的需求包括很多方面,圖 1 列了幾條需求,例如一個是能讓整個訓練快速迭代;第二個是程式停了可以隨時重啟,資料應該是安全的;然後是各個訓練任務之間需要與它的資源隔離開;訓練作業需要分散式。還有其他的需求,例如視覺化、模型融合、模型管理,這些都是機器學習本身訓練的需求。

What ?

enter image description here 圖 2

圖 2 是深度學習平臺的架構,底層是前面介紹的各個檔案系統,在這個上面做了一層 Caching IO ,即分散式記憶體伺服器,計算時所需要的資料都是通過它來做提取,大家可以參考一個開源專案 – AlluxIO ,七牛的設計跟它有一些近似。在 IO 之上抽象為 Docker,來計算任務和資源分配以及排程。在這個基礎之上,編排系統也是參考了開源的專案。七牛做這個專案的時間其實比較早,大概一年兩年前就做了,主要是擔心開源專案任性說不幹就不幹了,所以自己寫了一套東西。

有這麼一套編排系統以後,可以很方便地構建一個分散式的系統,它的核心是一個引數伺服器,這裡推薦一個基於 Caffe 的分散式框架 Poseidon,它針對深度學習任務優化了計算叢集內部的通訊,在降低通訊量的同時保證很好的迭代性。有了分散式的系統和編排系統之後,把上面的作業抽象為一個一個的獨立映象,比如資料清理,有五種資料清理的方法就做五個映象。資料放大也類似,包括訓練和推理,都會做出相應基本的映象去呼叫。在這個基礎上會把作業全都抽象為一個圖的形式表達,以及用資料流的方式去表達整個作業的過程。

這些抽象完了以後,就是上面一個一個的應用,可以看到有迭代學習的需求,有增量學習的一些任務或者半監督的任務,包括模型怎麼比較、怎麼融合,都是跑在整個系統的 App。這個 App 通過底層這一套基於圖和流式的系統來支撐。最後模型訓練完了,會有一個 API 的管理系統,這個管理系統可以提供自動的 API 生成,提供自動的評估以及恢復的升級這些功能。例如訓練完一個模型後,但不知道這個模型實際效果如何,這時可以選擇一個恢復升級的方式,先升級 10%,再自動驗證效果,如果好再升級 30%,可以把這個過程全部編排在 API 裡。所有資料到達資料庫存裡,這就是整個深度學習系統。七牛用電影“機械姬”的女主角之名 Ava 來命名它,希望它能像 Ava 一樣冰雪聰明。

下面稍微介紹一下上面跑的幾個 App,流式的計算用法,例如一個映象是一個基本的操作單元,還有一個是 eval 評估服務,只需要把資料流畫出一張圖,把地址指定,得到結果的集合,這是一個能夠極大降低演算法人員的工作成本的服務,使演算法工程師能更專注演算法本身。

enter image description here 圖 3

圖 3 是迭代和增量訓練的系統,也是基於剛才那一套訓練平臺開發的 App。為了解決不斷有新資料的流式訓練的任務,傳統的方法需要先建立一個資料檔案,現在把這個過程放到一個獨立的程式來做。沒有新資料來的時候就會把這個資料編排到整個資料池的底部,在訓練的時候可能會用一些 Cheet,會用同個模型,因為不知道是哪個,甚至訓練到一半發現不對勁,但是又不想把當前的訓練停下來,隨時可以開啟一個新的訓練,用當前這個模型改一個引數讓它跑,前面的訓練以一個副本的形式在跑,最後達到做模型融合或者模型比較的方法。最後在模型融合或者模型比較完成以後,把模型推到一個 API 生成器上自動生成 API 。整套過程下來,可以減少總是重複訓練同一批資料的環節。

enter image description here 圖 4

這個也是七牛做得比較有意思的實驗,半監督的方式打標,怎麼做?來了資料先保證資料打過標,不過還是會有沒打過標的,尤其流式進來的資料,這個資料量很大,打標也很痛苦,七牛用一些訓練好的分類器對未打標的資料做分類,同時做一個聚類,未打過標的資料中跟打過標的資料聚類最接近的一些資料,以及標籤是一致的資料,用打過標的訓練新的模型,這個過程需要迭代,一開始沒有打過標的用了 20%,下次迭代一次以後又會加 10%,迭代幾輪以後可以很大程度降低一個打標的工作,最後用這樣的方式訓練新的模型。

enter image description here 圖 5

圖 5 是模型融合的方法,列舉了三種方法,七牛都在做一些嘗試。最簡單的是線性的融合方式,比較複雜的是中間有一個網路做融合,第三個比較傳統,把融合放在前面一層。用的最多是線性的融合方法,節省資源,也不太傷腦筋。

總結

AI 需要三方面的結合:平臺、演算法和資料。只有這三點能非常好地結合到一起,才能產生經濟效益。

相關文章