PAI簡介
阿里雲機器學習PAI(Platform of Artificial Intelligence)是一款一站式的機器學習平台,包含數據預處理、特征工程、常規機器學習算法、深度學習框架、模型的評估以及預測這一整套機器學習相關服務。由於目前PAI還屬於公測階段,所以是不收費的。但是PAI底層依賴於maxcompute(計算)和oss(存儲),所以會收取一定的托管費和深度學習存儲費用。不過實測發現每天差不多一兩分錢,充10塊能玩好久。
實驗准備
實驗的整個過程都在官方文檔有很詳細的說明:https://yq.aliyun.com/articles/72841,所以我看着文檔做了一遍,最終是成功了,不過也發現一些問題,在這里把它記錄下來。
首先為了完成實現我們得有阿里雲賬號,申請雲賬號AccessKey,然后開通機器學習和oss服務,這些都可以在官網相應產品下點擊開通,很方便。

進入控制台->機器學習,從這里創建一個項目,所屬區域一定要選擇華東2,因為目前阿里只有華東2區支持深度學習的GPU集群,而且oss在華東2區不產生流量費用,在讀取OSS數據時會產生請求費用,請求費用為0.01元/萬次。OSS的存儲費用為0.148元/GB/月,還是很便宜。

深度學習與GPU
深度學習是人工智能 (AI) 中發展迅速的領域之一,可幫助計算機理解大量圖像、聲音和文本形式的數據。利用多層次的神經網絡,現在的計算機能像人類一樣觀察、學習復雜的情況,並做出相應的反應,有時甚至比人類做得還好。這樣便提供了一種截然不同的方式,用於思考數據、技術以及人類所提供的產品和服務。通常說到計算我們首先想到的是CPU,GPU是圖形處理器。CPU和GPU的設計目標是不同的,針對了兩種不同的應用場景:CPU需要很強的通用性來處理各種不同的數據類型,同時又要邏輯判斷又會引入大量的分支跳轉和中斷的處理。這些都使得CPU的內部結構異常復雜。而GPU面對的則是類型高度統一的、相互無依賴的大規模數據和不需要被打斷的純凈的計算環境(擴展:https://www.zhihu.com/question/19903344)。

上面的圖是從NVIDIA官網扒過來的,CPU 由專為順序串行處理而優化的幾個核心組成,而 GPU 則擁有一個由數以千計的更小、更高效的核心(專為同時處理多重任務而設計)組成的大規模並行計算架構。(官網鏈接:http://www.nvidia.cn/object/what-is-gpu-computing-cn.html)
阿里PAI深度學習使用的GPU是NVIDIA Tesla M40,一款專注深度學習模型訓練的GPU,性能還是很強勁的,這是官方一張圖:

GPU和CPU在深度學習訓練時GPU速度更快,這點很重要,因為機器學習會有大量復雜算法,NVIDIA GPU 特別擅長處理並行工作負載,可讓網絡提速 10-20 倍,從而將各個數據訓練迭代周期從幾個星期縮短為幾天。實際上,GPU 在僅僅三年內便將深度神經網絡 (DNN) 的訓練速度提高了 50 倍(這一速度遠遠超過摩爾定律),預計未來幾年還將再提高 10 倍。
開始實驗
對機器學習領域的深度學習有了一個簡單的認識之后,我們利用阿里PAI做一個簡單的實驗:Tensorflow圖片分類。上面已經准備好了必要的環境,接下來進入機器學習模塊,點擊首頁,從模板創建一個實驗:Tensorflow圖片分類,在左側設置里面開啟oss訪問權限。然后得到下面的可視化模型:

點擊組件進行參數設置。這里的參數要配置執行訓練的python代碼文件,訓練集文件目錄,以及輸出模型目錄。這些都是放在oss上的,所以要先在oss上創建bucket,然后創建文件夾,把我們需要的資源放進去。這里采用的是cifar-10數據集(http://www.cs.toronto.edu/~kriz/cifar.html),由60000張32*32的RGB彩色圖片構成,共10個分類,50000張用來訓練模型,10000張做測試,交叉驗證。所有資源可以在這里下載:https://help.aliyun.com/document_detail/51800.html。實驗目的是:利用cifar-10數據集訓練模型,然后給定一張圖片讓機器自己識別它是哪一類。

如圖,創建四個文件夾:1)check_point:用來存放實驗生成的模型。2)cifar-10-batches-py:用來存放訓練數據以及預測集數據,對應的是下載下來的數據源cifar-10-batcher-py里面的文件和預測圖片bird_bullocks_oriole.jpg文件,放在一起就行。3)train_code:用來存放訓練代碼,也就是cifar_pai.py。4)predict_code:用來存放預測代碼cifar_predict_pai.py。
訓練模型
一切准備好之后,我們就可以進行實驗了。可以看上面的圖,點擊訓練模塊,進行參數設置:python代碼文件選擇train_code/cifar_pai.py文件,數據源目錄選擇cifar-10-batches-py文件夾,輸出目錄選擇check_point文件夾。然后右鍵點擊該模塊,選擇“執行該節點”,開始訓練模型。這個過程大約需要20分鍾左右。右鍵點擊模塊可以查看日志,執行完之后模塊會有一個綠色的勾,表示完成。生成的模型在check_point/model/文件夾下(注意文中紅色部分,設置參數時注意選擇正確,否則會報錯)。
預測結果
模型訓練完成,接下來就是利用模型進行圖片分類。設置預測模塊的參數:python代碼文件這里要選擇predict_code/cifar_predict_pai.py文件,數據源目錄和輸出目錄和上面一樣選擇對應文件夾。這里執行該節點會報錯,查看日志會顯示如下結果:

報錯原因是ndarray沒有Index函數,需要把下載的cifar_predict_pai.py修改:
1 # Predict 2 prediction = model.predict([img]) 3 print (prediction[0]) 4 print (prediction[0]) 5 #print (prediction[0].index(max(prediction[0]))) 6 num=['airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck'] 7 8 #注釋掉這行:
9 # print ("This is a %s"%(num[prediction[0].index(max(prediction[0]))])) 10 #改為下面代碼: 11 print ("This is a %s"%(num[np.argmax(prediction[0])]))
應該是python2和3版本差異問題。修改完之后再上傳到oss相應目錄,再次運行節點前先刪除check_point下stdout文件夾(不要刪model,訓練的模型可以繼續用),等待執行結束可以到logview查看預測結果。

這樣就完成了訓練模型和結果預測。其實整個實驗過程比較簡單,畢竟圖形化界面操作體驗很好,再加上是案例,提供代碼,所以目的就是熟悉阿里PAI深度學習的操作步驟和實驗流程,這並不是“深度學習入門xx”,只是一個案例,因為即使不懂代碼和原理一樣可以得到結果。機器學習是一門很深的課程,它所涉及到的很多算法原理才是學習的重點,了解常用算法的分類和不同算法的適用場景才能發揮機器學習的價值,解決了實際問題才是機器學習的根本所在。
~到此為止~
