iT邦幫忙

2021 iThome 鐵人賽

DAY 28
0
AI & Data

然後模型就死在 Jupyter Notebook 了 (ಥ﹏ಥ)系列 第 28

[Day 28] Final Project (4/5) — 部署模型到 Google AI Platform

前情提要

昨天我們成功的讓 App 在本機端運作,但按下 開始預測! 後卻出現了錯誤:
App crash

這意味著雖然 App 試圖使用 ironbird/app.pyironbird/utils.py 內的函式與 GCP 取得聯繫,但可能存在以下問題:

  • 找不到模型 (錯誤的 API 呼叫或模型不存在)
  • 因為認證問題而無法使用現有模型。

部署模型到 Google AI Platform

為了修正上述的問題,今天我們要準備完成的東西如下:

  • 訓練好的模型 (用於鳥類分類,會上傳到 Google Storage)。
  • Google Storage 的值區 (來存放訓練好的模型)。
  • 部署到 Google AI Platform 的模型 (會連接到存放於 Google Storage 值區的模型)。
  • 可讓我們存取模型的金鑰。

那就讓我們開始吧:

  1. 訓練模型並存為 SavedModel 格式 (這是針對 TensorFlow,若使用 Pytorch 就改為 state_dict 之類的即可),這部分詳細請參考 Colab model_training.ipynb 的說明。

  2. 有了 SavedModel 後,我們就可以把它傳到 Google Storage,但在此之前必須 建立 Google Storage 值區
    creating-buckets
    取一個喜歡的名字就好,儲存位置我是選擇 asia-east1 (台灣),但因為 Colab 的主機在美國,所以選擇 us- 開頭的也可以,這樣檔案的傳輸速度會快一點,剩下的選項就按照預設的即可 (詳細步驟可以參考上方超連結)。

  3. 有了值區之後就可以把模型複製到上面了,在 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
    
  4. 將值區內的模型連接到 AI Platform,這部分詳細一樣參考 官方文件
    create model
    區域我一樣選擇 asia-east1。

  5. 在 AI Platform 建立模型之後,我們需要建立版本並將其與現有模型連結。
    這步驟首先需要在模型列表內點選剛剛建立的模型,然後再點選 新增版本,以下為參考選項:
    create a model version

    接著需要將這個版本與我們存放在 Google Storage 的模型連結:
    link to Google Storage

    最後資源的部分選擇 自動調整資源配置 以及最低的 n1-standard-2, 2 vCPUs, 7.5 GB memory 即可。
    這部分會需要等待一段時間

  6. 接著需要建立服務帳戶,這樣才能得到模型的存取權,這部分一樣參考 官方文件 即可,其中最重要的步驟在於專案存取權的角色要選擇 AI 平台開發人員
    Create service account

  7. 有了服務帳戶之後,我們可以進入管理金鑰的頁面點選 新增金鑰,並下載成 .JSON 檔存放於 ironbird 資料夾內。
    service account keys

    ⚠️ 金鑰會授與 GCP 帳號的存取權,所以務必不要分享給別人! (例如把 *.json 加到 .gitignore 以避免傳到 Github 上)

  8. 最後需要修改以下變數:

    • 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 名稱要使用專案 ID
      project id
    • utils.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>" 
         }
      }
      
  9. 完成上述所有步驟後,重新執行 開始預測! 應該就能得到結果了:
    success full

以上就是今天的內容啦,明天我們就可以把這個 App 部署到 Google App Engine 上,這樣就能在世界的任何角落使用我們的 App 啦~~
/images/emoticon/emoticon27.gif


上一篇
[Day 27] Final Project (3/5) — 讓 App 在本機端運行
下一篇
[Day 29] Final Project (5/5) — 部署 App 到 Google App Engine
系列文
然後模型就死在 Jupyter Notebook 了 (ಥ﹏ಥ)30

尚未有邦友留言

立即登入留言