使用自定义服务账号

本指南介绍了如何将 Vertex AI 配置为在以下情况下使用自定义服务账号:

何时使用自定义服务账号

Vertex AI 在运行时,常常会对应于 Google 为 Google Cloud 项目创建和管理的多个服务账号的权限。如需在特定环境中授予 Vertex AI 对其他 Google Cloud 服务的更多访问权限,您可以向 Vertex AI 服务代理添加特定角色

但是,自定义 Service Agent 的权限可能无法提供您所需的精细访问权限控制。一些常见使用场景包括:

  • 允许对 Vertex AI 作业和模型具有较少的权限。 默认的 Vertex AI 服务代理有权访问 BigQuery 和 Cloud Storage。
  • 允许不同的作业访问不同的资源。 您可能希望允许许多用户在单个项目中启动作业,但仅允许每个用户的作业访问特定的 BigQuery 表或 Cloud Storage 存储桶。

例如,您可能希望为运行项目以外的其他 Google Cloud 资源单独自定义运行每个自定义训练作业

此外,自定义 Service Agent 的权限不会更改可对经过自定义训练的 Model 执行预测的容器的可用权限。

要在每次执行自定义训练时自定义访问权限,或自定义训练 Model 的预测容器的权限,您必须使用自定义服务账号。

默认访问权限

本部分介绍自定义训练容器可用的默认访问权限以及自定义训练的 Model 资源的预测容器。使用自定义服务账号时,您需要为特定 CustomJobHyperparameterTuningJobTrainingPipelineDeployedModel 资源替换此访问权限。

训练容器

创建 CustomJobHyperparameterTuningJob 或自定义 TrainingPipeline 时,默认情况下,训练容器利用 Google Cloud 项目的 Vertex AI Custom Service Agent 运行。

详细了解 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 角色,这些角色允许访问您希望 Vertex AI 在自定义训练期间能够使用的 Google Cloud 服务和资源预测。

  3. 可选:如果用户管理的服务账号与训练作业属于不同的项目,请配置用户管理的服务账号,以便将其与训练作业关联。

  4. 可选:如果您还计划将用户管理的服务账号用于预测,则必须向您在其中使用 Vertex AI 的项目的 Vertex AI Service Agent 授予 Service Account Admin 角色 (roles/iam.serviceAccountAdmin):

    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 Agent 的电子邮件地址,格式如下:

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

      要查找 Vertex AI Service Agent,请进入 Google Cloud 控制台中的 IAM 页面。

      进入 IAM

    • CUSTOM_SERVICE_ACCOUNT:您在本节的上一步中创建的新用户管理服务账号的电子邮件地址。

为 Vertex AI 资源指定自定义服务账号

将 Vertex AI 配置为使用特定资源的服务账号的过程称为将服务账号附加到资源。以下部分介绍如何将您在上一部分中创建的服务账号附加到多个 Vertex AI 资源中。

将服务账号关联到自定义训练资源

如需在自定义训练期间将 Vertex AI 配置为使用您的新服务账号,请在 serviceAccount 字段 CustomJobSpec 开始构建自定义训练。根据您正在创建的自定义训练资源,此字段在 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 控制台部署模型进行操作。指定模型设置时,请在服务账号下拉列表中选择服务账号。

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 服务

后续步骤