取得預測模型的線上推論結果

Gemini Enterprise Agent Platform 提供兩種方式,可使用訓練好的預測模型推測未來值:線上推論和批次推論。

線上推論是同步要求。如要依據應用程式輸入內容發出要求,或是需要及時進行推論,您可以選用「線上推論」模式。

批次推論要求是非同步要求。如果您不需要立即取得回應,並想透過單一要求處理累積的資料,就適合選用「批次推論」模式。

本頁面說明如何使用線上推論預測未來值。如要瞭解如何使用批次推論預測值,請參閱「取得預測模型的批次推論」。

您必須先將模型部署至端點,才能用於推論。端點是一組實體資源。

您可以要求提供說明,而非推論。說明中的局部特徵重要性值,會指出各項特徵對推論結果的影響程度。如需概念總覽,請參閱「預測特徵歸因」。

如要瞭解線上推論的定價,請參閱「Tabular Workflows 定價」。

事前準備

您必須先訓練模型,才能提出線上推論要求。

建立或選取端點

使用 aiplatform.Endpoint.create() 函式建立端點。如果已有端點,請使用 aiplatform.Endpoint() 函式選取。

請參考以下程式碼範例:

# Import required modules
from google.cloud import aiplatform
from google.cloud.aiplatform import models

PROJECT_ID = "PROJECT_ID"
REGION = "REGION"

# Initialize the Vertex SDK for Python for your project.
aiplatform.init(project=PROJECT_ID, location=REGION)
endpoint = aiplatform.Endpoint.create(display_name='ENDPOINT_NAME')

更改下列內容:

  • PROJECT_ID:專案 ID。
  • REGION:使用 Gemini Enterprise Agent Platform 的區域。
  • ENDPOINT_NAME:端點的顯示名稱。

選取訓練完成的模型

使用 aiplatform.Model() 函式選取訓練完成的模型:

# Create reference to the model trained ahead of time.
model_obj = models.Model("TRAINED_MODEL_PATH")

更改下列內容:

  • TRAINED_MODEL_PATH:例如 projects/PROJECT_ID/locations/REGION/models/[TRAINED_MODEL_ID]

將模型部署至端點

使用 deploy() 函式將模型部署至端點。請參考以下程式碼範例:

deployed_model = endpoint.deploy(
    model_obj,
    machine_type='MACHINE_TYPE',
    traffic_percentage=100,
    min_replica_count='MIN_REPLICA_COUNT',
    max_replica_count='MAX_REPLICA_COUNT',
    sync=True,
    deployed_model_display_name='DEPLOYED_MODEL_NAME',
)

更改下列內容:

  • MACHINE_TYPE:例如 n1-standard-8。進一步瞭解機型。
  • MIN_REPLICA_COUNT:這項部署作業的節點數量下限。 您可以根據推論負載需求增加或減少節點數量,最多可達節點數量上限,且不得低於這個節點數量。這個值必須大於或等於 1。如未設定 min_replica_count 變數,預設值為 1。
  • MAX_REPLICA_COUNT:這項部署作業的節點數量上限。您可以根據推論負載的需求,增加或減少節點數量,但不得超過這個數量,也不得低於節點數量下限。如未設定 max_replica_count 變數,節點數量上限會設為 min_replica_count 的值。
  • DEPLOYED_MODEL_NAME:DeployedModel 的名稱。您也可以將 Model 的顯示名稱用於 DeployedModel。

模型部署作業可能需要約十分鐘。

取得線上推論

如要取得推論,請使用 predict() 函式,並提供一或多個輸入執行個體。請見以下程式碼範例:

predictions = endpoint.predict(instances=[{...}, {...}])

每個輸入執行個體都是 Python 字典,其結構定義與模型訓練時使用的結構定義相同。其中必須包含與時間欄對應的「預測時可用」鍵/值組合,以及包含目標推論欄歷來值的「預測時不可用」鍵/值組合。Gemini Enterprise Agent Platform 預期每個輸入執行個體都屬於單一時間序列。執行個體中的鍵/值組合順序並不重要。

