使用自訂服務帳戶

本指南說明如何在下列情況下,設定 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時,訓練容器會預設使用專案的 Vertex AI 自訂程式碼服務代理執行。Google Cloud

進一步瞭解 Vertex AI Custom Code Service Agent,包括如何授予該代理程式其他 Google Cloud 資源的存取權。

預測容器

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

預測容器預設使用的服務帳戶有權讀取模型構件,這些構件是 Vertex AI 在儲存於 AIP_STORAGE_URI 環境變數的 URI 中提供的。請勿依賴服務帳戶取得任何其他權限。您無法自訂服務帳戶的權限。

設定自訂服務帳戶

以下各節說明如何設定自訂服務帳戶以搭配使用 Vertex AI,以及如何設定 CustomJobHyperparameterTuningJobTrainingPipelineDeployedModel 來使用服務帳戶。請注意,您無法設定自訂服務帳戶,從 Artifact Registry 提取映像檔。Vertex AI 會使用預設服務帳戶提取映像檔。

設定自訂服務帳戶

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

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

  2. 將 IAM 角色授予新的服務帳戶,以提供 Google Cloud 服務和資源的存取權,讓 Vertex AI 在自訂訓練或預測期間使用。

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

    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 服務代理程式,請前往 Google Cloud 控制台的「IAM」頁面。

      前往「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

限制

如要進行批次推論,即使使用自訂服務帳戶,系統仍會使用 Vertex AI 服務代理存取 BigQuery 和 Cloud Storage。

後續步驟