部署模型

本頁面說明如何將模型部署到 AI Platform 以取得預測資料。

如要將經過訓練的模型部署到 AI Platform,您必須:

  • 將儲存的模型上傳到 Cloud Storage 值區。
  • 建立 AI Platform 模型資源
  • 建立 AI Platform 版本資源,然後為已儲存的模型指定 Cloud Storage 路徑。

事前準備

訓練機器學習模型,然後按照匯出模型來進行預測的指南建立可部署至 AI Platform Prediction 的模型構件。

將模型儲存在 Cloud Storage 中

一般而言,最簡單的方法就是在用於 AI Platform 的同一個專案中使用專屬的 Cloud Storage 值區。

如果您使用的值區位於不同專案,則必須確定您的 AI Platform 服務帳戶可以存取 Cloud Storage 中的模型。如果沒有適當的權限,建立 AI Platform 模型版本的要求將會失敗。詳情請參閱授予儲存空間權限

設定 Cloud Storage 值區

本節說明如何建立新值區。您可以使用現有值區,但該值區必須位於您預計要執行 AI Platform 工作的相同地區。此外,如果該值區不屬於您用來執行 AI Platform 的專案,您就必須明確授予 AI Platform 服務帳戶的存取權

  1. 指定新值區的名稱。Cloud Storage 中所有值區的名稱皆不得重複。

    BUCKET_NAME="your_bucket_name"

    例如,使用您的專案名稱,並在後面附加 -mlengine

    PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    BUCKET_NAME=${PROJECT_ID}-mlengine
  2. 檢查您建立的值區名稱。

    echo $BUCKET_NAME
  3. 選取值區的地區,然後設定 REGION 環境變數。

    使用的地區必須與您預計要執行 AI Platform 工作的地區相同。請參閱 AI Platform 服務的可用地區

    例如,下列程式碼會建立 REGION 並設為 us-central1us-central1:

    REGION=us-central1
  4. 建立新值區:

    gsutil mb -l $REGION gs://$BUCKET_NAME

將匯出的模型上傳至 Cloud Storage

下列範例顯示了如何將不同類型的模型構件上傳至 Cloud Storage 中的模型目錄:

TensorFlow SavedModel

SAVED_MODEL_DIR=$(ls ./your-export-dir-base | tail -1)
gsutil cp -r $SAVED_MODEL_DIR gs://your-bucket

您從 tf.kerasTensorFlow Estimator 匯出 SavedModel 時,系統會將其儲存為所選基本匯出目錄的子目錄,並為其加上時間戳記,例如 your-export-dir-base/1487877383942。本範例顯示了如何上傳含有最新時間戳記的目錄。 如果您是透過不同的方式建立 SavedModel,該模型可能會在本機檔案系統中的其他位置。

scikit-learn 或 XGBoost 模型檔案

根據您匯出已訓練模型的方式,上傳 model.joblibmodel.pklmodel.bst 檔案。

以下範例顯示了如何上傳由 sklearn.externals.joblib 匯出的檔案:

gsutil cp ./model.joblib gs://your-bucket/model.joblib

以下範例顯示了如何上傳由 Python pickle 模組匯出的檔案:

gsutil cp ./model.pkl gs://your-bucket/model.pkl

以下範例顯示了如何上傳由 xgboost.Boostersave_model 方法匯出的檔案:

gsutil cp ./model.bst gs://your-bucket/model.bst

如果您部署的是自訂預測處理常式 (Beta 版),請一併將所有額外的模型構件上傳至模型目錄。

假如您使用的是舊版 (MLS1) 機器類型,則模型目錄的檔案總大小不得超過 500 MB;而如果是使用 Compute Engine (N1) 機器類型 (Beta 版),則模型目錄的檔案總大小不得超過 2 GB。進一步瞭解線上預測的機器類型

當您建立模型的後續版本時,請將每個版本分別放入 Cloud Storage 值區的專屬目錄以便管理。

上傳自訂程式碼

如果您部署的是含有自訂程式碼的 scikit-learn 管線自訂預測處理常式,則須一併上傳含有自訂程式碼的來源發行套件。例如:

gsutil cp dist/my_custom_code-0.1.tar.gz gs://your-bucket/my_custom_code-0.1.tar.gz

您可以自行選擇是否將這個 tarball 上傳至模型檔案所在的 Cloud Storage 目錄。事實上,將兩者分開放置可能更有利於管理,尤其是當您部署多個版本的模型和程式碼時。

使用本機預測來測試模型

在將模型部署到 AI Platform Prediction 之前,可先使用 gcloud ai-platform local predict 指令來測試模型提供預測的成效。這個指令會使用您本機環境中的依附元件來執行預測作業,並以 gcloud ai-platform predict 在執行線上預測時所用的相同格式傳回結果。在本機環境中測試預測可協助您在線上預測要求產生費用之前發現錯誤。

