監控特徵偏差和偏移

本頁面說明如何建立、管理及解讀模型監控工作的結果,這些工作適用於部署至線上預測端點的模型。Gemini Enterprise Agent Platform Model Monitoring 支援類別和數值輸入特徵的特徵扭曲和偏移偵測。

在正式環境中部署模型並啟用模型監控功能後,系統會將傳入的預測要求記錄在 Google Cloud 專案的 BigQuery 資料表中。接著,系統會分析記錄要求中包含的輸入特徵值,找出偏誤或偏移。

如果您為模型提供原始訓練資料集,可以啟用偏差偵測功能,否則應啟用偏移偵測功能。詳情請參閱「Gemini Enterprise Agent Platform Model Monitoring 簡介」。

必要條件

如要使用 Model Monitoring,請完成下列步驟:

  1. 在 Agent Platform 中有可用的模型,類型為表格 AutoML 或匯入的表格自訂訓練。

    • 如果使用現有端點,請確認部署在端點下的所有模型,都是表格 AutoML 或匯入的自訂訓練類型。
  2. 如要啟用偏移偵測功能,請將訓練資料上傳至 Cloud Storage 或 BigQuery,並取得資料的 URI 連結。如要偵測偏移,則不需要訓練資料。

  3. 選用:如果是自訂訓練模型,請將模型的分析執行個體結構定義上傳至 Cloud Storage。Model Monitoring 必須有結構定義,才能開始監控程序,並計算基準分布情形,以便偵測偏差。如未在建立工作時提供結構定義,工作會維持在待處理狀態,直到模型監控功能從模型收到的前 1, 000 個預測要求中,自動剖析結構定義為止。

建立模型監控工作

如要設定偏差偵測或偏移偵測,請建立模型部署監控工作:

控制台

如要使用 Google Cloud 控制台建立模型部署監控工作,請建立端點:

  1. 前往 Google Cloud 控制台的「Agent Platform Endpoints」頁面。

    前往「Endpoints」

  2. 按一下「Create Endpoint」(建立端點)。

  3. 在「New endpoint」(新增端點) 窗格中,為端點命名並設定區域。

  4. 按一下「繼續」。

  5. 在「Model name」(模型名稱) 欄位中,選取匯入的自訂訓練或表格 AutoML 模型。

  6. 在「Version」(版本) 欄位中,選取模型版本。

  7. 按一下「繼續」。

  8. 在「Model monitoring」(模型監控) 窗格中,確認「Enable model monitoring for this endpoint」(為這個端點啟用模型監控功能) 已開啟。您設定的任何監控設定,都會套用至部署到端點的所有模型。

  9. 輸入監控工作顯示名稱。

  10. 輸入監控期間長度。

  11. 在「Notification emails」(通知電子郵件) 部分,輸入一或多個以半形逗號分隔的電子郵件地址,以便在模型超過快訊門檻時收到通知。

  12. (選用) 在「Notification channels」(通知管道) 部分,新增 Cloud Monitoring 管道,以便在模型超過警告門檻時接收快訊。您可以選取現有的 Cloud Monitoring 管道,或按一下「Manage notification channels」(管理通知管道) 建立新管道。控制台支援 PagerDuty、Slack 和 Pub/Sub 通知管道。

  13. 輸入取樣率。

  14. 選用:輸入「預測輸入結構定義」和「分析輸入結構定義」。

  15. 按一下「繼續」。「Monitoring objective」(監控目標) 窗格隨即開啟,其中包含偏誤或偏移偵測選項:

    偵測偏斜

    1. 選取「訓練/應用偏差偵測」。
    2. 在「Training data source」(訓練資料來源) 下方,提供訓練資料來源。
    3. 在「Target column」(目標欄) 下方,輸入訓練資料中的資料欄名稱 (訓練後的模型會預測這些訓練資料)。監控分析會排除這個欄位。
    4. 選用:在「Alert thresholds」(警告門檻) 下方,指定觸發警告的門檻。如要瞭解如何設定門檻格式,請將指標懸停在 「Help」(說明) 圖示上。
    5. 點選「建立」。

    偏移偵測

    1. 選取「Prediction drift detection」(預測偏移偵測)。
    2. 選用:在「Alert thresholds」(警告門檻) 下方,指定觸發警告的門檻。如要瞭解如何設定門檻格式,請將指標懸停在 「Help」(說明) 圖示上。
    3. 點選「建立」。

