本頁面說明如何建立、管理及解讀部署至線上預測端點的模型監控工作結果。Vertex AI Model Monitoring 支援針對類別和數值輸入特徵偵測特徵偏差和偏移情形。
當模型在啟用模型監控功能的正式環境中部署時,系統會將傳入的預測要求記錄在 Google Cloud 專案的 BigQuery 資料表中。接著,系統會分析記錄要求中所含的輸入特徵值,以找出偏差或偏移。
如果您為模型提供原始訓練資料集,可以啟用偏差偵測功能;否則,請啟用偏移偵測功能。詳情請參閱「Vertex AI Model Monitoring 簡介」。
必要條件
如要使用模型監控功能,請完成下列步驟:
在 Vertex AI 中擁有可用的模型,可能是 表格式 AutoML 或匯入的表格式自訂訓練類型。
- 如果您使用的是現有端點,請確認在端點下部署的所有模型都是表格式 AutoML 或匯入的自訂訓練類型。
如果您要啟用偏差偵測功能,請將訓練資料上傳至 Cloud Storage 或 BigQuery,並取得資料的 URI 連結。對於偏移偵測,則不需要訓練資料。
選用:對於自訂訓練模型,請將模型的分析例項結構定義上傳至 Cloud Storage。模型監控功能需要結構定義才能開始監控程序,並計算偏差偵測的基準分布。如果您在建立工作時未提供結構定義,工作會維持在待處理狀態,直到模型監控功能可自動剖析模型收到的前 1000 個預測要求的結構定義為止。
建立模型監控工作
如要設定偏差偵測或偏移偵測,請建立模型部署監控工作:
控制台
如要使用 Google Cloud 控制台建立模型部署監控工作,請建立端點:
前往 Google Cloud 控制台的「Vertex AI Endpoints」頁面。
按一下「建立端點」。
在「New endpoint」窗格中,為端點命名並設定區域。
按一下「繼續」。
在「Model name」欄位中,選取匯入的自訂訓練或表格式 AutoML 模型。
在「Version」欄位中,選取模型的版本。
按一下「繼續」。
在「Model monitoring」窗格中,確認「Enable model monitoring for this endpoint」已開啟。您設定的任何監控設定都會套用至部署至端點的所有模型。
輸入監控工作顯示名稱。
輸入監控期間長度。
如要設定通知電子郵件,請輸入一或多個以半形逗號分隔的電子郵件地址,以便在模型超過快訊門檻時收到快訊。
(選用) 針對「通知管道」,新增 Cloud Monitoring 管道,以便在模型超出快訊門檻時接收快訊。您可以選取現有的 Cloud Monitoring 管道,或是按一下「管理通知管道」來建立新的管道。主控台支援 PagerDuty、Slack 和 Pub/Sub 通知管道。
輸入取樣率。
選用:輸入預測輸入結構定義和分析輸入結構定義。
按一下「繼續」。「監控目標」窗格隨即開啟,提供偏差或偏移偵測選項:
傾斜偵測
- 選取「訓練/應用偏差偵測」。
- 在「訓練資料來源」下方,提供訓練資料來源。
- 在「目標欄」下方,輸入訓練資料中的資料欄名稱,訓練後的模型會預測這些資料。這個欄位不會納入監控分析。
- 選用步驟:在「警告門檻」下方,指定觸發快訊的門檻。如要瞭解如何設定閾值格式,請將滑鼠游標懸停在 說明圖示上。
- 按一下 [建立]。
偏差偵測
- 選取「預測偏移偵測」。
- 選用步驟:在「警告門檻」下方,指定觸發快訊的門檻。如要瞭解如何設定閾值格式,請將滑鼠游標懸停在 說明圖示上。
- 按一下 [建立]。
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 時,模型監控功能就會記錄快訊。根據預設,每個分類和數值特徵都會以 0.3 的閾值值進行監控。選用:SAMPLING_RATE 是您要記錄的傳入預測要求百分比。例如,
0.5
。如果未指定,模型監控功能會記錄所有預測要求。選用: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
標記替換為訓練資料集的其他連結:如果 CSV 檔案儲存在 Cloud Storage 值區中,請使用
--data-format=csv --gcs-uris=gs://BUCKET_NAME/OBJECT_NAME
。如果 TFRecord 檔案儲存在 Cloud Storage 值區中,請使用
--data-format=tf-record --gcs-uris=gs://BUCKET_NAME/OBJECT_NAME
。如果是 AutoML 管理的資料表資料集,請使用
--dataset=DATASET_ID
。
Python SDK
如需 Model Monitoring API 完整端對端工作流程的相關資訊,請參閱範例筆記本。
REST API
如果您尚未將模型部署至端點,請完成這項操作。在模型部署操作說明的「取得端點 ID」步驟中,請記下 JSON 回應中的
deployedModels.id
值,以供日後使用:建立模型監控工作要求。以下操作說明說明如何建立用於偵測偏離情形的基本監控工作。如要自訂 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 時,模型監控功能就會記錄警示。根據預設,系統會以 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" } ], ... }
- PROJECT_ID: Google Cloud 專案的 ID。例如:
建立監控工作後,模型監控功能會在名為 PROJECT_ID.model_deployment_monitoring_ENDPOINT_ID.serving_predict
的 BigQuery 資料表中記錄傳入的預測要求。如果啟用要求/回應記錄,模型監控會在用於要求/回應記錄的相同 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 會自動透過電子郵件通知您偵測到的異常情形,但您也可以透過 Cloud Logging 和 Cloud 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" }
通知管道
在每個監控間隔中,如果至少有一個特徵的門檻超過閾值,模型監控會傳送快訊至您在建立模型監控工作時指定的 Cloud Monitoring 通知管道。快訊包含觸發快訊的模型監控工作相關資訊。
更新模型監控工作
您可以查看、更新、暫停及刪除 Model Monitoring 工作。您必須先暫停工作,才能刪除。
控制台
Google Cloud 控制台不支援暫停和刪除功能,請改用 gcloud CLI。
如要更新模型監控工作參數,請按照下列步驟操作:
前往 Google Cloud 控制台的「Vertex AI Endpoints」頁面。
按一下要編輯的端點名稱。
按一下「編輯設定」。
在「編輯端點」窗格中,選取「模型監控」或「監控目標」。
更新要變更的欄位。
按一下「更新」。
如要查看模型的指標、快訊和監控資源,請按照下列步驟操作:
前往 Google Cloud 控制台的「Vertex AI Endpoints」頁面。
按一下端點名稱。
在要查看的模型的「監控」欄中,按一下「已啟用」。
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
。您可以 [擷取端點資訊][retrieve-id],或在 Google Cloud 控制台中查看模型的監控資源,來找出 ID。監控工作資源名稱會包含 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 控制台,以視覺化方式呈現每項監控功能的分布情形,並瞭解哪些變更會導致偏差或時間偏移。您可以將特徵值分布情況以直方圖的形式查看。
控制台
如要在Google Cloud 控制台中前往功能分配直方圖,請前往「Endpoints」頁面。
在「端點」頁面中,按一下要分析的端點。
在所選端點的詳細資料頁面中,您可以看到在該端點上部署的所有模型清單。按一下要分析的模型名稱。
模型的詳細資料頁面會列出模型的輸入特徵,以及相關資訊,例如每個特徵的快訊門檻和該特徵先前快訊的數量。
如要分析某個功能,請按一下該功能的名稱。頁面會顯示該特徵的特徵分布直方圖。
您可以在 Google Cloud 控制台中查看每個監控特徵的最近 50 項監控工作分布情形。針對偏移偵測,系統會在輸入資料分布圖旁顯示訓練資料分布圖:
將資料分布以直方圖呈現,可讓您快速掌握資料變化。之後,您可以調整特徵產生管道或重新訓練模型。
後續步驟
- 按照 API 說明文件操作,使用模型監控功能。
- 按照 gcloud CLI 文件的說明使用模型監控功能。
- 試試Colab 中的範例筆記本,或在 GitHub 上查看。
- 瞭解模型監控功能如何計算訓練/應用偏差和預測偏移。