透過自訂訓練模型取得批次推論

本頁說明如何使用 Google Cloud 控制台或 Vertex AI API,從自訂訓練模型取得批次推論

如要提出批次推論要求,請指定輸入來源和輸出位置 (Cloud StorageBigQuery),Vertex AI 會將批次推論結果儲存在該位置。

限制與需求

取得批次推論結果時,請考量下列限制和需求:

  • 為盡量縮短處理時間,輸入和輸出位置必須位於相同區域或多區域。舉例來說,如果輸入內容為 us-central1,輸出內容可以是 us-central1US,但不能是 europe-west4。詳情請參閱「Cloud Storage 位置」和「BigQuery 位置」。
  • 輸入和輸出內容也必須與模型位於相同區域或多區域。
  • BigQuery ML 模型並非自訂訓練模型。不過,在下列情況下,您可以使用本頁的資訊,從 BigQuery ML 模型取得批次推論結果:
    • BigQuery ML 模型必須註冊至 Vertex AI Model Registry。
    • 如要使用 BigQuery 資料表做為輸入內容,請使用 Vertex AI API 將 InstanceConfig.instanceType 設為 "object"
  • 載入批次推論模型約 40 分鐘後會逾時。 如果看到下列錯誤訊息,請使用較小的模型進行批次推論: Error: model server never became ready. Please validate that your model file or container configuration are valid.

輸入資料規定

提交批次要求時,應在輸入內容中指定要送交模型推論的項目。我們支援下列輸入格式:

JSON Lines

使用 JSON Lines 檔案指定輸入執行個體清單,以進行推論。將檔案儲存在 Cloud Storage 值區中。

範例 1

以下範例顯示 JSON Lines 檔案,其中每行都包含陣列:

[1, 2, 3, 4] [5, 6, 7, 8] 

以下是 HTTP 要求主體中傳送至容器的內容:

所有其他容器

 {"instances": [ [1, 2, 3, 4], [5, 6, 7, 8] ]}

PyTorch 容器

 {"instances": [ { "data": [1, 2, 3, 4] }, { "data": [5, 6, 7, 8] } ]}

示例 2

下列範例顯示 JSON Lines 檔案,每行包含一個物件。

{ "values": [1, 2, 3, 4], "key": 1 } { "values": [5, 6, 7, 8], "key": 2 } 

以下是 HTTP 要求主體中傳送至容器的內容。 請注意,系統會將相同的要求主體傳送至所有容器。

{"instances": [   { "values": [1, 2, 3, 4], "key": 1 },   { "values": [5, 6, 7, 8], "key": 2 } ]} 

範例 3

如果是 PyTorch 預建容器,請務必按照 TorchServe 預設處理常式的要求,將每個執行個體包裝在 data 欄位中;Vertex AI 不會為您包裝執行個體。例如:

{ "data": { "values": [1, 2, 3, 4], "key": 1 } } { "data": { "values": [5, 6, 7, 8], "key": 2 } } 

以下是 HTTP 要求主體中傳送至推論容器的內容:

{"instances": [   { "data": { "values": [1, 2, 3, 4], "key": 1 } },   { "data": { "values": [5, 6, 7, 8], "key": 2 } } ]} 

TFRecord

TFRecord 格式儲存輸入例項。您可以選擇使用 Gzip 壓縮 TFRecord 檔案。將 TFRecord 檔案儲存在 Cloud Storage bucket 中。

Vertex AI 會將 TFRecord 檔案中的每個例項讀取為二進位檔,然後以 base64 編碼例項,做為具有名為 b64 單一鍵的 JSON 物件。

以下是 HTTP 要求主體中傳送至容器的內容:

所有其他容器

 {"instances": [ { "b64": "b64EncodedASCIIString" }, { "b64": "b64EncodedASCIIString" } ]}

PyTorch 容器

 {"instances": [ { "data": {"b64": "b64EncodedASCIIString" } }, { "data": {"b64": "b64EncodedASCIIString" } } ]}

請確認容器知道如何解碼執行個體。

CSV