gcloud

如要使用 gcloud CLI 建立模型部署監控工作,請先將模型部署至端點:

監控工作設定適用於端點下所有已部署的模型。

執行 gcloud ai model-monitoring-jobs create 指令。

gcloud ai model-monitoring-jobs create \
  --project=PROJECT_ID \
  --region=REGION \
  --display-name=MONITORING_JOB_NAME \
  --emails=EMAIL_ADDRESS_1,EMAIL_ADDRESS_2 \
  --endpoint=ENDPOINT_ID \
  [--feature-thresholds=FEATURE_1=THRESHOLD_1, FEATURE_2=THRESHOLD_2] \
  [--prediction-sampling-rate=SAMPLING_RATE] \
  [--monitoring-frequency=MONITORING_FREQUENCY] \
  [--analysis-instance-schema=ANALYSIS_INSTANCE_SCHEMA] \
  --target-field=TARGET_FIELD \
  --bigquery-uri=BIGQUERY_URI

其中:

  • PROJECT_ID 是 Google Cloud 專案的 ID。例如:my-project。

  • REGION 是監控工作的所在位置。例如:us-central1。

  • MONITORING_JOB_NAME 是監控工作的名稱。例如:my-job。

  • EMAIL_ADDRESS 是您要接收 Model Monitoring 快訊的電子郵件地址。例如:example@example.com。

  • ENDPOINT_ID 是部署模型的端點 ID。例如:1234567890987654321。

  • 選用:FEATURE_1=THRESHOLD_1 是要監控的各項特徵警告門檻。舉例來說,如果您指定 Age=0.4,當 Age 特徵的輸入和基準分布之間的統計距離超過 0.4 時,Model Monitoring 就會記錄快訊。根據預設,系統會以 0.3 的門檻值監控每個類別和數值特徵。

  • 選用:SAMPLING_RATE 是要記錄的傳入預測要求比例。例如,0.5。如未指定,Model Monitoring 會記錄所有預測要求。

  • 選用:MONITORING_FREQUENCY 是監控工作對最近記錄的輸入內容執行的頻率。最小精細程度為 1 小時。預設值為 24 小時。例如:2。

  • 選用:ANALYSIS_INSTANCE_SCHEMA 是結構定義檔案的 Cloud Storage URI,用於描述輸入資料的格式。例如:gs://test-bucket/schema.yaml。

  • (僅限偏誤偵測) TARGET_FIELD 是模型預測的欄位。監控分析會排除這個欄位。例如:housing-price。

  • (僅限偏誤偵測) BIGQUERY_URI 是儲存在 BigQuery 中的訓練資料集連結,格式如下:

    bq://\PROJECT.\DATASET.\TABLE
    

    例如 bq://\my-project.\housing-data.\san-francisco。

    您可以使用訓練資料集的替代連結,取代 bigquery-uri 旗標:

    • 如果是儲存在 Cloud Storage bucket 中的 CSV 檔案,請使用 --data-format=csv --gcs-uris=gs://BUCKET_NAME/OBJECT_NAME。

    • 如果 TFRecord 檔案儲存在 Cloud Storage bucket,請使用 --data-format=tf-record --gcs-uris=gs://BUCKET_NAME/OBJECT_NAME。

    • 如果是表格 AutoML 代管資料集,請使用 --dataset=DATASET_ID。

Python SDK

如要瞭解完整的端對端 Model Monitoring API 工作流程,請參閱筆記本範例。

