使用GCP訓練、監測和部署ML模型
主旨:了解如何在GCP訓練、監測和部署ML模型
為何要使用 Cloud AI Platform?
當處理一般的簡單問題,或者資料量很小的時候,在自己的電腦上面運行當然就足夠了,但是當我們考量到商業化的應用場景時,隨著資料量的增大、模型的複雜化,批次訓練和分散式訓練就變得很重要了。
而隨著模型的複雜化,模型架構、超參數都是需要去尋找一個比較適當值的部分,然而這種搜尋一次一次手動太慢了,我們也需要一個可以自動幫我們搜索的方式。
最後就是訓練和預測資料的預處理,也需要可以有一致性的規則,否則預測的結果就沒法如同訓練時有一致的表現。
綜合以上的原因,就是為什麼要在GCP上訓練、監測和部署ML模型。
在GCP上訓練ML模型
在開始訓練模型前,第一步要先做好的就是清理資料、特徵工程,接著才是把要訓練的資料送進雲端做訓練,而在GCP上訓練ML模型簡單可分成三個步驟:
- 使用TensorFlow建造計算圖和訓練應用
- 包裝(package)你的訓練應用程式
- 設定並開始Cloud AI Engine的工作
包裝訓練應用程式的時候有兩個重要的檔案:task.py 和 model.py。
task.py是用來將job的細節,包含如何傳入命令參數、運行多長時間、在何處輸出、如何與超參數調整進行交互等等。
model.py則是主要ML的任務,包含提取資料、定義特徵、配置服務簽名,當然還有實際的訓練和評估步驟。
下圖是一般在雲端包裝訓練應用的程式架構:
包裝好的後,可以先在本機測試一下,指令如下:
確定沒問題後,就可以上傳到GCP,並在GCP上的機器測試是否也沒問題:
傳上雲端後,接著就是準備要規模化的生產、服務了,GCP上的規模等級比較基本的有4種:
- Basic
- Standard
- Basic GPU
- Basic TPU
另外一個小地方就是,當你選擇GCP儲存的bucket時,盡量選在單一區域,這樣對ML的工作表現會比較好,選擇多區域的話是比較適合用在web服務應用。
[GCP Lab實作-10]:使用 Cloud AI Platform 規模化 TensorFlow
在這個實作中,我們將學會:
- 如何包裝一個 TensorFlow 模型並在 Cloud AI Platform 上運行
[Part 1]:使用 Cloud AI Platform 規模化 TensorFlow
-
登入GCP,開啟Notebooks後,複製課程 Github repo (如Day9的Part 1 & 2步驟)。
-
在左邊的資料夾結構,點進 training-data-analyst > courses > machine_learning > deepdive > 03_tensorflow,然後打開檔案 e_ai_platform.ipynb。
-
一開始先將所有的環境變數設定好,包含project、bucket、region...等等的名稱。
- 取好後接著設定GCP的project和region名稱。
- 因為在GCP上訓練模型的話需要一個地方提供模型的存放與讀取,所以我們開設一個bucket來做存取的地方。
- 接著授權 Cloud AI Platform 有權限可以存取這個bucket。
- 再來看一下我們已經準備好要包裝的程式結構如下:
- 因為要先在本機端試跑看看程式有沒有問題,所以先將以前訓練的結果刪除(要注意這邊講的"本機"其實是在GCP上面運行的VM,不是一般指的自己的電腦歐!)。
- 開始執行本機端的模型訓練。
- 訓練完後我們簡單寫一個 test.json 檔案做預測,可以看到預測的計程車費約為11.41。
- 再來我們要用 gcloud 指令在本機端訓練,所以一樣先把剛剛的訓練結果刪掉。
- 這次用gcloud 指令在本機端訓練。
- 訓練的結果路徑含有下面這些檔案:
- 接著要模擬使用 Cloud AI Platform 來進行訓練了,首先先將訓練資料 csv 傳進bucket儲存。
- 再來就是傳送遠端 job開始訓練模型:
- 使用傳送 job 給 Cloud AI Platform 來進行訓練完後,模型存在bucket下(和剛剛本機端的訓練結果路徑是不同的):
- 接著準備部署遠端訓練好的模型,一開始先刪除前一次訓練的版本資訊(如果是全新訓練的模型就不需要這步)。
- 刪除版本資訊後就是刪除前一版的模型(如果是全新訓練的模型就不需要這步)。
- 部署新的模型:
- 新增新模型的版本資訊,版本號會放在 export/exporter 下:
- 試試看預測的值,車費約是11.27。
- 若是要使用REST API的形式做預測也可以,程式碼如下,這樣傳回來的預測結果就會是JSON的形式:
今天介紹了使用GCP訓練、監測和部署ML模型,也是這個系列子課程的結束,明天我們將開始第四個子課程Feature Engineering。