下午,我用 Python 深度學習框架 Keras 訓練了一個包含3層神經網絡的迴歸模型,預測波士頓地區房價。python
這是來自於 「Deep Learning with Python」 書上的一個例子。bash
運行的時候,代碼有兩個大循環。微信
第一個把數據跑100遍(epochs),第二個把數據跑500遍。網絡
個人筆記本電腦算起來很吃力,風扇一直在響。框架
大熱天的,看着好可憐。機器學習
用筆記本電腦進行機器學習,仍是不大合適的。ide
我要是有一塊 GPU 就行了……grunt
此時,突發奇想。工具
我雖然沒有帶 nVidia GPU 的設備,不過誰說非要在本地機器運行代碼了?post
早已經是雲時代了啊!
可否用雲端 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"
複製代碼
這句話的意思是:
若是你但願使用其餘深度學習框架或版本,能夠參考這個連接。
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 標籤。
你會看到已有的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)。