開始監控模型前,您必須先向 Gemini Enterprise Agent Platform Model Registry 註冊模型,然後建立模型監控器,設定監控詳細資料。本頁說明如何註冊模型,並解釋監控設定中可定義的所有規格。
模型監控 v2 僅支援表格型模型。這些模型可在 Agent Platform 或其他服務基礎架構上提供服務。
註冊模型
您可以監控部署在任何服務基礎架構上的模型,例如 Agent Platform 端點、GKE 或 BigQuery。如要註冊在 Agent Platform 中提供的模型,請參閱「匯入模型」。
如要透過 Agent Platform 以外的服務提供模型,可以註冊參照模型,也就是在其他資源上提供模型的預留位置。註冊參照模型時,請註冊模型名稱,如下例所示:
Python SDK
model = aiplatform.Model.upload( display_name="MODEL_NAME" )
對於參考模型,模型監控功能可支援來自 Cloud Storage 或 BigQuery 的資料集。您無法監控參考模型的特徵歸因。
資料來源
您可以監控儲存在下列來源的資料指標。系統不支援巢狀功能。如要分析巢狀資料,請先將其攤平。如果資料位於 BigQuery 等來源,您可以使用 SQL 轉換巢狀功能。
- BigQuery
- 您可以提供 BigQuery 資料表 URI 或 SQL 查詢。如要指定時間範圍或設定持續監控,資料表必須包含時間戳記欄,您可以在資料集中指定為
timestamp_field。 - Cloud Storage
- 資料必須以 CSV 或 JSONL 格式儲存。如果是 CSV 檔案,請在檔案的第一列加入資料欄名稱的標題。
- Agent Platform 批次預測工作
- 提供批次預測工作的完整資源名稱,以監控批次預測工作。建立批次預測工作後,即可立即執行監控工作,不必等待批次工作完成。批次預測工作完成後,Model Monitoring v2 很快就會執行監控工作。
- Agent Platform 端點記錄
您必須先在端點上啟用要求/回應記錄,才能開始監控端點。私有端點不支援要求/回應記錄,因此無法監控。
模型監控服務第 2 版預期 Agent Platform 端點要求和回應的 JSON 格式,會遵循
predict方法使用的格式。instances物件會以陣列形式插入request_payload欄的記錄資料表:[INSTANCE_1, INSTANCE_2]。同樣地,predictions物件會以陣列形式插入記錄資料表的response_payload欄中:[PREDICTION_1, PREDICTION_2]。系統支援其他方法 (例如原始預測),但您的資料必須遵循
predict方法的 API 參考資料中所述的要求和回應 JSON 格式。- Agent Platform 管理的資料集
在 Agent Platform 中管理的資料集。詳情請參閱表格資料集格式。
持續監控
持續監控 (又稱排程作業) 可讓您按照設定的排程執行監控作業。使用時間規格持續監控模型時,只支援 BigQuery 和 Agent Platform 端點記錄做為資料來源。
如要使用 BigQuery 做為來源,透過時間規格進行持續監控,資料表必須有時間戳記資料欄。如果是 Agent Platform 端點記錄產生的 BigQuery 資料表,資料表已包含 logging_time 時間戳記資料欄。
一般而言,我們建議您使用時間戳記分割資料表,以提升查詢效能,並減少查詢讀取的位元組數,進而控管費用。
支援的資料類型
支援數值和類別特徵。您可以加入含有陣列的資料欄,例如布林值、類別、字串或整數值的陣列。模型監控 v2 會將陣列整併,使陣列中的每個元素都是不同的值。
數值特徵會對應至下列資料類型:
- 浮點值
- 整數
類別特徵會對應至下列資料類型:
- 布林值
- 字串
- 類別
模型結構定義
模型監控 v2 會使用模型結構定義剖析資料。建立模型監控時,必須提供這個結構定義。如果是 AutoML Tables,您不需要指定模型結構定義;Gemini Enterprise Agent Platform Model Monitoring 會自動擷取。
以下範例顯示預期結構定義的一般結構:
Python SDK
ml_monitoring.spec.ModelMonitoringSchema( feature_fields=[ ml_monitoring.spec.FieldSchema( name="FEATURE_NAME", data_type="DATA_TYPE", repeated=BOOLEAN ) ], prediction_fields = [ ml_monitoring.spec.FieldSchema( name="PREDICTION_NAME", data_type="DATA_TYPE", repeated=BOOLEAN ) ], ground_truth_fields = [ ml_monitoring.spec.FieldSchema( name="GROUND_TRUTH_NAME", data_type="DATA_TYPE", repeated=BOOLEAN ) ] )
如果資料欄包含值陣列,請將 repeated 設為 true。
如果是 AutoML Tables,當模型監控 V2 擷取模型結構定義時,會使用訓練資料集中的特徵做為輸入特徵,目標資料欄除外。預測輸出會設為 predicted_{target_column} 資料欄。此外,預測輸出值的模型監控 V2 擷取方法取決於模型類型。如果是 AutoML Tables 分類模型,Gemini Enterprise Agent Platform Model Monitoring 會監控 argmax 標籤分配情形。如果是 AutoML Tables 迴歸模型,Gemini Enterprise Agent Platform Model Monitoring 會監控值分配情形。
基準和目標資料集
基準資料集代表您用來隨時間測量指標的參考點。目標資料集包含較新的資料,您可用來與基準資料集比較。模型監控 v2 會計算這兩個資料集之間的指標,協助您追蹤模型品質。基準和目標資料集可來自任何支援的資料來源。
舉例來說,您可以比較供應資料集 (目標) 與模型的訓練資料集 (基準),也可以比較供應資料集 (目標) 與較早時間範圍的供應資料集 (基準)。
目標資料集
選取目標資料集後,模型監控 v2 可以處理整個資料集,也可以設定時間範圍,指定模型監控 v2 要檢查的資料量。舉例來說,如果您指定 24 小時的時間範圍,模型監控第 2 版只會比較最新的 24 小時資料與基準資料集。
如果處理的資料量不足,資料偏移分析結果可能會不穩定。如果樣本數過低而觸發快訊,您可以擴大時間範圍,避免收到這類快訊。
基準資料集
您可以將基準資料集設為任何支援的資料來源,例如包含模型訓練資料的 Agent Platform 管理資料集。與目標資料集類似,您可以選擇讓模型監控第 2 版處理整個資料集或特定時間範圍。
時間規格
您可以透過下列兩種方式設定監控時間規格:
- 時間範圍,包括開始時間和結束時間配對。
- 時間範圍和偏移量,用於指定要納入的資料量,以及比較資料集之間的時間間隔。
舉例來說,如要比較近期資料與先前收集的資料,可以設定偏移。偏移量會指定目標與基準資料集之間的時間間隔。舉例來說,假設您將目標資料集的回溯期設為 1 天,基準的回溯期也設為 1 天,但偏移量為 1 週。
在本例中,目標資料集包含監控工作開始時間前 24 小時的資料。基準資料集包含同一段 24 小時的資料,但時間是整整一週前。
建立模型監控器
建立模型監控器,將監控詳細資料與已在 Gemini Enterprise Agent Platform Model Registry 註冊的模型版本建立關聯。產生的資源稱為「模型監控器」。每個模型版本只能建立一個模型監控器。
建立模型監控器時,請指定模型名稱、版本和結構定義。對於部分模型 (例如 AutoML 模型),系統會提供結構定義。
您可以在模型監控器中選擇設定監控目標、訓練資料集、監控輸出位置和通知設定。執行監控工作時,Model Monitoring v2 會將這些設定做為預設值。
控制台
前往 Google Cloud 控制台的「Monitoring」頁面。
按一下「設定監控」。
選取要監控的模型和版本。
如適用,請定義預測輸入特徵、預測輸出內容和基準真相 (如有) 的結構定義。
選用:如要監控訓練資料集的漂移情形,請指定資料集位置。
選用:如要指定現有的 Cloud Storage bucket 來匯出監控結果,請展開「Advanced options」(進階選項),然後選取 bucket。
如要設定監控目標,請按一下「繼續」或「設定」建立模型監控器。
執行作業時,系統會將這項設定做為預設值。
選取要監控的目標。您可以為每個目標設定要監控的指標,以及警報的門檻。
指定電子郵件地址,並視需要指定 Cloud Monitoring 中的通知管道,以接收監控快訊和通知。
Python SDK
from vertexai.resources.preview import ml_monitoring from google.cloud.aiplatform_v1beta1.types import ExplanationSpec, ExplanationParameters, ExplanationMetadata # Define Monitoring Schema. For AutoML models, this is optional if the schema information is available. MONITORING_SCHEMA=ml_monitoring.spec.ModelMonitoringSchema( feature_fields=[ ml_monitoring.spec.FieldSchema( name="sepal_length_cm", data_type="float" ), ml_monitoring.spec.FieldSchema( name="sepal_width_cm", data_type="float" ), ml_monitoring.spec.FieldSchema( name="petal_length_cm", data_type="float" ), ml_monitoring.spec.FieldSchema( name="petal_width_cm", data_type="float" ) ], prediction_fields = [ ml_monitoring.spec.FieldSchema( name="predicted_species", data_type="categorical" ) ] ) TRAINING_DATASET = ml_monitoring.spec.MonitoringInput( gcs_uri=GCS_INPUT_URI, data_format=DATA_FORMAT, ) DEFAULT_FEATURE_DRIFT_SPEC=ml_monitoring.spec.DataDriftSpec( categorical_metric_type="l_infinity", numeric_metric_type="jensen_shannon_divergence", default_categorical_alert_threshold=0.1, default_numeric_alert_threshold=0.1, ) DEFAULT_PREDICTION_OUTPUT_DRIFT_SPEC=ml_monitoring.spec.DataDriftSpec( categorical_metric_type="l_infinity", numeric_metric_type="jensen_shannon_divergence", default_categorical_alert_threshold=0.1, default_numeric_alert_threshold=0.1, ) DEFAULT_FEATURE_ATTRIBUTION_SPEC=ml_monitoring.spec.FeatureAttributionSpec( default_alert_threshold=0.0003, feature_alert_thresholds={"sepal_length_cm":0.0001}, ) EXPLANATION_SPEC=ExplanationSpec( parameters=ExplanationParameters( {"sampled_shapley_attribution": {"path_count": 2}} ), metadata=ExplanationMetadata( inputs={ "sepal_length_cm": ExplanationMetadata.InputMetadata({ "input_tensor_name": "sepal_length_cm", "encoding": "IDENTITY", "modality": "numeric", }), ... }, ... ) ) DEFAULT_OUTPUT_SPEC = ml_monitoring.spec.output.OutputSpec( gcs_base_dir=GCS_OUTPUT_BASE_DIR ) DEFAULT_NOTIFICATION_SPEC = ml_monitoring.spec.NotificationSpec( user_emails=['email@example.com'] ) my_model_monitor = ml_monitoring.ModelMonitor.create( display_name=MONITORING_JOB_DISPLAY_NAME, model_name=MODEL_RESOURCE_NAME, model_version_id=MODEL_VERSION_ID, model_monitoring_schema=MONITORING_SCHEMA, # The following fields are optional for creating the model monitor. training_dataset=TRAINING_DATASET, tabular_objective_spec=ml_monitoring.spec.TabularObjective( feature_drift_spec=DEFAULT_FEATURE_DRIFT_SPEC, prediction_output_drift_spec=DEFAULT_PREDICTION_OUTPUT_DRIFT_SPEC, feature_attribution_spec=DEFAULT_FEATURE_ATTRIBUTION_SPEC, ), explanation_spec=DEFAULT_FEATURE_ATTRIBUTION_SPEC, output_spec=DEFAULT_OUTPUT_SPEC, notification_spec=DEFAULT_NOTIFICATION_SPEC )