輸入執行個體須符合下列限制:

  • available at forecast 鍵/值組合必須具有相同數量的資料點。
  • unavailable at forecast 鍵/值組合必須具有相同數量的資料點。
  • available at forecast 鍵/值組合的資料點數量,必須至少與 unavailable at forecast 鍵/值組合相同。

如要進一步瞭解預測時使用的資料欄類型,請參閱「預測時的特徵類型和可用性」。

下列程式碼示範一組兩個輸入執行個體。Category 欄包含屬性資料。Timestamp 欄包含預測時可用的資料。其中三個點是比對內容資料,兩個點是預測時間範圍資料。Sales 欄包含預測時無法取得的資料。這三點都是情境資料。如要瞭解如何將背景資訊和時間範圍用於預測,請參閱「預測時間範圍、背景資訊視窗和預測視窗」。

instances=[
  {
    # Attribute
    "Category": "Electronics",
    # Available at forecast: three days of context, two days of horizon
    "Timestamp": ['2023-08-03', '2023-08-04', '2023-08-05', '2023-08-06', '2023-08-07'],
    # Unavailable at forecast: three days of context
    "Sales": [490.50, 325.25, 647.00],
  },
  {
    # Attribute
    "Category": "Food",
    # Available at forecast: three days of context, two days of horizon
    "Timestamp": ['2023-08-03', '2023-08-04', '2023-08-05', '2023-08-06', '2023-08-07'],
    # Unavailable at forecast: three days of context
    "Sales": [190.50, 395.25, 47.00],
  }
])

針對每個執行個體,Gemini Enterprise Agent Platform 會傳回 Sales 的兩項推論,對應兩個預測時間範圍時間戳記 (「2023-08-06」和「2023-08-07」)。

為達到最佳效能,每個輸入執行個體中的情境資料點數量和預測期資料點數量,必須與模型訓練時的情境和預測期長度相符。如果不相符,Gemini Enterprise Agent Platform 會填補或截斷執行個體,使其符合模型大小。

如果輸入執行個體中的情境資料點數量少於或多於模型訓練使用的情境資料點數量,請確保所有預測時可用鍵/值組合和所有預測時不可用鍵/值組合中的資料點數量一致。

舉例來說,假設某個模型是以四天的情境資料和兩天的預測期資料訓練而成。只要有三天的情境資料,就能提出推論要求。在本例中,unavailable at forecast 鍵/值組合包含三個值。available at forecast 鍵/值組合必須包含五個值。

線上推論輸出內容

Gemini Enterprise Agent Platform 會在 value 欄位中提供線上推論輸出內容:

{
  'value': [...]
}

推論回應的長度取決於模型訓練中使用的時間範圍,以及輸入執行個體的時間範圍。推論回應的長度是這兩個值中的最小值。

請見以下範例:

  • 您使用 context = 15 和 horizon = 50 訓練模型。輸入執行個體的 context = 15,horizon = 20。推論回應的長度為 20。
  • 您使用 context = 15 和 horizon = 50 訓練模型。輸入執行個體的 context = 15,horizon = 100。推論回應的長度為 50。

TFT 模型的線上推論輸出內容

如果是使用時間融合轉換器 (TFT) 訓練的模型,Gemini Enterprise Agent Platform 除了在 value 欄位中提供推論,也會提供 TFT 可解釋性 tft_feature_importance:

{
  "tft_feature_importance": {
    "attribute_weights": [...],
    "attribute_columns": [...],
    "context_columns": [...],
    "context_weights": [...],
    "horizon_weights": [...],
    "horizon_columns": [...]
  },
  "value": [...]
}
  • attribute_columns:不隨時間變化的預測特徵。
  • attribute_weights:與各 attribute_columns 相關聯的權重。
  • context_columns:預測特徵,其情境視窗值會做為 TFT 長短期記憶 (LSTM) 編碼器的輸入內容。
  • context_weights:與預測執行個體的各個 context_columns 相關聯的特徵重要性權重。
  • horizon_columns:預測特徵,其預測時間範圍值會做為 TFT 長短期記憶 (LSTM) 解碼器的輸入內容。
  • horizon_weights:與預測執行個體的各個 horizon_columns 相關聯的特徵重要性權重。

