自訂推論處理常式

自訂推論常式可讓您建構含有預先處理和後續處理程式碼的自訂容器,不必處理設定 HTTP 伺服器或從頭建構容器的詳細資料。您可以使用前處理作業來正規化及轉換輸入內容,或呼叫外部服務來取得額外資料,並使用後處理作業來格式化模型推論或執行業務邏輯。

下圖說明使用者工作流程 (包括使用和不使用自訂推論常式)。

主要差異如下:

  • 您不需要編寫模型伺服器或 Dockerfile。系統會提供模型伺服器,也就是代管模型的 HTTP 伺服器。

  • 您可以在本機部署及偵錯模型,加快開發期間的疊代週期。

建構及部署自訂容器

本節說明如何使用 CPR 建構自訂容器,其中包含前處理和後處理邏輯,並部署至本機和線上端點。

設定

您必須在環境中安裝 Vertex AI SDK for PythonDocker

撰寫自訂 Predictor 推論介面

實作 Predictor 介面。

如需範例,請參閱 Sklearn 的 Predictor 實作

撰寫自訂 Handler (選用)

自訂處理常式可存取原始要求物件,因此在極少數情況下,您需要自訂網路伺服器相關邏輯時,這項功能就非常實用,例如支援額外的要求和回應標頭,或還原序列化非 JSON 格式的推論要求。

以下是實作 Predictor 和 Handler 的範例筆記本

雖然不是必要做法,但為了提升程式碼的組織性和重複使用性,建議您在 Handler 中實作網頁伺服器邏輯,並在 Predictor 中實作 ML 邏輯,如預設處理常式所示。

建構自訂容器

將自訂程式碼和額外的 requirements.txt 檔案 (如需在映像檔中安裝任何套件) 放在目錄中。

使用 Python 適用的 Vertex AI SDK 建構自訂容器,步驟如下:

from google.cloud.aiplatform.prediction import LocalModel

# {import your predictor and handler}

local_model = LocalModel.build_cpr_model(
    {PATH_TO_THE_SOURCE_DIR},
    f"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}",
    predictor={PREDICTOR_CLASS},
    handler={HANDLER_CLASS},
    requirements_path={PATH_TO_REQUIREMENTS_TXT},
)

您可以檢查容器規格,取得實用資訊,例如映像檔 URI 和環境變數。

local_model.get_serving_container_spec()

在本機執行容器 (選用)

只有在您想在本機執行及測試容器時,才需要執行這個步驟,這有助於加快疊代速度。在下列範例中,您會部署至本機端點,並傳送推論要求 (要求主體的格式請參閱這個頁面)。

with local_model.deploy_to_local_endpoint(
    artifact_uri={GCS_PATH_TO_MODEL_ARTIFACTS},
    credential_path={PATH_TO_CREDENTIALS},
) as local_endpoint:
    health_check_response = local_endpoint.run_health_check()
    predict_response = local_endpoint.predict(
        request_file={PATH_TO_INPUT_FILE},
        headers={ANY_NEEDED_HEADERS},
    )

列印健康狀態檢查和推論回應。

print(health_check_response, health_check_response.content)
print(predict_response, predict_response.content)

列印所有容器記錄。

local_endpoint.print_container_logs(show_all=True)

上傳至 Vertex AI Model Registry

模型需要存取模型構件 (訓練產生的檔案),因此請務必將這些檔案上傳至 Google Cloud Storage。

將映像檔推送至 Artifact Registry

local_model.push_image()

然後上傳至 Model Registry。

from google.cloud import aiplatform

model = aiplatform.Model.upload(
    local_model=local_model,
    display_name={MODEL_DISPLAY_NAME},
    artifact_uri={GCS_PATH_TO_MODEL_ARTIFACTS},
)

模型上傳至 Model Registry 後,即可用於取得批次推論結果,或部署至 Vertex AI 端點以取得線上推論結果。

部署至 Vertex AI 端點

endpoint = model.deploy(machine_type="n1-standard-4")

模型部署完畢後,即可取得線上推論結果

筆記本範例

這些範例說明如何使用 Vertex AI Inference,以自訂前處理和後處理方式部署模型。