在 CSV 檔案中,每列指定一個輸入例項。第一列必須是標題列。所有字串都必須以雙引號 (") 括住。Vertex AI 不接受含有換行的儲存格值。系統會將未加引號的值讀取為浮點數。

以下範例顯示含有兩個輸入例項的 CSV 檔案:

"input1","input2","input3" 0.1,1.2,"cat1" 4.0,5.0,"cat2" 

以下是 HTTP 要求主體中傳送至容器的內容:

所有其他容器

 {"instances": [ [0.1,1.2,"cat1"], [4.0,5.0,"cat2"] ]}

PyTorch 容器

 {"instances": [ { "data": [0.1,1.2,"cat1"] }, { "data": [4.0,5.0,"cat2"] } ]}

檔案清單

建立文字檔,其中每一列都是檔案的 Cloud Storage URI。Vertex AI 會將每個檔案的內容讀取為二進位檔,然後以 base64 編碼將執行個體編碼為 JSON 物件,並以 b64 做為單一鍵名。

如要使用 Google Cloud 控制台取得批次推論結果,請直接將檔案清單貼到 Google Cloud 控制台。否則,請將清單儲存在 Cloud Storage 值區中。

以下範例顯示含有兩個輸入樣本的檔案清單:

gs://path/to/image/image1.jpg gs://path/to/image/image2.jpg 

以下是 HTTP 要求主體中傳送至容器的內容:

所有其他容器

 { "instances": [ { "b64": "b64EncodedASCIIString" }, { "b64": "b64EncodedASCIIString" } ]}

PyTorch 容器

 { "instances": [ { "data": { "b64": "b64EncodedASCIIString" } }, { "data": { "b64": "b64EncodedASCIIString" } } ]}

請確認容器知道如何解碼執行個體。

BigQuery

將 BigQuery 資料表指定為 projectId.datasetId.tableId。 Vertex AI 會將資料表中的每個資料列轉換為 JSON 執行個體。

舉例來說,如果資料表包含下列項目:

第 1 欄 第 2 欄 第 3 欄
1.0 3.0 「Cat1」
2.0 4.0 「Cat2」

以下是 HTTP 要求主體中傳送至容器的內容:

所有其他容器

 {"instances": [ [1.0,3.0,"cat1"], [2.0,4.0,"cat2"] ]}

PyTorch 容器

 {"instances": [ { "data": [1.0,3.0,"cat1"] }, { "data": [2.0,4.0,"cat2"] } ]}

BigQuery 資料類型轉換為 JSON 的方式如下:

BigQuery 類型 JSON 類型 範例值
字串 字串 "abc"
整數 整數 1
浮點值 浮點值 1.2
數字 浮點值 4925.000000000
布林值 布林值
TimeStamp 字串 "2019-01-01 23:59:59.999999+00:00"
日期 字串 "2018-12-31"
時間 字串 "23:59:59.999999"
DateTime 字串 "2019-01-01T00:00:00"
錄製 物件 { "A": 1,"B": 2}
重複類型 Array[Type] [1, 2]
巢狀記錄 物件 {"A": {"a": 0}, "B": 1}

分割資料

批次推論會使用 MapReduce,將輸入內容分片至每個副本。如要使用 MapReduce 功能,輸入內容應可分割。

Vertex AI 會自動分割 BigQuery檔案清單JSON 行輸入內容。

Vertex AI 不會自動分割 CSV 檔案,因為這類檔案不適合分割。CSV 檔案中的資料列並非自我描述、已輸入,且可能含有換行符號。對於需要高輸送量的應用程式,我們不建議使用 CSV 輸入。

如果是 TFRecord 輸入,請務必手動分割資料,將例項分割成較小的檔案,並使用萬用字元 (例如 gs://my-bucket/*.tfrecord) 將檔案傳遞至工作。檔案數量應至少為指定的副本數量。

篩選及轉換輸入資料

您可以在要求中指定 instanceConfig,藉此篩選及轉換批次輸入內容。BatchPredictionJob

篩選功能可讓您從推論要求中排除輸入資料中的特定欄位,或只在推論要求中納入輸入資料的欄位子集,不必在推論容器中進行任何自訂前處理或後處理。如果輸入資料檔案含有模型不需要的額外資料欄 (例如鍵或額外資料),這項功能就非常實用。

轉換:您可以將執行個體以 JSON arrayobject 格式傳送至容器。詳情請參閱 instanceType

舉例來說,如果輸入資料表包含下列項目:

customerId col1 col2
1001 1 2
1002 5 6

並指定下列 instanceConfig

{   "name": "batchJob1",   ...   "instanceConfig": {     "excludedFields":["customerId"]     "instanceType":"object"   } } 

接著,推論要求中的執行個體會以 JSON 物件的形式傳送,並排除 customerId 欄:

{"col1":1,"col2":2} {"col1":5,"col2":6} 

請注意,指定下列 instanceConfig 會產生相同結果:

{   "name": "batchJob1",   ...   "instanceConfig": {     "includedFields": ["col1","col2"]     "instanceType":"object"   } } 

如要瞭解如何使用特徵篩選器,請參閱使用特徵篩選器進行自訂模型批次推論筆記本。

要求批次推論

如要發出批次推論要求,可以使用 Google Cloud 控制台或 Vertex AI API。視您提交的輸入項目數量而定,批次推論工作可能需要一些時間才能完成。

要求批次推論時,推論容器會以使用者提供的自訂服務帳戶執行。讀取/寫入作業 (例如從資料來源讀取推論例項,或寫入推論結果) 是使用 Vertex AI 服務代理程式完成,該代理程式預設可存取 BigQuery 和 Cloud Storage。

Google Cloud 控制台

使用 Google Cloud 控制台要求批次推論。

  1. 在 Google Cloud 控制台的 Vertex AI 專區中,前往「Batch predictions」(批次預測) 頁面。

前往「批次預測」頁面

  1. 按一下「建立」,開啟「新批次預測」視窗。

  2. 如要「定義批次預測工作」,請完成下列步驟:

    1. 輸入批次推論的名稱。

    2. 在「Model name」(模型名稱) 中,選取要用於這項批次推論的模型名稱。

    3. 在「選取來源」中,選取適用於輸入資料的來源:

      • 如果輸入內容的格式為 JSON Lines、CSV 或 TFRecord,請選取「File on Cloud Storage (JSON Lines, CSV, TFRecord, TFRecord Gzip)」(Cloud Storage 中的檔案 (JSON Lines、CSV、TFRecord、TFRecord Gzip))。然後在「Source path」(來源路徑) 欄位中指定輸入檔案。
      • 如果使用檔案清單做為輸入內容,請選取「Cloud Storage 中的檔案 (其他)」,然後將檔案清單貼到下列欄位。
      • 如果是 BigQuery 輸入,請選取「BigQuery 路徑」。如果選取 BigQuery 做為輸入內容,也必須選取 BigQuery 做為輸出內容,並 Google-managed encryption key。以 BigQuery 做為輸入/輸出內容時,不支援客戶自行管理的加密金鑰 (CMEK)。
    4. 在「Destination path」(目的地路徑) 欄位中,指定要讓 Vertex AI 儲存批次推論輸出內容的 Cloud Storage 目錄。

    5. 您可以視需要勾選「為這個模型啟用特徵歸因」,在批次推論回應中取得特徵歸因。然後按一下「編輯」設定說明設定。(如果您先前已為模型設定說明設定,則可選擇是否編輯說明設定,否則必須編輯。)

    6. 指定批次推論工作的運算選項:運算節點數量機器類型,以及 (選用) 加速器類型加速器數量

  3. 選用: 模型監控 批次推論的分析結果可在「預覽」中查看。如要將偏斜偵測設定新增至批次推論工作,請參閱必要條件

    1. 按一下以開啟「為這個批次預測啟用模型監控功能」

    2. 選取「訓練資料來源」。輸入所選訓練資料來源的資料路徑或位置。

    3. 選用:在「警告門檻」下方,指定觸發警告的門檻。

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

    5. 選用:在「通知管道」中新增 Cloud Monitoring 管道,以便在模型超過快訊門檻時收到通知。您可以選取現有的 Cloud Monitoring 管道,也可以按一下「管理通知管道」建立新管道。 Google Cloud 控制台支援 PagerDuty、Slack 和 Pub/Sub 通知管道。

  4. 點選「建立」

API

使用 Vertex AI API 傳送批次推論要求。根據您用來取得批次推論結果的工具,選取對應的分頁。

REST

使用任何要求資料之前,請先替換以下項目:

  • LOCATION_ID:儲存模型和執行批次預測工作的區域。例如:us-central1

  • PROJECT_ID:您的專案 ID

  • BATCH_JOB_NAME:批次預測工作的顯示名稱。

  • MODEL_ID:用於進行預測的模型 ID。

  • INPUT_FORMAT輸入資料的格式jsonlcsvtf-recordtf-record-gzipfile-list

  • INPUT_URI:輸入資料的 Cloud Storage URI。可能含有萬用字元。

  • OUTPUT_DIRECTORY:您希望 Vertex AI 儲存輸出內容的目錄 Cloud Storage URI。

  • MACHINE_TYPE:用於這項批次預測作業的機器資源

    您可以選擇設定 machineSpec 欄位使用快速鍵,但以下範例未說明這項操作。

  • BATCH_SIZE:每次預測要求中要傳送的執行個體數量,預設為 64。增加批次大小可提高輸送量,但也可能導致要求逾時。

  • STARTING_REPLICA_COUNT:這個批次預測作業的節點數量。

HTTP 方法和網址:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs

JSON 要求主體:

 {   "displayName": "BATCH_JOB_NAME",   "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",   "inputConfig": {     "instancesFormat": "INPUT_FORMAT",     "gcsSource": {       "uris": ["INPUT_URI"],     },   },   "outputConfig": {     "predictionsFormat": "jsonl",     "gcsDestination": {       "outputUriPrefix": "OUTPUT_DIRECTORY",     },   },   "dedicatedResources" : {     "machineSpec" : {       "machineType": MACHINE_TYPE     },     "startingReplicaCount": STARTING_REPLICA_COUNT   },   "manualBatchTuningParameters": {     "batch_size": BATCH_SIZE,   } } 

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"

PowerShell

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content

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

 {   "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID",   "displayName": "BATCH_JOB_NAME 202005291958",   "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",   "inputConfig": {     "instancesFormat": "jsonl",     "gcsSource": {       "uris": [         "INPUT_URI"       ]     }   },   "outputConfig": {     "predictionsFormat": "jsonl",     "gcsDestination": {       "outputUriPrefix": "OUTPUT_DIRECTORY"     }   },   "state": "JOB_STATE_PENDING",   "createTime": "2020-05-30T02:58:44.341643Z",   "updateTime": "2020-05-30T02:58:44.341643Z", } 

Java

在試用這個範例之前,請先按照Java使用用戶端程式庫的 Vertex AI 快速入門中的操作說明進行設定。 詳情請參閱 Vertex AI Java API 參考說明文件

如要向 Vertex AI 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。

在下列範例中,請將 PREDICTIONS_FORMAT 替換為 jsonl。 如要瞭解如何替換其他預留位置,請參閱本節的REST & CMD LINE 分頁。

import com.google.cloud.aiplatform.util.ValueConverter; import com.google.cloud.aiplatform.v1.AcceleratorType; import com.google.cloud.aiplatform.v1.BatchDedicatedResources; import com.google.cloud.aiplatform.v1.BatchPredictionJob; import com.google.cloud.aiplatform.v1.GcsDestination; import com.google.cloud.aiplatform.v1.GcsSource; import com.google.cloud.aiplatform.v1.JobServiceClient; import com.google.cloud.aiplatform.v1.JobServiceSettings; import com.google.cloud.aiplatform.v1.LocationName; import com.google.cloud.aiplatform.v1.MachineSpec; import com.google.cloud.aiplatform.v1.ModelName; import com.google.protobuf.Value; import java.io.IOException;  public class CreateBatchPredictionJobSample {    public static void main(String[] args) throws IOException {     // TODO(developer): Replace these variables before running the sample.     String project = "PROJECT";     String displayName = "DISPLAY_NAME";     String modelName = "MODEL_NAME";     String instancesFormat = "INSTANCES_FORMAT";     String gcsSourceUri = "GCS_SOURCE_URI";     String predictionsFormat = "PREDICTIONS_FORMAT";     String gcsDestinationOutputUriPrefix = "GCS_DESTINATION_OUTPUT_URI_PREFIX";     createBatchPredictionJobSample(         project,         displayName,         modelName,         instancesFormat,         gcsSourceUri,         predictionsFormat,         gcsDestinationOutputUriPrefix);   }    static void createBatchPredictionJobSample(       String project,       String displayName,       String model,       String instancesFormat,       String gcsSourceUri,       String predictionsFormat,       String gcsDestinationOutputUriPrefix)       throws IOException {     JobServiceSettings settings =         JobServiceSettings.newBuilder()             .setEndpoint("us-central1-aiplatform.googleapis.com:443")             .build();     String location = "us-central1";      // Initialize client that will be used to send requests. This client only needs to be created     // once, and can be reused for multiple requests. After completing all of your requests, call     // the "close" method on the client to safely clean up any remaining background resources.     try (JobServiceClient client = JobServiceClient.create(settings)) {        // Passing in an empty Value object for model parameters       Value modelParameters = ValueConverter.EMPTY_VALUE;        GcsSource gcsSource = GcsSource.newBuilder().addUris(gcsSourceUri).build();       BatchPredictionJob.InputConfig inputConfig =           BatchPredictionJob.InputConfig.newBuilder()               .setInstancesFormat(instancesFormat)               .setGcsSource(gcsSource)               .build();       GcsDestination gcsDestination =           GcsDestination.newBuilder().setOutputUriPrefix(gcsDestinationOutputUriPrefix).build();       BatchPredictionJob.OutputConfig outputConfig =           BatchPredictionJob.OutputConfig.newBuilder()               .setPredictionsFormat(predictionsFormat)               .setGcsDestination(gcsDestination)               .build();       MachineSpec machineSpec =           MachineSpec.newBuilder()               .setMachineType("n1-standard-2")               .setAcceleratorType(AcceleratorType.NVIDIA_TESLA_T4)               .setAcceleratorCount(1)               .build();       BatchDedicatedResources dedicatedResources =           BatchDedicatedResources.newBuilder()               .setMachineSpec(machineSpec)               .setStartingReplicaCount(1)               .setMaxReplicaCount(1)               .build();       String modelName = ModelName.of(project, location, model).toString();       BatchPredictionJob batchPredictionJob =           BatchPredictionJob.newBuilder()               .setDisplayName(displayName)               .setModel(modelName)               .setModelParameters(modelParameters)               .setInputConfig(inputConfig)               .setOutputConfig(outputConfig)               .setDedicatedResources(dedicatedResources)               .build();       LocationName parent = LocationName.of(project, location);       BatchPredictionJob response = client.createBatchPredictionJob(parent, batchPredictionJob);       System.out.format("response: %s\n", response);       System.out.format("\tName: %s\n", response.getName());     }   } } 

Python

如要瞭解如何安裝或更新 Python 適用的 Vertex AI SDK,請參閱「安裝 Python 適用的 Vertex AI SDK」。 詳情請參閱 Python API 參考說明文件

def create_batch_prediction_job_dedicated_resources_sample(     project: str,     location: str,     model_resource_name: str,     job_display_name: str,     gcs_source: Union[str, Sequence[str]],     gcs_destination: str,     instances_format: str = "jsonl",     machine_type: str = "n1-standard-2",     accelerator_count: int = 1,     accelerator_type: Union[str, aiplatform_v1.AcceleratorType] = "NVIDIA_TESLA_K80",     starting_replica_count: int = 1,     max_replica_count: int = 1,     sync: bool = True, ):     aiplatform.init(project=project, location=location)      my_model = aiplatform.Model(model_resource_name)      batch_prediction_job = my_model.batch_predict(         job_display_name=job_display_name,         gcs_source=gcs_source,         gcs_destination_prefix=gcs_destination,         instances_format=instances_format,         machine_type=machine_type,         accelerator_count=accelerator_count,         accelerator_type=accelerator_type,         starting_replica_count=starting_replica_count,         max_replica_count=max_replica_count,         sync=sync,     )      batch_prediction_job.wait()      print(batch_prediction_job.display_name)     print(batch_prediction_job.resource_name)     print(batch_prediction_job.state)     return batch_prediction_job  

BigQuery

上述 REST 範例使用 Cloud Storage 做為來源和目的地。如要改用 BigQuery,請進行下列變更:

  • inputConfig 欄位變更為下列內容:

    "inputConfig": {    "instancesFormat": "bigquery",    "bigquerySource": {       "inputUri": "bq://SOURCE_PROJECT_ID.SOURCE_DATASET_NAME.SOURCE_TABLE_NAME"    } } 
  • outputConfig 欄位變更為下列內容:

    "outputConfig": {    "predictionsFormat":"bigquery",    "bigqueryDestination":{       "outputUri": "bq://DESTINATION_PROJECT_ID.DESTINATION_DATASET_NAME.DESTINATION_TABLE_NAME"    }  } 
  • 更改下列內容:

    • SOURCE_PROJECT_ID:來源 Google Cloud 專案的 ID
    • SOURCE_DATASET_NAME:來源 BigQuery 資料集的名稱
    • SOURCE_TABLE_NAME:BigQuery 來源資料表的名稱
    • DESTINATION_PROJECT_ID:目的地 Google Cloud 專案的 ID
    • DESTINATION_DATASET_NAME:目的地 BigQuery 資料集的名稱
    • DESTINATION_TABLE_NAME:BigQuery 目的地資料表的名稱

特徵重要性

如要為推論傳回特徵重要性值,請將 generateExplanation 屬性設為 true。請注意,預測模型不支援特徵重要性,因此您無法將其納入批次推論要求。

特徵重要性 (有時稱為「特徵歸因」) 是 Vertex Explainable AI 的一部分。

只有在設定Model說明Model,或指定 BatchPredictionJobexplanationSpec 欄位時,才能將 generateExplanation 設為 true

選擇機型和副本數量

相較於使用較大的機器類型,增加副本數量可更線性且可預測地提升處理量。

一般來說,我們建議您為工作指定盡可能最小的機器類型,並增加副本數量。

為提高成本效益,建議您選擇的副本數量應能讓批次推論作業至少執行 10 分鐘。這是因為系統會以每小時的備用節點為單位計費,包括每個備用節點啟動時約需 5 分鐘。如果只處理幾秒鐘就關閉,成本效益不高。

一般而言,如果執行個體數量達到數千個,建議您將 starting_replica_count 設為數十。如果是數百萬個執行個體,建議您將 starting_replica_count 設為數百。您也可以使用下列公式估算副本數量:

N / (T * (60 / Tb))

其中:

  • N:工作中的批次數量。舉例來說,100 萬個執行個體 / 100 個批次大小 = 10,000 個批次。
  • T:批次推論工作的預計時間。例如 10 分鐘。
  • Tb:副本處理單一批次所需的時間 (以秒為單位)。舉例來說,在 2 核心機器類型上,每個批次需要 1 秒。

以我們的範例來說,10,000 個批次 / (10 分鐘 * (60 / 1 秒)) 四捨五入後為 17 個副本。

與線上推論不同,批次推論工作不會自動調度資源。由於所有輸入資料都是預先得知,因此系統會在工作開始時,將資料分割到每個副本。系統會使用 starting_replica_count 參數。系統會忽略 max_replica_count 參數。

這些建議僅為概略指引。不一定能為每個模型提供最佳處理量。他們不會提供確切的處理時間和費用估算值。而且不一定能擷取每個情境的最佳成本與輸送量取捨。您可以將這些值做為合理的起點,並視需要調整。如要評估模型的輸送量等特徵,請執行「Finding ideal machine type」筆記本。

適用於 GPU 或 TPU 加速機器

請遵循上述指引 (也適用於僅使用 CPU 的模型),並注意下列事項:

  • 您可能需要更多 CPU 和 GPU (例如用於資料預先處理)。
  • GPU 機器類型需要較長的啟動時間 (10 分鐘),因此您可能需要為批次推論工作設定較長的時間 (例如至少 20 分鐘,而非 10 分鐘),確保有合理比例的時間和費用用於產生推論結果。

擷取批次推論結果

批次推論工作完成後,推論的輸出內容會儲存在您於要求中指定的 Cloud Storage bucket 或 BigQuery 位置。

批次推論結果範例

輸出資料夾包含一組 JSON Lines 檔案。

檔案名稱為 {gcs_path}/prediction.results-{file_number}-of-{number_of_files_generated}。由於批次推論的性質為分散式,因此檔案數量不確定。

檔案中的每一行都對應至輸入內容中的一個執行個體,並包含下列鍵/值組合:

  • prediction:包含容器傳回的值。
  • instance:如果是檔案清單,則包含 Cloud Storage URI。如果是其他輸入格式,則包含在 HTTP 要求主體中傳送至容器的值。

範例 1

如果 HTTP 要求包含:

{   "instances": [     [1, 2, 3, 4],     [5, 6, 7, 8] ]} 

容器會傳回:

{   "predictions": [     [0.1,0.9],     [0.7,0.3]   ], } 

JSON Lines 輸出檔案如下:

{ "instance": [1, 2, 3, 4], "prediction": [0.1,0.9]} { "instance": [5, 6, 7, 8], "prediction": [0.7,0.3]} 

範例 2

如果 HTTP 要求包含:

{   "instances": [     {"values": [1, 2, 3, 4], "key": 1},     {"values": [5, 6, 7, 8], "key": 2} ]} 

容器會傳回:

{   "predictions": [     {"result":1},     {"result":0}   ], } 

JSON Lines 輸出檔案如下:

{ "instance": {"values": [1, 2, 3, 4], "key": 1}, "prediction": {"result":1}} { "instance": {"values": [5, 6, 7, 8], "key": 2}, "prediction": {"result":0}} 

使用 Explainable AI

我們不建議對大量資料執行以特徵為準的說明。這是因為根據可能的特徵值組合,每個輸入內容可能會擴展為數千個要求,導致處理時間和成本大幅增加。一般來說,小型資料集就足以瞭解特徵重要性。

批次推論不支援以範例為基礎的解釋

筆記本

後續步驟