閱讀339 返回首頁    go 阿裏雲 go 技術社區[雲棲]


快速在阿裏雲上構建機器學習應用

3月28日雲棲大會開源專場,阿裏雲技術專家必嘫給大家帶來了“在阿裏雲上構建機器學習應用”的演講。本文主要從深度學習應用發展曆史開始談起,進而介紹了如何結合阿裏雲容器服務的機器學習解決方案快速打造一套深度學習應用的案例。

深度學習應用發展的介紹

深度學習在2016年有兩款應用特別火爆,影響到每個普通人的生活。第一個是會下圍棋的AlphaGo,它向大家證明了計算機不隻有強大的運算能力,同時具備了自學能力,更厲害的是這種學習能力是可以縱向深入的,換句話說,不需要人賦予的邏輯,計算機可以通過大量的數據和不斷的訓練成為一個領域的專家。

而另一款是萌萌的手機應用:Prisma,這也是一款基於深度學習技術的手機應用,在2016年底,它分別登上了ios和Android手機最佳應用的頭名,成為全球潮人的家具旅行必備良品。這款產品的功能直白一點說,就是用戶提供自家小區的照片,結合繪畫大師的藝術風格,最後產生一款有大師風格的用戶照片。用機器學習的語言來描述,這個工作分為兩個部分
1. 求解描述大師風格的方程f,這是整個過程中最消耗時間的事情,大概占據了整個消耗時間的99%
2. 當風格方程f的參數確定後,將x代入方程f

這套風格轉換的深度學習算法並不是Prisma首創的,實際上在2015年,就有三個來自德國的研究員發明了這套算法,並發表了論文。同時他們也創辦了一家叫Deep Art的公司。用戶在 Deep Art 網頁上上傳自己的照片,然後通過 Deep Art 提供的 “機器人梵高” 進行新畫創作。整個過程需要等待幾個小時讓計算機進行數據運算和處理。用戶可以選擇清晰程度不等的作品。用戶可以花上 19 歐買一張適合明信片用的作品,或者多掏 100 歐,買一張大尺寸油畫級別的。他們的生意不錯但是並沒有大火。

其中的原因有兩個:

  1. 等待一副圖片的產生需要幾個小時的用戶體驗不佳,要知道用戶是沒有耐心等待的
  2. 它沒有提供手機App,導致用戶覆蓋率不夠高。

而這時一個聰明的俄羅斯程序員阿列克謝 · 莫伊謝延科夫(Alexei Moiseyenkov)意識到了這個聚寶盆並沒有真正開啟,他要做一款速度超快的手機應用。能實現相同的功能。經過兩個月的研究,他發現慢的原因在於,原始的風格遷移過程中,每生成一張圖片,都相當於要訓練一次模型,這中間可能會迭代幾百幾千次。如果了解過一點機器學習的知識,就會知道,從頭訓練一個模型要比執行一個已經訓練好的模型要費時太多。而這也正是原始的風格遷移速度緩慢的原因。他解決了這個技術問題後,同時開發出了手機應用。Prisma 在麵世僅僅一周後,就收到了俄羅斯網絡公司 https://Mail.Ru 的價值200萬美元的投資。

分享這個故事的想告訴大家的是如何把AI的技術轉化成相關的產品,實現數據,技術和場景的聯動,才是真正的價值,也是真正的挑戰。下麵會給大家演示如何在阿裏雲上快速搭建這款價值千萬美金的深度學習應用。

在阿裏雲上構建類似Prisma的深度學習應用

要構建深度學習應用,選擇一款深度學習工具是必不可少的步驟。TensorFlow是穀歌於2015年11月9日正式開源的計算框架。TensorFlow計算框架可以很好地支持深度學習的各種算法,但它的應用也不限於深度學習。這裏我們選擇TensorFlow作為數值計算庫,而使用的代碼在github上:fast-style-transfer)

接下來,要梳理一下機器學習的工作流程,它分為數據準備,訓練程序開發,訓練任務執行和在線預測服務四個部分,在每個階段都有相應的工作。

針對於這個流程,容器服務團隊提供了雲上機器學習解決方案。這個方案以容器服務為核心,貫穿了前麵提到的機器學習生命周期,並且無縫的整合了阿裏雲的計算,存儲,負載均衡等服務。它的好處在於利用了容器技術,但是並不需要用戶深入了解容器技術。

具體操作步驟

1. 準備數據

通過osscmd和圖形用戶界麵上傳數據,當數據非常巨大時,可以考慮利用oss提供的解決方案。

2. 通過圖形用戶界麵一鍵式的定製雲端實驗開發環境,並且支持tensorboard查看訓練趨勢。這裏我們的目的是調試訓練代碼邏輯。

3. 構建雲端訓練,完成模型的導出

使用git導入應用代碼, 如果在需要安裝python依賴庫,可以在應用的根目錄下放置requirements.txt, 這樣就可以在應用初始化的時候安裝這些依賴包.對於分布式存儲,這裏有一個約定:在執行環境的/input文件夾對應於選定oss數據卷的根目錄,/output對應訓練程序要輸出到oss數據卷。目前雲端訓練支持單機和多機兩種模式,如果是多機模式,需要分別指定參數和任務服務器的數量。機器學習解決方案會在調度時刻,將生成的參數傳遞給任務服務器,。如果訓練過程中需要利用tensorboard查看訓練狀況也是支持的。

4. 利用導出的模型,執行在線預測

創建預測服務,這裏預測服務具體支持兩種: TensorFlow Serving和自定義服務。TensorFlow Serving支持加載TensorFlow導出的標準模型,自定義服務可以支持用戶自己開發的預測應用。對這兩種服務,都可以從數據卷中加載模型或者checkpoint,並且自動綁定負載均衡服務,同時還可以指定預測實例的個數,保證應用的高可用

總結

這次分享利用阿裏雲容器服務機器學習解決方案搭建了一個和Prisma功能類似的深度學習應用,並且實踐了從模型訓練,導出以及預測的全生命周期工作流程,這會是個逐步迭代不斷優化的方案.我們後麵會不斷迭代優化這一方案,希望幫助數據科學家們專注於機器學習價值本身,進而提供最大的價值。

  • 簡化:一鍵整合機器學習應用和阿裏雲GPU,NAS,OSS,SLB,SLS等服務; 快速構建從模型學習到發布工作流程

  • 優化:提供針對特定場景性能優化的TensorFlow和Caffe鏡像;利用持續交付的最佳實踐優化整體流程

  • 定製化:可使用用戶自定義的鏡像,滿足高階用戶自定義需求,平衡靈活性與自動化

最後放出彩蛋,展示一下視頻風格轉換的效果:

視頻風格轉換

參考材料

深度學習實踐:使用Tensorflow實現快速風格遷移
https://github.com/floydhub/fast-style-transfer
中國版 Prisma 來了,我們今天再聊聊深度學習

最後更新:2017-04-01 16:42:10

  上一篇:go 阿裏“NASA”首個重磅武器亮相:機器學習平台PAI2.0
  下一篇:go PostgreSQL jdbc batch insert