針對 --model-dir 引數,請在本機機器或 Cloud Storage 中指定含有已匯出機器學習模型的目錄。針對 --framework 引數,則請指定 tensorflowscikit-learnxgboost。不過請注意,您無法搭配使用 gcloud ai-platform local predict 指令和自訂預測處理常式

以下範例說明如何執行本機預測:

gcloud ai-platform local predict --model-dir local-or-cloud-storage-path-to-model-directory/ \
  --json-instances local-path-to-prediction-input.json \
  --framework name-of-framework

部署模型和版本

AI Platform 使用「模型」和「版本」資源來組織經過訓練的模型。在 AI Platform 中,模型是指存放機器學習模型各個版本的容器。

如要部署模型,請在 AI Platform 中建立模型資源、建立該模型的版本,然後將模型版本連結到儲存在 Cloud Storage 中的模型檔案。

建立模型資源

AI Platform 使用模型資源整理不同版本的模型。

主控台

  1. 在 GCP Console 中開啟 AI Platform「models」(模型) 頁面:

    在 GCP Console 中開啟「models」(模型)

  2. 視需求建立要加入新版本的模型:

    1. 按一下「Models」(模型) 頁面頂端的 [New Model] (新增模型) 按鈕。這會將您導向至「Create model」(建立模型) 頁面。

    2. 在「Model name」(模型名稱) 方塊中,輸入模型的專用名稱。 您也可以在「Description」(說明) 欄位中輸入模型的說明。

    3. 按一下 [Create] (建立)

    4. 確認您已返回「Models」(模型) 頁面,且您的新模型出現在清單中。

gcloud

為您的模型版本建立模型資源,並填入您想要的模型名稱 (不使用括號):

gcloud ai-platform models create "[YOUR-MODEL-NAME]"

REST API

  1. 模型物件放在要求主體中,以設定要求的格式。您必須至少指定模型名稱。 填入您想要的模型名稱 (不使用括號):

    {"name": "[YOUR-MODEL-NAME]"}
    
  2. 對下列路徑進行 REST API 呼叫,將 [VALUES_IN_BRACKETS] 取代為適當的值:

    POST https://ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/
    

    舉例來說,您可以使用 cURL 提出下列要求:

    curl -X POST -H "Content-Type: application/json" \
      -d '{"name": "[YOUR-MODEL-NAME]"}' \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      "https://ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models"
    

    畫面會顯示類似以下的輸出:

    {
      "name": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]",
      "regions": [
        "us-central1"
      ]
    }
    

詳情請參閱 AI Platform 模型 API

建立模型版本

現在您已準備好使用經過訓練且已上傳到 Cloud Storage 的模型來建立模型版本。建立版本時,請指定下列參數:

  • name:不得與 AI Platform 模型內的其他名稱重複。
  • deploymentUri:Cloud Storage 中的模型目錄路徑。

    • 如果您部署的是 TensorFlow 模型,這就是 SavedModel 目錄。
    • 如果您部署的是 scikit-learn 或 XGBoost 模型,則這是含有 model.joblibmodel.pklmodel.bst 檔案的目錄。
    • 如果您部署的是自訂預測處理常式,這就是含有所有模型構件的目錄。 這個目錄的總大小不得超過 500 MB
  • frameworkTENSORFLOWSCIKIT_LEARNXGBOOST。如果您部署的是自訂預測處理常式,請省略這項參數。

  • runtimeVersion:以模型所需依附元件為基礎的執行階段版本。如果您部署的是 scikit-learn 模型、XGBoost 模型或自訂預測處理常式,則須使用 1.4 以上版本。

  • packageUris (選用):Cloud Storage 中自訂程式碼發行套件 (.tar.gz 檔案) 的路徑清單。只有在部署含有自訂程式碼的 scikit-learn 管線 (Beta 版) 或自訂預測處理常式 (Beta 版) 時,您才需要提供這項參數。

  • predictionClass (選用):採用 module_name.class_name 格式的預測者類別名稱。只有在部署自訂預測處理常式 (Beta 版) 時,您才需要提供這項參數。

  • serviceAccount (選用):如果模型版本提供預測時會存取 GCP 資源,您可以為其指定要使用的服務帳戶。進一步瞭解如何指定服務帳戶。只有在部署自訂預測處理常式 (Beta 版) 時,您才需要提供這項參數。

  • pythonVersion:必須設為「3.5」,才能與透過 Python 3 匯出的模型檔案相容。如果沒有設定,系統預設為「2.7」。

  • machineType (選用):AI Platform Prediction 用於提供預測的節點的虛擬機器類型。進一步瞭解機器類型。如果沒有設定,系統預設值為 mls1-c1-m2