REST API

  1. 如果尚未將模型部署至端點,請先完成這項操作。在模型部署操作說明中的「取得端點 ID」步驟,請記下 JSON 回應中的 deployedModels.id 值,以便日後使用:

  2. 建立模型監控工作要求。以下操作說明將示範如何建立基本的監控工作,以便偵測偏移。如要自訂 JSON 要求,請參閱監控工作參考資料。

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT_ID: Google Cloud 專案的 ID。例如:my-project。
    • LOCATION:監控工作的所在位置。例如:us-central1。
    • MONITORING_JOB_NAME:監控工作的名稱。例如 my-job。
    • PROJECT_NUMBER: Google Cloud 專案的編號。例如:1234567890。
    • ENDPOINT_ID 是模型部署目標端點的 ID。例如 1234567890。
    • DEPLOYED_MODEL_ID:已部署模型的 ID。
    • FEATURE:VALUE 是要監控的各項特徵的警告門檻。舉例來說,如果您指定 "Age": {"value": 0.4},當 Age 特徵的輸入和基準分布之間的統計距離超過 0.4 時,Model Monitoring 就會記錄快訊。根據預設,系統會監控每個類別和數值特徵,門檻值為 0.3。
    • EMAIL_ADDRESS:您要接收模型監控快訊的電子郵件地址。例如:example@example.com。
    • NOTIFICATION_CHANNELS:Cloud Monitoring 通知管道清單,用於接收模型監控快訊。請使用通知管道的資源名稱,您可以列出專案中的通知管道來擷取這些名稱。例如:"projects/my-project/notificationChannels/1355376463305411567", "projects/my-project/notificationChannels/1355376463305411568"。
    • 選用:ANALYSIS_INSTANCE_SCHEMA 是結構定義檔案的 Cloud Storage URI,用於描述輸入資料的格式。例如:gs://test-bucket/schema.yaml。

    JSON 要求內文:

    {
      "displayName":"MONITORING_JOB_NAME",
      "endpoint":"projects/PROJECT_NUMBER/locations/LOCATION/endpoints/ENDPOINT_ID",
      "modelDeploymentMonitoringObjectiveConfigs": {
         "deployedModelId": "DEPLOYED_MODEL_ID",
         "objectiveConfig":  {
            "predictionDriftDetectionConfig": {
                "driftThresholds": {
                  "FEATURE_1": {
                    "value": VALUE_1
                   },
                  "FEATURE_2": {
                    "value": VALUE_2
                   }
                }
             },
          },
      },
      "loggingSamplingStrategy": {
         "randomSampleConfig":  {
            "sampleRate":  0.5,
         },
      },
      "modelDeploymentMonitoringScheduleConfig": {
         "monitorInterval": {
            "seconds": 3600,
         },
      },
      "modelMonitoringAlertConfig": {
         "emailAlertConfig": {
            "userEmails": ["EMAIL_ADDRESS"],
         },
         "notificationChannels": [NOTIFICATION_CHANNELS]
      },
      "analysisInstanceSchemaUri": ANALYSIS_INSTANCE_SCHEMA
    }
    

    請展開以下其中一個選項,以傳送要求:

    您應該會收到如下的 JSON 回覆:

    {
      "name": "projects/PROJECT_NUMBER/locations/LOCATION/modelDeploymentMonitoringJobs/MONITORING_JOB_NUMBER",
      ...
      "state": "JOB_STATE_PENDING",
      "scheduleState": "OFFLINE",
      ...
      "bigqueryTables": [
        {
          "logSource": "SERVING",
          "logType": "PREDICT",
          "bigqueryTablePath": "bq://PROJECT_ID.model_deployment_monitoring_8451189418714202112.serving_predict"
        }
      ],
      ...
    }
    

建立監控工作後,Model Monitoring 會將傳入的預測要求記錄在產生的 BigQuery 資料表中,名為 PROJECT_ID.model_deployment_monitoring_ENDPOINT_ID.serving_predict。如果啟用要求/回應記錄功能,Model Monitoring 會將傳入的要求記錄在用於要求/回應記錄的同一個 BigQuery 資料表中。

(選用) 設定模型監控工作的警告

您能藉由快訊來監控及偵錯 Model Monitoring 工作。Model Monitoring 會透過電子郵件自動通知工作的最新消息,但您也可以自行使用 Cloud Logging 和 Cloud Monitoring 通知管道設定快訊。

電子郵件

發生下列事件時,Model Monitoring 會傳送電子郵件通知,給您在建立 Model Monitoring 工作時指定的每個電子郵件地址:

  • 每次設定時間偏差或偏移偵測時。
  • 每次更新現有的模型監控工作設定時。
  • 每次排定的監控管道執行作業失敗時。

Cloud Logging

如要啟用排定監控管道執行的記錄,請將 modelDeploymentMonitoringJobs 設定中的 enableMonitoringPipelineLogs 欄位設為 true。設定監控工作時,以及在每個監控間隔,偵錯記錄檔都會寫入 Cloud Logging。

偵錯記錄檔會寫入 Cloud Logging,記錄檔名稱為 model_monitoring。例如:

