本文為你介紹,如何在 GPU 深度學習雲服務裡,上傳和使用自己的資料集。
疑問
《如何用雲端 GPU 為你的 Python 深度學習加速?》一文裡,我為你介紹了深度學習環境服務 FloydHub 。
文章釋出後,有讀者在後臺提出來兩個問題:
- 我沒有外幣信用卡,免費時長用完後,無法續費。請問有沒有類似的國內服務?
- 我想使用自己的資料集進行訓練,該怎麼做?
第一個問題,有讀者替我解答了。
我看了一下,這裡的 Russell Cloud ,確實是一款跟 FloydHub 類似的 GPU 深度學習雲服務。
可是感謝之後,我才發現原來他是 Russell Cloud 的開發人員。
於是這幾天,使用中一遇到問題,我就直接找他答疑了。
因為有這種綠色通道,響應一直非常迅速。使用者體驗很好。
這款國內服務的優勢,有以下幾點:
首先是可以支付寶與微信付款,無需 Visa 或者 Mastercard 信用卡,很方便;
其次是 Russell Cloud 基於阿里雲,訪問速度比較快,而且連線穩定。在上傳下載較大規模資料的時候,優勢比較明顯。與之相比,FloydHub 上傳500MB左右資料的時候,發生了兩次中斷。
第三是文件全部用中文撰寫,答疑也用中文進行。對英語不好的同學,更友好。
第四是開發團隊做了微創新。例如可以在微信小程式裡面隨時檢視執行結果,以及查詢剩餘時長資訊。
解決了第一個問題後,我用 Russell Cloud 為你演示,如何上傳你自己的資料集,並且進行深度學習訓練。
註冊
使用之前,請你先到 Russell Cloud 上註冊一個免費賬號。
因為都是中文介面,具體步驟我就不贅述了。
註冊成功後,你就擁有了1個小時的免費 GPU 使用時長。
如果你用我的邀請連結註冊,可以多獲得4個小時免費 GPU 使用時間。
我手裡只有這5個可用的邀請連結。你如果需要,可以直接輸入。
看誰手快吧。
註冊之後,進入控制檯,你可以看到自己的相關資訊。
其中有個 Token 欄目,是你的登入資訊。下面我給你講講怎麼用。
你需要下載命令列工具,方法是進入終端,執行:
pip install -U russell-cli
複製程式碼
然後你需要登入:
russell login
複製程式碼
這時候根據提示,把剛才的 Token 輸入進去,登入就完成了。
與 FloydHub 不同,大多數情況下 Russell Cloud 的身份與專案驗證,用的都是這種 Token 的方式。
如果你對終端命令列操作還不是很熟悉,歡迎參考我的《如何安裝Python執行環境Anaconda?(視訊教程)》,裡面有終端基本功能詳細執行步驟的視訊講解。
環境
下文用到的資料和執行指令碼,我都已經放到了這個 gitlab 連結。
你可以直接點選這裡下載壓縮包,之後解壓。
解壓後的目錄裡,包含兩個子資料夾。
cats_dogs_small_vgg16
包含我們的執行指令碼。只有一個檔案。
它的使用方法,我們後面會介紹。
先說說,你最關心的資料集上傳問題。
資料
解壓後目錄中的另一個資料夾,cats_and_dogs_small
,就包含了我們要使用和上傳的資料集。
如上圖所示,影像資料被分成了3類。
這也是 Keras 預設使用的影像資料分類標準規範。
開啟訓練集合 train
,下面包含兩個目錄,分別是“貓”和“狗”。
當你使用 Keras 的圖片處理工具時,擁有這樣的目錄結構,你就可以直接呼叫 ImageDataGenerator
下的flow_from_directory
功能,把目錄裡的圖片資料,直接轉化成為模型可以利用的張量(tensor)。
開啟 test
和 validation
目錄,你會看到的目錄結構和 train
相同。
請你先在 Russell Cloud 上建立自己的第一個資料集。
主頁上,點選“控制檯”按鈕。
在“資料集”欄目中選擇“建立資料集”。
如上圖,填寫資料集名稱為“cats_and_dogs_small
”。
這裡會出現資料集的 ID ,我們需要用它,將雲端的資料集,跟本地目錄連線起來。
回到終端下面,利用 cd
命令進入到解壓後資料夾的 cats_and_dogs_small
目錄下,執行:
russell data init --id 你的資料集ID
russell data upload
複製程式碼
請把上面“你的資料集ID”替換成你真正的資料集ID。
執行這兩條命令,資料就被上傳到了 Russell Cloud。
上傳成功後,回到 Russell Cloud 的資料集頁面,你可以看到“版本”標籤頁下面,出現了1個新生成的版本。
注意上圖右側,有一個“複製”按鈕,點選它,複製資料集該版本的 Token 。
一定要注意,是從這裡複製資訊,而不是資料集首頁的 ID 那裡。
之前因為搞錯了這個事兒,浪費了我很長時間。
執行
要執行你自己的深度學習程式碼,你需要在 Russell Cloud 上面,新建一個專案。
你得給專案起個名稱。
可以直接叫做 cats_dog_small_vgg16
。
其他項保持預設即可,點選“建立專案”。
出現下面這個頁面,就證明專案新建成功。
同樣,你需要把本地的程式碼資料夾,和剛剛新建的專案連線起來。
方法是這樣的:
複製上圖頁面的 ID 資訊。
回到終端下,利用 cd
命令進入到解壓後資料夾的 cats_dogs_small_vgg16
目錄下,執行:
russell init --id 你剛才複製的ID
複製程式碼
這樣,你在本地的修改,就可以被 Russell Cloud 記錄,並且更新任務執行配置了。
執行下面這條命令,你就可以利用 Russell Cloud 遠端的 GPU ,執行卷積神經網路訓練指令碼了。
russell run "python cats_dogs_small_vgg16_augmentation_freeze_russell.py" --gpu --data 92e239eca8e649928610d95d54bb3602:cats_and_dogs_small --env tensorflow-1.4
複製程式碼
解釋一下這條命令中的引數:
run
後面的引號包括部分,是實際執行的命令;gpu
是告訴 Russell Cloud,你選擇 GPU 執行環境,而不是 CPU;data
後面的數字串(冒號之前),是你剛剛生成的資料集版本的對應標識;冒號後面,是你給這個資料集掛載目錄起的名字。假設這裡掛載目錄名字叫“potato”,那麼在程式碼裡面,你的資料集位置就是“/input/potato”;env
是整合深度學習庫環境名稱。我們這裡指定的是 Tensorflow 1.4。更多選項,可以參考文件說明。
輸入上述命令後, Russell Cloud 就會把你的專案程式碼同步到雲端,然後根據你指定的引數執行程式碼。
你在本地,是看不到執行結果的。
你需要到網頁上,檢視“任務”下“執行日誌”,在系統提供的模擬終端下,檢視執行輸出結果。
為了把好不容易深度學習獲得的結果儲存下來,你需要用如下語句儲存模型:
saved_model = output_dir / `cats_and_dogs_small_finetune.h5`
model.save(saved_model)
複製程式碼
history.history
物件裡,包含了訓練過程中的一些評估資料,例如準確率(acc)和損失值(loss),也需要儲存。
這裡你可以採用 pickle
來完成:
import pickle
with open(Path(output_dir, `data.pickle`), `wb`) as f:
pickle.dump(history.history, f)
複製程式碼
細心的你,一定發現了上述程式碼中,出現了一個 output_dir
, 它的真實路徑是 output/
。
它是 Russell Cloud 為我們提供的預設輸出路徑。存在這裡面的資料,在執行結束後,也會在雲端儲存空間中儲存下來。
你可以在“任務記錄”的“輸出”專案下看到儲存的資料。它們已被儲存成為一個壓縮包。
下載下來並解壓後,你就可以享受雲端 GPU 的勞動果實了。
你可以用 history
儲存的內容繪圖,或者進一步載入訓練好的模型,對新的資料做分類。
改進
在實際使用Russell Cloud中,你可能會遇到一些問題。
我這裡把自己遇到的問題列出來,以免你踩進我踩過的坑。
首先,深度學習環境版本更新不夠及時。
本文寫作時 Tensorflow 穩定版本已經是 1.8 版,而 Russell Cloud 最高支援的版本依然只有 1.6。文件裡面的最高版本,更是還停留在 1.4。預設的 Keras,居然用的還是 Python 3.5 + Tensorflow 1.1。
注意千萬別直接用這個預設的 Keras ,否則 Python 3.6 後版本出現的一些優秀特性無法使用。例如你將 PosixPath 路徑(而非字串)作為檔案地址引數,傳入到一些函式中時,會報錯。那不是你程式碼的錯,是執行環境過於老舊。
其次,螢幕輸出內容過多的時候(例如我跑了 100 個 epoch, 每個顯示 100 條訓練進度),“執行日誌”網頁上模擬終端往下拉,就容易出現不響應的情況。變通的方法,是直接下載 log 檔案,閱讀和分析。
第三,Keras 和 Tensorflow 的許多程式碼庫(例如使用預訓練模型),都會自動呼叫下載功能,從 github 下載資料。但是,因為國內的伺服器到 github 之間連線不夠穩定,因此不時會出現無法下載,導致程式超時,異常退出。
上述問題,我都已經反饋給開發者團隊。對方已表示,會盡快加以解決。
如果你看到這篇文章時,上面這些坑都不存在了,那就再好不過了。
小結
本文為你推薦了一款國內 GPU 深度學習雲服務 Russell Cloud 。如果你更喜歡讀中文文件,沒有外幣信用卡,或是訪問 FloydHub 和 Google Colab 不是很順暢,都可以嘗試一下。
通過一個實際的深度學習模型訓練過程,我為你展示瞭如何把自己的資料集上傳到雲環境,並且在訓練過程中掛載和呼叫它。
你可以利用平臺贈送的 GPU 時間,跑一兩個自己的深度學習任務,並對比一下與本地 CPU 執行的差別。
喜歡請點贊。還可以微信關注和置頂我的公眾號“玉樹芝蘭”(nkwangshuyi)。
如果你對資料科學感興趣,不妨閱讀我的系列教程索引貼《如何高效入門資料科學?》,裡面還有更多的有趣問題及解法。