Hello 自訂訓練:透過自訂圖片分類模型提供預測結果

本頁面將逐步說明如何透過圖像分類模型提供預測結果,並在網頁應用程式中查看這些預測結果。

本教學課程包含多個頁面:

  1. 設定專案和環境。

  2. 訓練自訂圖片分類模型。

  3. 透過自訂圖片分類模型提供預測結果。

  4. 清除專案所用資源。

各頁面都假設您已完成教學課程先前頁面的操作說明。

本文的其餘部分假設您使用的是按照本教學課程第一頁建立的 Cloud Shell 環境。如果原始 Cloud Shell 工作階段已關閉,請按照下列步驟返回環境:

  1. 在 Google Cloud 控制台中啟用 Cloud Shell。

    啟用 Cloud Shell

  2. 在 Cloud Shell 工作階段中,執行下列指令:

    cd hello-custom-sample

建立端點

如要透過您在上一頁訓練的機器學習模型取得線上預測,請建立 Agent Platform 端點。端點會透過一或多個模型提供線上預測。

  1. 前往 Google Cloud 控制台的「Agent Platform」部分,然後前往「Models」頁面。

    前往「模型」

  2. 本教學課程的先前步驟中,找到您訓練的模型所在的列 hello_custom,然後點選模型名稱,開啟模型詳細資料頁面。

  3. 在「Deploy & test」(部署及測試) 分頁中,按一下「Deploy to endpoint」(部署至端點),開啟「Deploy to endpoint」(部署至端點) 窗格。

  4. 在「定義端點」步驟中,為端點新增一些基本資訊:

    1. 選取「建立新端點」

    2. 在「Endpoint name」(端點名稱) 欄位中輸入 hello_custom

    3. 在「模型設定」部分,確認您看到模型名稱 (也稱為 hello_custom)。指定下列模型設定:

      1. 在「流量分配」欄位中,輸入 100。Agent Platform 支援將端點的流量分配給多個模型,但本教學課程不會使用這項功能。

      2. 在「Minimum number of compute nodes」(運算節點數量下限) 欄位中,輸入 1

      3. 在「Machine type」(機器類型) 下拉式清單中,選取「Standard」(標準) 部分中的「n1-standard-2」

      4. 按一下 [完成]

    4. 在「記錄」部分,確認已啟用兩種預測記錄類型。

    按一下「繼續」

  5. 在「端點詳細資料」步驟中,確認端點將部署至 us-central1 (Iowa)

    請勿選取「使用客戶自行管理的加密金鑰 (CMEK)」核取方塊。 本教學課程不會使用 CMEK

  6. 按一下「Deploy」(部署),建立端點並將模型部署至端點。

幾分鐘後,「端點」表格中新端點旁會顯示 。同時,您也會收到電子郵件,指出您已成功建立端點,並將模型部署至端點。

部署 Cloud Run 函式

您可以向 Agent Platform API 的 REST 介面傳送要求,從剛建立的 Agent Platform 端點取得預測結果。不過,只有具備 aiplatform.endpoints.predict 權限的主體才能傳送線上預測要求。您無法將端點設為公開,供任何人傳送要求,例如透過網頁應用程式。

在本節中,請將程式碼部署至 Cloud Run functions,以處理未經驗證的要求。您在閱讀本教學課程的第一頁時下載的程式碼範例,包含 function/ 目錄中這個 Cloud Run 函式的程式碼。您也可以執行下列指令,查看 Cloud Run 函式程式碼:

less function/main.py

部署函式有下列用途:

  • 您可以設定 Cloud Run 函式,接收未經驗證的要求。此外,函式預設會使用具備「編輯者」角色的服務帳戶執行,該帳戶包含從 Agent Platform 端點取得預測結果所需的 aiplatform.endpoints.predict 權限。

  • 這項函式也會對要求執行實用的前置處理作業。Agent Platform 端點預期使用已訓練的 TensorFlow Keras 圖形第一層的格式來提供預測要求:具有固定維度的標準化浮點數張量。這個函式會將圖片網址視為輸入內容,並在要求 Agent Platform 端點的預測之前,將圖片預先處理為這個格式。

如要部署 Cloud Run 函式,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Agent Platform」部分,然後前往「Endpoints」頁面。

    前往「Endpoints」(端點) 頁面

  2. 找出您在前一節建立的端點列,名稱為 hello_custom。點選該列中的「Sample request」(要求範例),開啟「Sample request」(要求範例) 窗格。

  3. 在「Sample request」(範例要求) 窗格中,找出符合下列模式的殼層程式碼行:

    ENDPOINT_ID="ENDPOINT_ID"

    ENDPOINT_ID 是用於識別這個特定端點的數字。

    複製這行程式碼,並在 Cloud Shell 工作階段中執行,設定 ENDPOINT_ID 變數。

  4. 在 Cloud Shell 工作階段中執行下列指令,即可部署 Cloud Run 函式:

    gcloud functions deploy classify_flower \
      --region=us-central1 \
      --source=function \
      --runtime=python37 \
      --memory=2048MB \
      --trigger-http \
      --allow-unauthenticated \
      --set-env-vars=ENDPOINT_ID=${ENDPOINT_ID}
    

部署網頁應用程式來傳送預測要求

最後,在 Cloud Storage 中託管靜態網頁應用程式,透過訓練後的 ML 模型取得預測結果。網頁應用程式會將要求傳送至 Cloud Run 函式,後者會預先處理要求,並從 Agent Platform 端點取得預測結果。

您下載的程式碼範例 webapp 目錄包含範例網頁應用程式。在 Cloud Shell 工作階段中,執行下列指令來準備及部署網頁應用程式:

  1. 設定幾個殼層變數,供後續步驟中的指令使用:

    PROJECT_ID=PROJECT_ID
    BUCKET_NAME=BUCKET_NAME
    

    更改下列內容:

  2. 編輯應用程式,提供 Cloud Run 函式的觸發網址:

    echo "export const CLOUD_FUNCTION_URL = 'https://us-central1-${PROJECT_ID}.cloudfunctions.net/classify_flower';" \
      > webapp/function-url.js
    
  3. webapp 目錄上傳至 Cloud Storage bucket:

    gcloud storage cp webapp gs://${BUCKET_NAME}/ --recursive
    
  4. 將剛剛上傳的網頁應用程式檔案設為可公開讀取

    gcloud storage objects update gs://${BUCKET_NAME}/webapp/** --add-acl-grant=entity=allUsers,role=READER
    
  5. 您現在可以前往下列網址,開啟網頁應用程式並取得預測結果:

    https://storage.googleapis.com/BUCKET_NAME/webapp/index.html
    

    開啟網頁應用程式並按一下花卉圖片,即可查看機器學習模型的花卉類型分類。網頁應用程式會以花朵類型清單的形式呈現預測結果,以及這張圖片包含各個花朵類型的機率。

在下列螢幕截圖中,網頁應用程式已取得一項預測結果,並正在傳送另一項預測要求。

網頁應用程式,顯示四張加上標籤的花卉圖片。其中一個下方會顯示預測標籤的機率。另一個則在下方顯示載入列。

後續步驟

請按照本教學課程的最後一頁,清理您建立的資源。