logName="projects/model-monitoring-demo/logs/aiplatform.googleapis.com%2Fmodel_monitoring" resource.labels.model_deployment_monitoring_job=6680511704087920640

以下是工作進度記錄項目的範例:

{
"insertId": "e2032791-acb9-4d0f-ac73-89a38788ccf3@a1",
"jsonPayload": {
  "@type": "type.googleapis.com/google.cloud.aiplatform.logging.ModelMonitoringPipelineLogEntry",
  "statusCode": {
    "message": "Scheduled model monitoring pipeline finished successfully for job projects/677687165274/locations/us-central1/modelDeploymentMonitoringJobs/6680511704087920640"
  },
  "modelDeploymentMonitoringJob": "projects/677687165274/locations/us-central1/modelDeploymentMonitoringJobs/6680511704087920640"
},
"resource": {
  "type": "aiplatform.googleapis.com/ModelDeploymentMonitoringJob",
  "labels": {
    "model_deployment_monitoring_job": "6680511704087920640",
    "location": "us-central1",
    "resource_container": "projects/677687165274"
  }
},
"timestamp": "2022-02-04T15:33:54.778883Z",
"severity": "INFO",
"logName": "projects/model-monitoring-demo/logs/staging-aiplatform.sandbox.googleapis.com%2Fmodel_monitoring",
"receiveTimestamp": "2022-02-04T15:33:56.343298321Z"
}

通知管道

每當排定的監控管道執行失敗時,Model Monitoring 就會傳送通知到您建立 Model Monitoring 工作時指定的 Cloud Monitoring 通知管道。

設定特徵異常快訊

如果特徵超過設定的門檻,Model Monitoring 就會偵測到異常狀況。Model Monitoring 會透過電子郵件自動通知您偵測到的異常狀況,但您也可以透過 Cloud Logging 和 Cloud Monitoring 通知管道設定快訊。

電子郵件

在每個監控時間間隔,如果至少有一個特徵超過門檻,Model Monitoring 就會傳送電子郵件快訊,給您在建立 Model Monitoring 工作時指定的每個電子郵件地址。電子郵件訊息包含下列內容:

  • 監控工作的執行時間。
  • 有偏差或偏移的特徵名稱。
  • 警示門檻和記錄的統計距離測量值。

Cloud Logging

如要啟用 Cloud Logging 警告,請將 ModelMonitoringAlertConfig 設定的 enableLogging 欄位設為 true。

在每個監控間隔,如果至少有一項特徵的分佈超過該特徵的門檻,系統就會將異常記錄寫入 Cloud Logging。您可以將記錄轉送至 Cloud Logging 支援的任何服務,例如 Pub/Sub。

異常狀況會寫入 Cloud Logging,記錄檔名稱為 model_monitoring_anomaly。例如:

logName="projects/model-monitoring-demo/logs/aiplatform.googleapis.com%2Fmodel_monitoring_anomaly" resource.labels.model_deployment_monitoring_job=6680511704087920640

以下是異常記錄項目的範例:

{
"insertId": "b0e9c0e9-0979-4aff-a5d3-4c0912469f9a@a1",
"jsonPayload": {
  "anomalyObjective": "RAW_FEATURE_SKEW",
  "endTime": "2022-02-03T19:00:00Z",
  "featureAnomalies": [
    {
      "featureDisplayName": "age",
      "deviation": 0.9,
      "threshold": 0.7
    },
    {
      "featureDisplayName": "education",
      "deviation": 0.6,
      "threshold": 0.3
    }
  ],
  "totalAnomaliesCount": 2,
  "@type": "type.googleapis.com/google.cloud.aiplatform.logging.ModelMonitoringAnomaliesLogEntry",
  "startTime": "2022-02-03T18:00:00Z",
  "modelDeploymentMonitoringJob": "projects/677687165274/locations/us-central1/modelDeploymentMonitoringJobs/6680511704087920640",
  "deployedModelId": "1645828169292316672"
},
"resource": {
  "type": "aiplatform.googleapis.com/ModelDeploymentMonitoringJob",
  "labels": {
    "model_deployment_monitoring_job": "6680511704087920640",
    "location": "us-central1",
    "resource_container": "projects/677687165274"
  }
},
"timestamp": "2022-02-03T19:00:00Z",
"severity": "WARNING",
"logName": "projects/model-monitoring-demo/logs/staging-aiplatform.sandbox.googleapis.com%2Fmodel_monitoring_anomaly",
"receiveTimestamp": "2022-02-03T19:59:52.121398388Z"
}