如要進一步瞭解每個參數,請參閱版本資源適用的 AI Platform Training and Prediction API 相關說明。

請參閱每個執行階段版本的完整詳細資料

主控台

  1. 在「Models」(模型) 頁面上,選取您要用來建立版本的模型資源名稱。這會將您導向至「Model Details」(模型詳細資料) 頁面。

    在 GCP Console 中開啟「models」(模型)

  2. 按一下「Model Details」(模型詳細資料) 頁面頂端的 [New Version] (新增版本) 按鈕。這會將您導向至「Create version」(建立版本) 頁面。

  3. 在「Name」(名稱) 欄位中輸入版本名稱。您也可以在「Description」(說明) 欄位中輸入版本的說明。

  4. 將下列關於如何訓練模型的資訊輸入到對應的下拉式方塊中:

    • 選取您用來訓練模型的「Python version」(Python 版本)
    • 選取「Framework」(架構) 和「Framework version」(架構版本)。 如果您部署的是自訂預測處理常式 (Beta 版),請在「Framework」(架構) 中選取 [Custom prediction routine (BETA)] (自訂預測處理常式 (BETA 版))。
    • 選取「ML runtime version」(ML 執行階段版本)。進一步瞭解 AI Platform 執行階段版本
  5. 您也可以選取要執行線上預測的「Machine type」(機器類型)。這個欄位預設為「Single core CPU」(單核心 CPU)。

  6. 在「Model URI」(模型 URI) 欄位中,輸入您上傳模型檔案時使用的 Cloud Storage 值區位置。您可以使用「Browse」(瀏覽) 按鈕尋找正確路徑。

    請務必指定含有模型檔案的「目錄」路徑,而「非」該檔案本身的路徑。 例如,使用 gs://your_bucket_name/model-dir/ 而不是 gs://your_bucket_name/model-dir/saved_model.pbgs://your_bucket_name/model-dir/model.pkl

  7. 如果您部署的是含有自訂程式碼的 scikit-learn 管線 (Beta 版)自訂預測處理常式 (Beta 版),請在「Custom code and dependencies」(自訂程式碼和依附元件) 下方提供所有自訂程式碼套件 (.tar.gz) 的 Cloud Storage 路徑。如果您部署的是自訂預測處理常式,請在「Prediction class」(預測類別) 欄位中輸入預測者類別的名稱。

  8. 為線上預測部署作業選取「Scaling」(資源調度) 選項:

    • 如果您選取 [Auto scaling] (自動調整資源配置),系統隨即會顯示選填的「Minimum number of nodes」(節點數量下限) 欄位。您可以輸入在調降服務資源配置時,隨時保持運作狀態的節點數量下限。這個欄位預設為 0。

    • 如果您選取 [Manual scaling] (手動調整資源配置),則必須輸入您要隨時保持運作的「Number of nodes」(節點數量)。

      進一步瞭解預測費用的計費方式

  9. 如要完成模型版本建立程序,請按一下 [Save] (儲存)

gcloud

  1. 設定環境變數,以儲存您的模型二進位檔所在的 Cloud Storage 目錄路徑、您的模型名稱、版本名稱以及架構選項。

    當您透過 gcloud 工具建立版本時,可使用含底線的大寫字母 (例如 SCIKIT_LEARN),或是含連字號的小寫英文字母 (例如 scikit-learn) 來提供架構名稱。這兩種做法會導致完全一致的行為結果。

    [VALUES_IN_BRACKETS] 替換為適當的值:

    MODEL_DIR="gs://your_bucket_name/"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    MODEL_NAME="[YOUR-MODEL-NAME]"
    FRAMEWORK="[YOUR-FRAMEWORK_NAME]"
    

    如果是含有自訂程式碼的 scikit-learn 管線 (Beta 版),請使用自訂程式碼 tarball 的路徑來設定其他變數:

    MODEL_DIR="gs://your_bucket_name/"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    MODEL_NAME="[YOUR-MODEL-NAME]"
    FRAMEWORK="scikit-learn"
    CUSTOM_CODE_PATH="gs://your_bucket_name/my_custom_code-0.1.tar.gz"
    

    如果是自訂預測處理常式 (Beta 版),請省略 FRAMEWORK 變數,並使用自訂程式碼 tarball 的路徑和預測者類別的名稱來設定其他變數:

    MODEL_DIR="gs://your_bucket_name/"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    MODEL_NAME="[YOUR-MODEL-NAME]"
    CUSTOM_CODE_PATH="gs://your_bucket_name/my_custom_code-0.1.tar.gz"
    PREDICTOR_CLASS="[MODULE_NAME].[CLASS_NAME]"
    
  2. 建立版本:

    gcloud ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --origin $MODEL_DIR \
      --runtime-version=1.14 \
      --framework $FRAMEWORK \
      --python-version=3.5
    

    如果是含有自訂程式碼的 scikit-learn 管線 (Beta 版),請務必使用 gcloud beta 元件並設定 --package-uris 標記:

    gcloud components install beta
    
    gcloud beta ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --origin $MODEL_DIR \
      --runtime-version=1.14 \
      --framework $FRAMEWORK \
      --python-version=3.5
      --package-uris=$CUSTOM_CODE_PATH
    

    如果是自訂預測處理常式 (Beta 版),請使用 gcloud beta 元件、省略 --framework 標記,並設定 --package-uris--prediction-class 標記:

    gcloud components install beta
    
    gcloud beta ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --origin $MODEL_DIR \
      --runtime-version=1.14 \
      --python-version=3.5
      --package-uris=$CUSTOM_CODE_PATH
      --prediction-class=$PREDICTOR_CLASS
    

    建立版本需要幾分鐘的時間。完成後,畫面會顯示以下輸出:

    Creating version (this might take a few minutes)......done.

  3. 取得新版本的相關資訊:

    gcloud ai-platform versions describe $VERSION_NAME \
      --model $MODEL_NAME
    

    畫面會顯示類似以下的輸出:

    createTime: '2018-02-28T16:30:45Z'
    deploymentUri: gs://your_bucket_name
    framework: [YOUR-FRAMEWORK-NAME]
    machineType: mls1-c1-m2
    name: projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]
    pythonVersion: '3.5'
    runtimeVersion: '1.14'
    state: READY

