負荷
下午,我用 Python 深度學習框架 Keras 訓練了一個包含3層神經網路的迴歸模型,預測波士頓地區房價。
這是來自於 “Deep Learning with Python” 書上的一個例子。
執行的時候,程式碼有兩個大迴圈。
第一個把資料跑100遍(epochs),第二個把資料跑500遍。
我的膝上型電腦算起來很吃力,風扇一直在響。
大熱天的,看著好可憐。
用膝上型電腦進行機器學習,還是不大合適的。
我要是有一塊 GPU 就好了……
此時,突發奇想。
我雖然沒有帶 nVidia GPU 的裝置,不過誰說非要在本地機器執行程式碼了?
早已是雲時代了啊!
能否用雲端 GPU 跑機器學習程式碼,讓我的筆記本少花些力氣呢?
偶遇
有這個想法,是因為最近在 Youtube 上面,我看到了 Siraj Raval 的一段新視訊。
這段視訊裡,他推薦了雲端 GPU 提供平臺 FloydHub。
我曾經試過 AWS GPU 產品。
那是在一門深度學習網課上。
授課老師跟 AWS 合作,為全體學生免費提供若干小時的 AWS 計算能力,以便大家順利完成練習和作業。
我記得那麼清楚,是因為光如何配置 AWS ,他就專門錄了數十分鐘的視訊。
AWS 雖然已經夠簡單,但是對於新手來說,還是有些門檻。
FloydHub 這個網站,剛好能解決使用者痛點。
首先它能夠包裹 AWS ,把一切複雜的選擇都過濾掉。
其次它內建了幾乎全部主流深度學習框架,自帶電池,開箱即用;
另外,它提供了豐富而簡明的文件,使用者可以快速上手。
正如它的主頁宣稱的:
Focus on what matters. Let FloydHub handle the grunt work.
翻譯過來就是:
關注你想做的事兒。髒活累活,扔給 FloydHub 吧。
凡是設計給懶人用的東西,我都喜歡。
我於是立即註冊了賬戶,並且做了郵件驗證。
之後,我免費獲得了2個小時的 GPU 時間,可以自由嘗試執行機器學習任務。
為了能把珍貴的 GPU 運算時間花在刀刃上,我認真地閱讀了快速上手教程。
幾分鐘後,我確信自己學會了使用方法。
嘗試
首先,我到 FloydHub 的個人控制皮膚上,新建了一個任務,起名叫做 “try-keras-boston-house-regression”。
然後,我在本地的 Jupyter Notebook 裡,把程式碼匯出為 Python 指令碼檔案,如下圖所示。
我新建了一個目錄,把指令碼檔案拷貝了進來。
這個 Python 指令碼,我僅僅在最後加了3行程式碼:
import pickle
with open(`data.pickle`, `wb`) as f:
pickle.dump([all_scores, all_mae_histories], f)
複製程式碼
加入這幾行程式碼,是因為我們需要記錄執行中的一些資料(即 all_scores
和 all_mae_histories
)。
然後,進入終端,利用 cd 命令,進入到這個資料夾。
執行:
pip install floyd-cli
複製程式碼
這樣,本地的 FloydHub 命令列工具就安裝好了。
執行下面命令登入進去:
floyd login
複製程式碼
系統會提示你,輸入 FloydHub 上的賬號資訊。
輸入正確後,執行:
floyd init try-keras-boston-house-regression
複製程式碼
注意這個名稱,必須和剛才在控制皮膚新建的任務名稱一致。
配置都完成了,下面直接執行就可以了。
輸入:
floyd run --gpu --env tensorflow-1.8 "python 03-house-price.py"
複製程式碼
這句話的意思是:
- 使用 GPU 計算;
- 執行環境選用 Tensorflow 1.8 版本,及對應的 Keras (2.1.6)。
如果你希望使用其他深度學習框架或版本,可以參考這個連結。
FloydHub 對我們的命令,是這樣回應的:
操作結束?
對,就這麼簡單。
你的任務,已在雲端執行了。
結果
然後,我就忙自己的事兒去了。
喝茶,看書,還掃了幾眼微信訂閱號。
雖然是按時計費,但你不用因為怕多算錢,就死死盯住雲端執行過程。
一旦任務結束,它自己會退出執行,不會多扣你一分鐘珍貴的 GPU 執行時間。
等我回到電腦前面,發現任務已完成。
整個兒過程中,GPU 記憶體著實夠忙碌的(佔用率一直超過90%)。
不過 GPU 好像很清閒的樣子,一直在百分之十幾晃悠。
看來,我們的神經網路,層數還是太少了,結構不夠複雜。
GPU 跑起來,很不過癮。
往下翻頁,看看輸出的結果。
程式的輸出,包括 GPU 資源建立、呼叫的一些記錄,這裡都有。
開啟 Files
標籤頁,我們們看看結果。
之前追加3行程式碼,生成的 pickle 記錄檔案,就在這裡了。
看來,FloydHub 確實幫我們完成了繁複的計算過程。
我的膝上型電腦,一直涼涼快快,等著摘取勝利果實。
選擇下載,把這個 pickle 檔案下載到本地。跟我們的 Jupyter Notebook 放在一個目錄下。
回到 Jupyter Lab 執行介面。
新開一個 ipynb 檔案。
我們輸入以下程式碼,檢視執行記錄是否符合我們的需要。
import pickle
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
with open(`data.pickle`, `rb`) as f:
[all_scores, all_mae_histories] = pickle.load(f)
num_epochs = 500
average_mae_history = [
np.mean([x[i] for x in all_mae_histories]) for i in range(num_epochs)
]
plt.plot(range(1, len(average_mae_history) + 1), average_mae_history)
plt.xlabel(`Epochs`)
plt.ylabel(`Validation MAE`)
plt.show()
複製程式碼
這些程式碼,只是為了繪圖,本身沒有任何複雜運算。
這是執行結果:
視覺化結果與書上的一致。
證明機器學習程式碼在雲端執行過程一切順利。
我們還可以檢視剩餘的可用免費時長。
嗯,還剩下1個多小時 GPU 運算時間呢,回頭接著玩兒。
Workspace
剛才我們們展示的,是命令列下的使用方法。如果你對於命令列操作很熟悉,建議你使用這種方式。因為控制感更強一些。
但是對於初學者,我推薦你使用另外一種更為簡便的方法。
在主頁點選上方的 Workspace 標籤。
你會看到已有的2個樣例 Workspace 。
嘗試開啟其中第一個,看看內容。
點選右上方的 Resume 綠色按鈕,你會看到系統在認真地為我們準備環境。
準備工作結束後,你會看到出現了熟悉的 Jupyter lab 介面。
雙擊左側檔案區域的 dog-breed-classification.ipynb
,開啟。
這裡是個貓狗分辨的完整樣例。
我們們執行一下。方式是執行選單欄裡面的 Run -> Restart Kernel and Run All Cells:
你會發現,跟在本地執行起來,沒有什麼區別。
唯一的差別,是你在用 GPU 加速哦!
如果想建立自己的 Workspace ,該怎麼辦呢?
很簡單,回到我們們的 Project 頁面下,本例是這個連結。
你會看到,每個專案下,都可以使用 Create Workspace 這個按鈕建立新的 Workspace 。
Floydhub 會詢問你,使用哪種方式建立新的 Workspace 。
這裡我們們選擇左側的 Start from scratch 。
下面選擇使用的環境。
我們將其改成 Tensorflow 1.9 和 GPU 環境。
點選 Create Workspace 按鈕,就建立完畢了。
點選 try-keras-boston-house-regression workspace 這個連結。
我們就可以看到,一個 Jupyter Lab 介面為我們準備好了。
這個環境裡面,Tensorflow 和 GPU 的配置都是現成的。
你不用去考慮如何執行 CLI 命令,只需要在其中像平時一樣輸入 Python 程式碼,呼叫 Keras 與 Tensorflow 命令就可以了。
是不是更方便呢?
利用 Floydhub ,開始你的深度學習之旅吧。
小結
做深度學習任務,不一定非得自己購置裝置。主要看具體需求。
假如你不需要全天候執行深度學習程式碼,只是偶爾才遇到計算開銷大的任務,這種雲端 GPU ,是更為合適的。
你花錢買了深度學習硬體裝置,就只有貶值的可能。而且如果利用率低,也是資源浪費。
而同樣的租賃價格,你可以獲得的計算能力,卻是越來越強的。
這就是摩爾定律的威力吧。
你用沒用過其他的雲端 GPU 服務?價格和易用程度,與 FloydHub 相較如何?
如果你對資料科學感興趣,歡迎閱讀我的系列教程。索引貼為《如何高效入門資料科學?》。
喜歡請點贊。還可以微信關注和置頂我的公眾號“玉樹芝蘭”(nkwangshuyi)。