通知管道

在每個監控間隔,如果至少有一個特徵超過門檻,Model Monitoring 就會傳送快訊,到您建立 Model Monitoring 工作時指定的 Cloud Monitoring 通知管道。快訊會提供觸發快訊的模型監控工作相關資訊。

更新模型監控工作

您可以查看、更新、暫停及刪除模型監控工作。必須先暫停工作,才能刪除。

控制台

Google Cloud 控制台不支援暫停和刪除作業,請改用 gcloud CLI。

如要更新模型監控工作的參數,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Agent Platform Endpoints」頁面。

    前往「Endpoints」

  2. 按一下要編輯的端點名稱。

  3. 按一下「編輯設定」。

  4. 在「Edit endpoint」(編輯端點) 窗格中,選取「Model monitoring」(模型監控) 或「Monitoring objectives」(監控目標)。

  5. 更新要變更的欄位。

  6. 按一下「Update」。

如要查看模型的指標、警告和監控屬性,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Agent Platform Endpoints」頁面。

    前往「Endpoints」

  2. 按一下端點名稱。

  3. 在要查看的模型「Monitoring」(監控) 欄中,按一下「Enabled」(已啟用)。

gcloud

執行下列指令:

gcloud ai model-monitoring-jobs COMMAND MONITORING_JOB_ID \
  --PARAMETER=VALUE --project=PROJECT_ID --region=LOCATION

其中:

  • COMMAND 是您要對監控工作執行的指令。例如:update、pause、resume 或 delete。詳情請參閱 gcloud CLI 參考資料。

  • MONITORING_JOB_ID 是監控工作的 ID。例如:123456789。如要找出 ID,請擷取端點資訊,或在 Google Cloud 控制台查看模型的監控屬性。ID 包含在監控工作資源名稱中,格式為 projects/PROJECT_NUMBER/locations/LOCATION/modelDeploymentMonitoringJobs/MONITORING_JOB_ID。

  • (選用) PARAMETER=VALUE 是要更新的參數。只有在使用 update 指令時,才需要這個旗標。例如:monitoring-frequency=2。如需可更新的參數清單,請參閱 gcloud CLI 參考資料。

  • PROJECT_ID 是 Google Cloud 專案的 ID。例如:my-project。

  • LOCATION 是監控工作的所在位置。例如:us-central1。

REST API

暫停工作

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_NUMBER: Google Cloud 專案的編號。例如:1234567890。
  • LOCATION::監控工作的所在位置。例如:us-central1。
  • MONITORING_JOB_ID:監控工作的 ID。例如 0987654321。

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{}

刪除工作

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_NUMBER: Google Cloud 專案的編號。例如:my-project。
  • LOCATION::監控工作的所在位置。例如:us-central1。
  • MONITORING_JOB_ID:監控工作的 ID。例如 0987654321。

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/MONITORING_JOB_ID",
  ...
  "done": true,
  ...
}

分析偏誤和偏移資料

您可以使用 Google Cloud 控制台,以視覺化方式呈現各項受監控特徵的分佈情形,並瞭解哪些變更會導致偏誤或偏移。您可以透過直方圖查看特徵值分布情形。

控制台

  1. 如要前往Google Cloud 控制台中的特徵分布直方圖,請前往「Endpoints」(端點) 頁面。

    前往「Endpoints」

  2. 在「Endpoints」(端點) 頁面,按一下要分析的端點。

  3. 在所選端點的詳細資料頁面中,會列出部署在該端點的所有模型。按一下要分析的模型名稱。

  4. 模型的詳細資料頁面會列出模型的輸入特徵,以及相關資訊,例如各項特徵的快訊門檻,以及特徵的先前快訊數量。

  5. 如要分析特徵,請按一下特徵名稱。頁面會顯示該特徵的特徵分布直方圖。

    在 Google Cloud 控制台中,您可以查看每項受監控特徵最近 50 項監控工作的分布情形。在偏差偵測中,訓練資料分布會顯示在輸入資料分布旁邊:

    直方圖顯示範例輸入資料分布和訓練資料分布,用於偵測偏差。

    將資料分布情形以直方圖呈現,可讓您快速掌握資料變化。接著,您可能會決定調整特徵生成管道,或重新訓練模型。

後續步驟