使用自訂服務帳戶

本指南說明如何在下列情況下,設定 Vertex AI 使用自訂服務帳戶:

使用自訂服務帳戶的時機

Vertex AI 執行時,通常會使用 Google 為您的 Google Cloud 專案建立及管理的多個服務帳戶之一的權限。如要授予 Vertex AI 在特定情境中對其他 Google Cloud服務的存取權,您可以為 Vertex AI 的服務代理程式新增特定角色

不過,自訂服務代理的權限可能無法提供您想要的精細存取權控管機制。常見用途包括:

  • 減少 Vertex AI 工作和模型的權限。預設的 Vertex AI 服務代理人可存取 BigQuery 和 Cloud Storage。
  • 允許不同工作存取不同的資源。您可能會想要允許許多使用者在單一專案中啟動工作,但只授予每位使用者的工作存取特定 BigQuery 資料表或 Cloud Storage 值區的權限。

舉例來說,您可能會想個別自訂執行的每個自訂訓練工作,以便存取專案以外的不同Google Cloud 資源。

此外,自訂服務代理程式權限不會變更容器可用的權限,該容器會提供自訂訓練 Model 的預測結果。

如要每次執行自訂訓練時自訂存取權,或自訂自訂訓練 Model 預測容器的權限,您必須使用自訂服務帳戶。

預設存取權

本節說明自訂訓練容器和自訂訓練 Model 資源的預測容器可用的預設存取權。使用自訂服務帳戶時,您可以針對特定 CustomJobHyperparameterTuningJobTrainingPipelineDeployedModel 資源覆寫這項存取權。

訓練容器

建立 CustomJobHyperparameterTuningJob 或自訂 TrainingPipeline 時,訓練容器預設會使用Google Cloud 專案的 Vertex AI 自訂程式碼服務代理執行。

進一步瞭解 Vertex AI 自訂程式碼服務代理,包括如何讓代理存取其他 Google Cloud 資源。

預測容器

將自訂訓練的 Model 部署至 Endpoint 時,預測容器會使用由 Vertex AI 管理的服務帳戶執行。這個服務帳戶與 Vertex AI 服務代理程式不同。

預測容器預設使用的服務帳戶,具有讀取模型構件的權限,這些構件可透過 AIP_STORAGE_URI 環境變數儲存的 URI 取得。請勿讓服務帳戶具備任何其他權限。您無法自訂服務帳戶的權限。

設定自訂服務帳戶

以下各節將說明如何設定自訂服務帳戶以供 Vertex AI 使用,以及如何設定 CustomJobHyperparameterTuningJobTrainingPipelineDeployedModel 以使用服務帳戶。請注意,您無法設定自訂服務帳戶,從 Artifact Registry 提取圖片。Vertex AI 會使用預設服務帳戶來擷取圖片。

設定自訂服務帳戶

如要設定自訂服務帳戶,請按照下列步驟操作:

  1. 建立由使用者管理的服務帳戶。使用者代管的服務帳戶可以與 Vertex AI 資源位於相同專案,也可以位於其他專案。

  2. 授予新服務帳戶 IAM 角色,讓您指定 Vertex AI 在自訂訓練或預測期間可使用的 Google Cloud 服務和資源。

  3. 選用:如果使用者代管的服務帳戶位於與訓練工作不同的專案中,您必須將服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator) 授予使用 Vertex AI 的專案 Vertex AI Service Agent。

    gcloud iam service-accounts add-iam-policy-binding \
        --role=roles/iam.serviceAccountTokenCreator \
        --member=serviceAccount:AI_PLATFORM_SERVICE_AGENT \
        CUSTOM_SERVICE_ACCOUNT
    
  4. 選用:如果您也打算使用使用者代管的服務帳戶進行預測,則必須將「服務帳戶管理員」角色 (roles/iam.serviceAccountAdmin) 授予您使用 Vertex AI 的專案的 Vertex AI 服務代理:

    gcloud iam service-accounts add-iam-policy-binding \
      --role=roles/iam.serviceAccountAdmin \
      --member=serviceAccount:AI_PLATFORM_SERVICE_AGENT \
      CUSTOM_SERVICE_ACCOUNT
    

    更改下列內容:

    • AI_PLATFORM_SERVICE_AGENT:專案 Vertex AI 服務代理人的電子郵件地址,格式如下:

      service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com

      如要查看 Vertex AI Service Agent,請前往 Google Cloud 控制台的「IAM」頁面。

      前往身分與存取權管理頁面

    • CUSTOM_SERVICE_ACCOUNT:您在本節第一步驟中建立的新使用者管理服務帳戶電子郵件地址。

為 Vertex AI 資源指定自訂服務帳戶

將 Vertex AI 設定為使用資源的特定服務帳戶,這個程序稱為將服務帳戶附加至資源。以下各節將說明如何將您在上一節建立的服務帳戶連結至多個 Vertex AI 資源。

將服務帳戶連結至自訂訓練資源

