線上和批次推論的差異
「線上推論」是對模型端點發出的同步要求。如要依據應用程式輸入內容發出要求,或是需要及時進行推論,您可以選用「線上推論」模式。
批次推論為非同步要求。您可以直接從模型資源要求批次推論,不必將模型部署至端點。如果不需要立即取得回應,並想透過單一要求處理累積的資料,就適合對圖片資料使用批次推論。
取得線上推論結果
將模型部署至端點
您必須先將模型部署至端點,才能使用模型進行線上推論。部署過程中,系統會將實體資源與模型建立關聯,讓模型以低延遲的方式提供線上推論結果。
您可以將多個模型部署至端點,也可以將模型部署至多個端點。如要進一步瞭解模型部署選項和用途,請參閱「關於模型部署」。
請使用下列其中一種方法部署模型:
Google Cloud 控制台
在 Google Cloud 控制台的 Vertex AI 專區,前往「Models」頁面。
按一下要部署的模型名稱,開啟「Model description」(模型說明) 頁面。
在「版本 ID」欄中,按一下要部署的模型版本 ID
按一下「Deploy & Test」(部署及測試)。
如果模型已部署至任何端點,這些端點會列在「Deploy your model」(部署模型)部分。
按一下「Deploy to endpoint」(部署至端點)。
如要將模型部署到新端點,請按一下「建立新端點」
,然後輸入新端點的名稱。如要將模型部署至現有端點,請按一下「新增至現有端點」 ,然後選取端點「端點名稱」。您可以為端點新增多個模型,也可以為多個端點新增模型。瞭解詳情。
如果部署至新端點,請選擇端點的存取方式:
按一下「標準」,即可透過 REST API 使用端點進行推論。
點選「私人」,讓端點使用私人連線。
如果部署至現有端點,且該端點已部署一或多個模型,請更新要部署的模型和已部署模型的「流量拆分」百分比,確保這些百分比加總為 100%。
選取「AutoML Image」,然後按照下列方式設定:
如果將模型部署到新端點,請接受「流量分配」的 100%。否則,請調整端點上所有模型的流量拆分值,使其總和為 100。
輸入要為模型提供的運算節點數量。
這是模型隨時可用的節點數量。即使沒有推論流量,您仍須支付節點費用。詳情請參閱定價頁面。
瞭解如何變更推論記錄的預設設定。
僅限分類模型 (選用):在「Explainability options」(可解釋性選項) 專區中,選取「Enable feature attributions for this model」(為這個模型啟用特徵歸因) Vertex Explainable AI。接受現有的視覺化設定,或選擇新值並按一下「完成」。
,啟用您可以選擇部署已設定 Vertex Explainable AI 的 AutoML 圖片分類模型,並執行附帶說明的推論。在部署時啟用 Vertex Explainable AI 會產生額外費用,費用依據部署的節點數量和部署時間計算。詳情請參閱定價。
為模型點選「完成」,確認所有「流量分配」百分比都正確無誤後,點選「繼續」。
系統會顯示模型部署的區域。這個地區必須與您建立模型的地區相同。
按一下「Deploy」(部署),將模型部署至端點。
API
使用 Vertex AI API 部署模型時,請完成下列步驟:
- 視需要建立端點。
- 取得端點 ID。
- 將模型部署至端點。
建立端點
如果將模型部署至現有端點,則可略過這個步驟。
gcloud
下列範例使用 gcloud ai endpoints create
指令:
gcloud ai endpoints create \
--region=LOCATION \
--display-name=ENDPOINT_NAME
更改下列內容:
- LOCATION_ID:您使用 Vertex AI 的區域。
- ENDPOINT_NAME:端點的顯示名稱。
Google Cloud CLI 工具可能需要幾秒鐘才能建立端點。
REST
使用任何要求資料之前,請先替換以下項目:
- LOCATION_ID:您的區域。
- PROJECT_ID:您的專案 ID。
- ENDPOINT_NAME:端點的顯示名稱。
HTTP 方法和網址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints
JSON 要求主體:
{ "display_name": "ENDPOINT_NAME" }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/endpoints/ENDPOINT_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateEndpointOperationMetadata", "genericMetadata": { "createTime": "2020-11-05T17:45:42.812656Z", "updateTime": "2020-11-05T17:45:42.812656Z" } } }
"done": true
為止。
Java
在試用這個範例之前,請先按照Java使用用戶端程式庫的 Vertex AI 快速入門中的操作說明進行設定。 詳情請參閱 Vertex AI Java API 參考說明文件。
如要向 Vertex AI 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Node.js
在試用這個範例之前,請先按照Node.js使用用戶端程式庫的 Vertex AI 快速入門中的操作說明進行設定。 詳情請參閱 Vertex AI Node.js API 參考說明文件。
如要向 Vertex AI 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Python
如要瞭解如何安裝或更新 Python 適用的 Vertex AI SDK,請參閱「安裝 Python 適用的 Vertex AI SDK」。 詳情請參閱 Python API 參考說明文件。
擷取端點 ID
您需要端點 ID 才能部署模型。
gcloud
下列範例使用 gcloud ai endpoints list
指令:
gcloud ai endpoints list \
--region=LOCATION \
--filter=display_name=ENDPOINT_NAME
更改下列內容:
- LOCATION_ID:您使用 Vertex AI 的區域。
- ENDPOINT_NAME:端點的顯示名稱。
請注意 ENDPOINT_ID
欄中顯示的數字。請在下一個步驟中使用這個 ID。
REST
使用任何要求資料之前,請先替換以下項目:
- LOCATION_ID:您使用 Vertex AI 的區域。
- PROJECT_ID:您的專案 ID。
- ENDPOINT_NAME:端點的顯示名稱。
HTTP 方法和網址:
GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints?filter=display_name=ENDPOINT_NAME
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "endpoints": [ { "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/endpoints/ENDPOINT_ID", "displayName": "ENDPOINT_NAME", "etag": "AMEw9yPz5pf4PwBHbRWOGh0PcAxUdjbdX2Jm3QO_amguy3DbZGP5Oi_YUKRywIE-BtLx", "createTime": "2020-04-17T18:31:11.585169Z", "updateTime": "2020-04-17T18:35:08.568959Z" } ] }
部署模型
選取下方分頁,查看適用於您語言或環境的範例:
gcloud
下列範例使用 gcloud ai endpoints deploy-model
指令。
以下範例會將 Model
部署至 Endpoint
,而不會在多個 DeployedModel
資源之間分配流量:
使用下方的任何指令資料之前,請先替換以下項目:
- ENDPOINT_ID:端點的 ID。
- LOCATION_ID:您使用 Vertex AI 的區域。
- MODEL_ID:要部署的模型 ID。
-
DEPLOYED_MODEL_NAME:
DeployedModel
的名稱。您也可以使用Model
的顯示名稱做為DeployedModel
。 - MIN_REPLICA_COUNT:此部署作業的節點數量下限。節點數量可視推論負載需求增加或減少,最多可達節點數量上限,最少則不得低於這個數量。
-
MAX_REPLICA_COUNT:此部署作業的節點數量上限。
節點數量可視推論負載需求增減,最多可達這個節點數量,且絕不會少於節點數量下限。如果省略
--max-replica-count
標記,節點數量上限就會設為--min-replica-count
的值。
執行 gcloud ai endpoints deploy-model 指令:
Linux、macOS 或 Cloud Shell
gcloud ai endpoints deploy-model ENDPOINT_ID\ --region=LOCATION_ID \ --model=MODEL_ID \ --display-name=DEPLOYED_MODEL_NAME \ --min-replica-count=MIN_REPLICA_COUNT \ --max-replica-count=MAX_REPLICA_COUNT \ --traffic-split=0=100
Windows (PowerShell)
gcloud ai endpoints deploy-model ENDPOINT_ID` --region=LOCATION_ID ` --model=MODEL_ID ` --display-name=DEPLOYED_MODEL_NAME ` --min-replica-count=MIN_REPLICA_COUNT ` --max-replica-count=MAX_REPLICA_COUNT ` --traffic-split=0=100
Windows (cmd.exe)
gcloud ai endpoints deploy-model ENDPOINT_ID^ --region=LOCATION_ID ^ --model=MODEL_ID ^ --display-name=DEPLOYED_MODEL_NAME ^ --min-replica-count=MIN_REPLICA_COUNT ^ --max-replica-count=MAX_REPLICA_COUNT ^ --traffic-split=0=100
流量分配
在上述範例中,--traffic-split=0=100
標記會將 Endpoint
接收到的 100% 預測流量傳送至新的 DeployedModel
,也就是以臨時 ID 0
表示的 DeployedModel
。如果 Endpoint
已經有其他DeployedModel
資源,則可以在新舊資源之間分配流量。DeployedModel
舉例來說,如要將 20% 的流量傳送至新的 DeployedModel
,80% 的流量傳送至舊版,請執行下列指令:
使用下方的任何指令資料之前,請先替換以下項目:
- OLD_DEPLOYED_MODEL_ID:現有
DeployedModel
的 ID。
執行 gcloud ai endpoints deploy-model 指令:
Linux、macOS 或 Cloud Shell
gcloud ai endpoints deploy-model ENDPOINT_ID\ --region=LOCATION_ID \ --model=MODEL_ID \ --display-name=DEPLOYED_MODEL_NAME \ --min-replica-count=MIN_REPLICA_COUNT \ --max-replica-count=MAX_REPLICA_COUNT \ --traffic-split=0=20,OLD_DEPLOYED_MODEL_ID=80
Windows (PowerShell)
gcloud ai endpoints deploy-model ENDPOINT_ID` --region=LOCATION_ID ` --model=MODEL_ID ` --display-name=DEPLOYED_MODEL_NAME \ --min-replica-count=MIN_REPLICA_COUNT ` --max-replica-count=MAX_REPLICA_COUNT ` --traffic-split=0=20,OLD_DEPLOYED_MODEL_ID=80
Windows (cmd.exe)
gcloud ai endpoints deploy-model ENDPOINT_ID^ --region=LOCATION_ID ^ --model=MODEL_ID ^ --display-name=DEPLOYED_MODEL_NAME \ --min-replica-count=MIN_REPLICA_COUNT ^ --max-replica-count=MAX_REPLICA_COUNT ^ --traffic-split=0=20,OLD_DEPLOYED_MODEL_ID=80
REST
部署模型。
使用任何要求資料之前,請先替換以下項目:
- LOCATION_ID:您使用 Vertex AI 的區域。
- PROJECT_ID:您的專案 ID。
- ENDPOINT_ID:端點的 ID。
- MODEL_ID:要部署的模型 ID。
-
DEPLOYED_MODEL_NAME:
DeployedModel
的名稱。您也可以使用Model
的顯示名稱做為DeployedModel
。 - MIN_REPLICA_COUNT:此部署作業的節點數量下限。節點數量可視推論負載增加或減少,最多可達節點數量上限,最少則不得低於這個數量。
- MAX_REPLICA_COUNT:此部署作業的節點數量上限。 節點數量可視推論負載需求增減,最多可達這個節點數量,且絕不會少於節點數量下限。
- TRAFFIC_SPLIT_THIS_MODEL:要將多少預測流量從這個端點導向透過這項作業部署的模型。預設值為 100。所有流量百分比加總必須為 100%。進一步瞭解流量分配。
- DEPLOYED_MODEL_ID_N:選用。如果其他模型部署至這個端點,您必須更新流量分配百分比,讓所有百分比加總為 100%。
- TRAFFIC_SPLIT_MODEL_N:已部署模型 ID 鍵的流量分配百分比值。
- PROJECT_NUMBER:系統自動為專案產生的專案編號
HTTP 方法和網址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel
JSON 要求主體:
{ "deployedModel": { "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "displayName": "DEPLOYED_MODEL_NAME", "automaticResources": { "minReplicaCount": MIN_REPLICA_COUNT, "maxReplicaCount": MAX_REPLICA_COUNT } }, "trafficSplit": { "0": TRAFFIC_SPLIT_THIS_MODEL, "DEPLOYED_MODEL_ID_1": TRAFFIC_SPLIT_MODEL_1, "DEPLOYED_MODEL_ID_2": TRAFFIC_SPLIT_MODEL_2 }, }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeployModelOperationMetadata", "genericMetadata": { "createTime": "2020-10-19T17:53:16.502088Z", "updateTime": "2020-10-19T17:53:16.502088Z" } } }
Java
在試用這個範例之前,請先按照Java使用用戶端程式庫的 Vertex AI 快速入門中的操作說明進行設定。 詳情請參閱 Vertex AI Java API 參考說明文件。
如要向 Vertex AI 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Node.js
在試用這個範例之前,請先按照Node.js使用用戶端程式庫的 Vertex AI 快速入門中的操作說明進行設定。 詳情請參閱 Vertex AI Node.js API 參考說明文件。
如要向 Vertex AI 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
Python
如要瞭解如何安裝或更新 Python 適用的 Vertex AI SDK,請參閱「安裝 Python 適用的 Vertex AI SDK」。 詳情請參閱 Python API 參考說明文件。
瞭解如何變更推論記錄的預設設定。
取得作業狀態
部分要求會啟動長時間執行的作業,需要一段時間才能完成。這些要求會傳回作業名稱,您可以使用該名稱查看作業狀態或取消作業。Vertex AI 提供輔助方法,可對長時間執行的作業發出呼叫。詳情請參閱「處理長時間執行作業」。
使用已部署的模型進行線上推論
如要進行線上推論,請將一或多個測試項目提交給模型進行分析,模型會根據模型目標傳回結果。如要進一步瞭解推論結果,請參閱「解讀結果」頁面。
主控台
您可以使用 Google Cloud 控制台要求線上推論。模型必須部署至端點。
API
使用 Vertex AI API 要求線上推論。模型必須部署至端點。
取得批次推論結果
如要提出批次推論要求,須指定輸入來源和輸出格式,Vertex AI 會將推論結果儲存至指定位置。AutoML 圖片模型類型的批次推論作業需要輸入 JSON Lines 檔案,以及用來儲存輸出的 Cloud Storage bucket 名稱。
輸入資料規定
提交批次要求時,應在輸入內容中指定要送交模型推論的項目。如果是圖片分類模型,您可以使用 JSON Lines 檔案指定要進行推論的圖片清單,然後將 JSON Lines 檔案儲存在 Cloud Storage 值區中。下列範例顯示輸入 JSON Lines 檔案中的單行內容:
{"content": "gs://sourcebucket/datasets/images/source_image.jpg", "mimeType": "image/jpeg"}
要求批次推論
如要發出批次推論要求,可以使用 Google Cloud 控制台或 Vertex AI API。視您提交的輸入項目數量而定,批次推論工作可能需要一些時間才能完成。
Google Cloud 控制台
使用 Google Cloud 控制台要求批次推論。
在 Google Cloud 控制台的 Vertex AI 專區中,前往「Batch predictions」(批次預測) 頁面。
按一下「建立」開啟「新增批次預測」視窗,然後完成下列步驟:
- 輸入批次推論的名稱。
- 在「Model name」(模型名稱) 中,選取要用於這批推論的模型名稱。
- 在「Source path」(來源路徑) 中,指定 JSON Lines 輸入檔案所在的 Cloud Storage 位置。
- 在「Destination path」(目的地路徑) 中,指定要儲存批次推論結果的 Cloud Storage 位置。輸出格式取決於模型目標。以圖片目標為主的 AutoML 模型會輸出 JSON Lines 檔案。
API
使用 Vertex AI API 傳送批次推論要求。
REST
使用任何要求資料之前,請先替換以下項目:
- LOCATION_ID:儲存模型及執行批次推論工作的區域。例如:
us-central1
。 - PROJECT_ID:您的專案 ID
- BATCH_JOB_NAME:批次作業的顯示名稱
- MODEL_ID:用於進行推論的模型 ID
- THRESHOLD_VALUE (選用):Vertex AI 只會傳回信賴分數至少為這個值的推論。預設值為
0.0
。 - MAX_PREDICTIONS (選用):Vertex AI 最多會傳回這麼多項推論,並從信賴分數最高的推論開始。預設值為
10
。 - URI:輸入 JSON Lines 檔案所在的 Cloud Storage URI。
- BUCKET:您的 Cloud Storage 值區
- PROJECT_NUMBER:系統自動為專案產生的專案編號
HTTP 方法和網址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
JSON 要求主體:
{ "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT/locations/LOCATION/models/MODEL_ID", "modelParameters": { "confidenceThreshold": THRESHOLD_VALUE, "maxPredictions": MAX_PREDICTIONS }, "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": ["URI"], }, }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_BUCKET", }, }, }
如要傳送要求,請選擇以下其中一個選項:
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", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": [ "CONTENT" ] } }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "BUCKET" } }, "state": "JOB_STATE_PENDING", "createTime": "2020-05-30T02:58:44.341643Z", "updateTime": "2020-05-30T02:58:44.341643Z", "modelDisplayName": "MODEL_NAME", "modelObjective": "MODEL_OBJECTIVE" }
您可以使用 BATCH_JOB_ID 輪詢批次工作的狀態,直到工作 state
為 JOB_STATE_SUCCEEDED
為止。
Python
如要瞭解如何安裝或更新 Python 適用的 Vertex AI SDK,請參閱「安裝 Python 適用的 Vertex AI SDK」。 詳情請參閱 Python API 參考說明文件。
擷取批次推論結果
Vertex AI 會將批次推論輸出內容傳送至您指定的目的地。
批次推論工作完成後,推論的輸出內容會儲存在您於要求中指定的 Cloud Storage bucket。
批次推論結果範例
以下是圖片分類模型的批次推論結果範例。
{ "instance": {"content": "gs://bucket/image.jpg", "mimeType": "image/jpeg"}, "prediction": { "ids": [1, 2], "displayNames": ["cat", "dog"], "confidences": [0.7, 0.5] } }