針對分位數損失最佳化的模型線上推論輸出

對於針對分位數損失最佳化的模型,Gemini Enterprise Agent Platform 會提供下列線上推論輸出內容:

{
  "value": [...],
  "quantile_values": [...],
  "quantile_predictions": [...]
}
  • value:如果分位數組合包含中位數,value 就是中位數的推論值。否則,value 是集合中最低分位數的推論值。舉例來說,如果分位數組合為 [0.1, 0.5, 0.9],則 value 是分位數 0.5 的推論。如果分位數組合為 [0.1, 0.9],則 value 是分位數 0.1 的推論。
  • quantile_values:分位數的值,在模型訓練期間設定。
  • quantile_predictions:與 quantile_values 相關聯的推論值。

舉例來說,假設某個模型的目標欄是銷售價值。分位數值的定義為 [0.1, 0.5, 0.9]。Gemini Enterprise Agent Platform 會傳回下列分位數推論:[4484, 5615, 6853]。這裡的分位數組合包含中位數,因此 value 是分位數 0.5 (5615) 的推論。您可以按照下列方式解讀分位數推論:

  • P(sales value < 4484) = 10%
  • P(sales value < 5615) = 50%
  • P(sales value < 6853) = 90%

具備機率推論功能的模型線上推論輸出

如果模型使用機率推論,value 欄位會包含最佳化目標的最小化工具。舉例來說,如果最佳化目標是 minimize-rmse,value 欄位會包含平均值。如果是 minimize-mae,value 欄位會包含中位數值。

如果模型使用分位數機率推論,Gemini Enterprise Agent Platform 除了提供最佳化目標的最小化值,也會提供分位數值和推論。分位數值是在模型訓練期間設定。分位數推論是與分位數值相關聯的推論值。

取得線上說明

如要取得說明,請使用 explain() 函式,並提供一或多個輸入執行個體。請見以下程式碼範例:

explanations = endpoint.explain(instances=[{...}, {...}])

線上推論和線上說明的輸入執行個體格式相同。詳情請參閱「取得線上推論」。

如需特徵歸因的概念總覽,請參閱「預測特徵歸因」。

線上解釋輸出內容

下列程式碼示範如何輸出說明結果:

# Import required modules
import json
from google.protobuf import json_format

def explanation_to_dict(explanation):
  """Converts the explanation proto to a human-friendly json."""
  return json.loads(json_format.MessageToJson(explanation._pb))

for response in explanations.explanations:
  print(explanation_to_dict(response))

說明結果的格式如下:

{
  "attributions": [
    {
      "baselineOutputValue": 1.4194682836532593,
      "instanceOutputValue": 2.152980089187622,
      "featureAttributions": {
        ...
        "store_id": [
          0.007947325706481934
        ],
        ...
        "dept_id": [
          5.960464477539062e-08
        ],
        "item_id": [
          0.1100526452064514
        ],
        "date": [
          0.8525647521018982
        ],
        ...
        "sales": [
          0.0
        ]
      },
      "outputIndex": [
        2
      ],
      "approximationError": 0.01433318599207033,
      "outputName": "value"
    },
    ...
  ]
}

attributions 元素的數量取決於模型訓練中使用的預測時間範圍,以及輸入執行個體的預測時間範圍。元素數量是這兩個值中較小的一個。

attributions 元素中的 featureAttributions 欄位包含輸入資料集中每個資料欄的值。Gemini Enterprise Agent Platform 會為所有類型的特徵生成說明:屬性、預測時可用和預測時不可用。如要進一步瞭解 attributions 元素的欄位,請參閱「Attribution」。

刪除端點

使用 undeploy_all() 和 delete() 函式刪除端點。請見以下程式碼範例:

endpoint.undeploy_all()
endpoint.delete()

後續步驟