如要在自訂訓練期間,設定 Vertex AI 使用新的服務帳戶,請在開始自訂訓練時,在 CustomJobSpec 訊息的 serviceAccount 欄位中指定服務帳戶的電子郵件地址。視您建立的自訂訓練資源類型而定,這個欄位在 API 要求中的放置位置會有所不同:

  • 如果您要建立 CustomJob,請在 CustomJob.jobSpec.serviceAccount 中指定服務帳戶的電子郵件地址。

    進一步瞭解如何建立 CustomJob

  • 如果您要建立 HyperparameterTuningJob,請在 HyperparameterTuningJob.trialJobSpec.serviceAccount 中指定服務帳戶的電子郵件地址。

    進一步瞭解如何建立 HyperparameterTuningJob

  • 如果您要建立自訂 TrainingPipeline 而未進行超參數調整,請在 TrainingPipeline.trainingTaskInputs.serviceAccount 中指定服務帳戶的電子郵件地址。

  • 如果您要建立自訂 TrainingPipeline 並進行超參數調整,請在 TrainingPipeline.trainingTaskInputs.trialJobSpec.serviceAccount 中指定服務帳戶的電子郵件地址。

將服務帳戶連結至提供線上預測的容器

如要將自訂訓練的 Model 預測容器設定為使用新的服務帳戶,請在將 Model 部署至 Endpoint 時,指定服務帳戶的電子郵件地址:

主控台

請參閱「使用Google Cloud 控制台部署模型」一文。指定模型設定時,請在「Service account」下拉式清單中選取服務帳戶。

gcloud

請參閱「使用 Vertex AI API 部署模型」一文。執行 gcloud ai endpoints deploy-model 指令時,請使用 --service-account 旗標指定服務帳戶的電子郵件地址。

使用下列任何指令資料之前,請先替換以下項目:

  • ENDPOINT_ID:端點的 ID。
  • LOCATION_ID:您使用 Vertex AI 的區域。
  • MODEL_ID:要部署的模型 ID。
  • DEPLOYED_MODEL_NAMEDeployedModel 的名稱。您也可以使用 Model 的顯示名稱來命名 DeployedModel
  • MACHINE_TYPE:選用。此部署作業的每個節點使用的機器資源。預設為 n1-standard-2進一步瞭解機器類型
  • MIN_REPLICA_COUNT:此部署作業的節點數量下限。節點數量可視推論負載需求增加或減少,但不得超過節點數量上限,也不能少於這個數量。
  • MAX_REPLICA_COUNT:此部署作業的節點數量上限。節點數量可視推論負載需求增加或減少,但不得超過這個數量,也不能少於節點數量下限。
  • CUSTOM_SERVICE_ACCOUNT:服務帳戶的電子郵件地址。例如:SA_NAME@PROJECT_ID.iam.gserviceaccount.com

執行 gcloud ai endpoints deploy-model 指令:

Linux、macOS 或 Cloud Shell

gcloud ai endpoints deploy-model ENDPOINT_ID \
  --region=LOCATION \
  --model=MODEL_ID \
  --display-name=DEPLOYED_MODEL_NAME \
  --machine-type=MACHINE_TYPE \
  --min-replica-count=MIN_REPLICA_COUNT \
  --max-replica-count=MAX_REPLICA_COUNT \
  --traffic-split=0=100 \
  --service-account=CUSTOM_SERVICE_ACCOUNT

Windows (PowerShell)

gcloud ai endpoints deploy-model ENDPOINT_ID `
  --region=LOCATION `
  --model=MODEL_ID `
  --display-name=DEPLOYED_MODEL_NAME `
  --machine-type=MACHINE_TYPE `
  --min-replica-count=MIN_REPLICA_COUNT `
  --max-replica-count=MAX_REPLICA_COUNT `
  --traffic-split=0=100 `
  --service-account=CUSTOM_SERVICE_ACCOUNT

Windows (cmd.exe)

gcloud ai endpoints deploy-model ENDPOINT_ID ^
  --region=LOCATION ^
  --model=MODEL_ID ^
  --display-name=DEPLOYED_MODEL_NAME ^
  --machine-type=MACHINE_TYPE ^
  --min-replica-count=MIN_REPLICA_COUNT ^
  --max-replica-count=MAX_REPLICA_COUNT ^
  --traffic-split=0=100 ^
  --service-account=CUSTOM_SERVICE_ACCOUNT
 

API

請參閱「使用 Vertex AI API 部署模型」一文。傳送 projects.locations.endpoints.deployModel 要求時,請將 deployedModel.serviceAccount 欄位設為服務帳戶的電子郵件地址。

在程式碼中存取 Google Cloud 服務

如果您按照前面章節中的操作說明,將 Vertex AI 設為使用自訂服務帳戶,則訓練容器或預測容器就能存取服務帳戶可存取的任何 Google Cloud 服務和資源。

如要存取 Google Cloud 服務,請編寫訓練程式碼預測服務程式碼,以便使用應用程式預設憑證 (ADC),並明確指定要存取的資源專案 ID 或專案編號。進一步瞭解如何編寫程式碼來存取其他 Google Cloud服務

後續步驟