昨天我們成功的讓 App 在本機端運作,但按下 開始預測!
後卻出現了錯誤:
這意味著雖然 App 試圖使用 ironbird/app.py
與 ironbird/utils.py
內的函式與 GCP 取得聯繫,但可能存在以下問題:
為了修正上述的問題,今天我們要準備完成的東西如下:
那就讓我們開始吧:
訓練模型並存為 SavedModel
格式 (這是針對 TensorFlow,若使用 Pytorch 就改為 state_dict
之類的即可),這部分詳細請參考 Colab model_training.ipynb 的說明。
有了 SavedModel
後,我們就可以把它傳到 Google Storage,但在此之前必須 建立 Google Storage 值區。
取一個喜歡的名字就好,儲存位置我是選擇 asia-east1 (台灣),但因為 Colab 的主機在美國,所以選擇 us- 開頭的也可以,這樣檔案的傳輸速度會快一點,剩下的選項就按照預設的即可 (詳細步驟可以參考上方超連結)。
有了值區之後就可以把模型複製到上面了,在 Colab 中我們會使用以下指令取得授權:
# Authentic Colab
# (Running this will give you a code to authentic your Google Colab instance, keep the verification code secret)
from google.colab import auth
auth.authenticate_user()
接著安裝 CLI 工具:
# Install and initialize the gcloud command line tool - https://cloud.google.com/sdk/docs/install
# (this will give you access to gcloud tools within Colab)
!curl https://sdk.cloud.google.com | bash 1> /dev/null
!gcloud init
最後就可以使用 !gsutil cp -r <YOUR_MODEL_PATH> <YOUR_GOOGLE_STORAGE_BUCKET>
把 SavedModel
上傳到值區。
執行這一步驟時,會被問很多與設定 gcloud 相關的問題,以下是會被問到的問題與我的回答 (請選擇自己的 Google Cloud project):
# Pick configuration to use:
# [1] Re-initialize this configuration [default] with new settings
# [2] Create a new configuration
# Please enter your numeric choice: 1
# Choose the account you would like to use to perform operations for
this configuration:
# [1] spacetime0311@gmail.com
# [2] Log in with a new account
# Please enter your numeric choice: 1
# Pick cloud project to use:
# [1] civic-capsule-327205
# [2] data-button-305900
# [3] first-haven-327205
# [4] ironman-327706
# [5] Create a new project
# Please enter numeric choice or text value (must exactly match list
# item): 4
以下為範例程式碼:
# Copy model to bucket - https://cloud.google.com/storage/docs/uploading-objects#gsutil
# Use "-r" for folders (r stands for recursive)
!gsutil cp -r efficientnet_model_1_10_classes gs://ironbird_2021
將值區內的模型連接到 AI Platform,這部分詳細一樣參考 官方文件:
區域我一樣選擇 asia-east1。
在 AI Platform 建立模型之後,我們需要建立版本並將其與現有模型連結。
這步驟首先需要在模型列表內點選剛剛建立的模型,然後再點選 新增版本
,以下為參考選項:
接著需要將這個版本與我們存放在 Google Storage 的模型連結:
最後資源的部分選擇 自動調整資源配置
以及最低的 n1-standard-2, 2 vCPUs, 7.5 GB memory
即可。
這部分會需要等待一段時間
接著需要建立服務帳戶,這樣才能得到模型的存取權,這部分一樣參考 官方文件 即可,其中最重要的步驟在於專案存取權的角色要選擇 AI 平台開發人員
:
有了服務帳戶之後,我們可以進入管理金鑰的頁面點選 新增金鑰
,並下載成 .JSON
檔存放於 ironbird 資料夾內。
⚠️ 金鑰會授與 GCP 帳號的存取權,所以務必不要分享給別人! (例如把
*.json
加到.gitignore
以避免傳到 Github 上)
最後需要修改以下變數:
app.py
內的 GCP 金鑰位址改為你的金鑰位址:
# Google Cloud Services look for these when your app runs
# Old
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "ironman-327706-ba995652161d.json"
# New
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "<PATH_TO_YOUR_KEY>"
app.py
內的 GCP project 與區域改為你的 GCP project 與區域:
# Old
PROJECT = "ironman-327706"
REGION = "asia-east1"
# New
PROJECT = "<YOUR_GCP_PROJECT_NAME>"
REGION = "<YOUR_GCP_REGION>"
注意這裡的 project 名稱要使用專案 IDutils.py
內的 "model_name"
改為前面建立的模型名稱:
# Old
classes_and_models = {
"model_1": {
"classes": base_classes,
"model_name": "ironbird_model_1"
}
}
# New
classes_and_models = {
"model_1": {
"classes": base_classes,
"model_name": "<YOUR_AI_PLATFORM_MODEL_NAME>"
}
}
完成上述所有步驟後,重新執行 開始預測!
應該就能得到結果了:
以上就是今天的內容啦,明天我們就可以把這個 App 部署到 Google App Engine 上,這樣就能在世界的任何角落使用我們的 App 啦~~