REST API

  1. 設定要求主體格式以包含版本物件。以下範例指定了版本的 namedeploymentUriruntimeVersionframework。請將 [VALUES_IN_BRACKETS] 替換為適當的值:

      {
        "name": "[YOUR-VERSION-NAME]",
        "deploymentUri": "gs://your_bucket_name/"
        "runtimeVersion": "1.14"
        "framework": "[YOUR_FRAMEWORK_NAME]"
        "pythonVersion": "3.5"
      }
    
  2. 對下列路徑進行 REST API 呼叫,將 [VALUES_IN_BRACKETS] 取代為適當的值:

      POST https://ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions
    

    舉例來說,您可以使用 cURL 提出下列要求:

        curl -X POST -H "Content-Type: application/json" \
          -d '{"name": "[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name/", "runtimeVersion": "1.14", "framework": "[YOUR_FRAMEWORK_NAME]", "pythonVersion": "3.5"}' \
          -H "Authorization: Bearer `gcloud auth print-access-token`" \
          "https://ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions"
    

    建立版本需要幾分鐘的時間。作業完成之後,您應該會看見與下列內容相似的輸出結果:

      {
        "name": "projects/[YOUR-PROJECT-ID]/operations/create_[YOUR-MODEL-NAME]_[YOUR-VERSION-NAME]-[TIMESTAMP]",
        "metadata": {
          "@type": "type.googleapis.com/google.cloud.ml.v1.OperationMetadata",
          "createTime": "2018-07-07T02:51:50Z",
          "operationType": "CREATE_VERSION",
          "modelName": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]",
          "version": {
            "name": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]",
            "deploymentUri": "gs://your_bucket_name",
            "createTime": "2018-07-07T02:51:49Z",
            "runtimeVersion": "1.14",
            "framework": "[YOUR_FRAMEWORK_NAME]",
            "machineType": "mls1-c1-m2",
            "pythonVersion": "3.5"
          }
        }
      }
    

為模型版本指定服務帳戶

根據預設,您部署的模型版本會具備 Google 代管服務帳戶的權限,而該帳戶會具備 Cloud 機器學習服務代理人身分與存取權管理角色。這個預設服務帳戶可以滿足大多數用途的需求。舉例來說,這個帳戶可以從同一 Google Cloud Platform 專案中的 Cloud Storage 值區讀取資料。

不過,如果您部署的是自訂預測處理常式,且模型版本必須具備另一組權限,您可以指定使用不同的服務帳戶。舉例來說,如果模型版本需要在預測期間存取不同 GCP 專案的 Cloud Storage 值區,您可以指定具備該值區讀取權限的服務帳戶。

  1. 為模型版本建立或選取服務帳戶。 您 (部署模型版本的使用者) 必須具備服務帳戶的服務帳戶憑證建立者角色

  2. 建立模型版本時,在 serviceAccount 欄位中指定服務帳戶名稱。如果您是使用 gcloud 工具部署模型,可以按照下列範例中的方式使用 --service-account 標記:

    gcloud components install beta
    
    gcloud beta ai-platform versions create your-version-name \
      --service-account your-service-account-name@your-project-id.iam.gserviceaccount.com
      ...
    

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Google Cloud Machine Learning 說明文件