配置在永久性资源上运行的流水线

Vertex AI 永久性资源指的是长时间运行的集群,您可以使用此类集群来运行自定义训练作业和流水线运行。通过在运行流水线时使用永久性资源,您可以帮助确保计算资源的可用性并缩短流水线任务启动时间。永久性资源可与自定义训练作业支持的所有虚拟机和 GPU 搭配使用。如需详细了解永久性资源,请参阅永久性资源概览

本页面介绍如何执行以下操作:

准备工作

您必须先满足以下前提条件,然后才能使用永久性资源创建流水线运行。

定义并编译流水线

定义流水线,然后将流水线定义编译为 YAML 文件。如需详细了解如何定义和编译流水线,请参阅构建流水线

所需 IAM 角色

如需获得创建永久性资源所需的权限,请让管理员向您授予项目的 Vertex AI Administrator (roles/aiplatform.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含创建永久性资源所需的 aiplatform.persistentResources.create 权限。

您也可以使用自定义角色或其他预定义角色来获取此权限。

创建永久性资源

使用以下示例创建可与流水线运行关联的永久性资源。如需详细了解如何创建永久性资源,请参阅创建永久性资源

gcloud

如需创建可与流水线运行关联的永久性资源,请将 gcloud ai persistent-resources create 命令--enable-custom-service-account 标志结合使用。

永久性资源可以具有一个或多个资源池。如需在一个永久性资源中创建多个资源池,请指定多个 --resource-pool-spec 标志。

您可以在命令行中指定所有资源池配置,也可以使用 --config 标志指定包含配置的 YAML 文件的路径。

在使用下面的命令数据之前,请先进行以下替换:

  • PROJECT_ID:要在其中创建永久性资源的 Google Cloud 项目的项目 ID。
  • LOCATION:要创建永久性资源的区域。如需查看受支持区域的列表,请参阅功能可用性
  • PERSISTENT_RESOURCE_ID:永久性资源的唯一用户定义 ID。该 ID 必须以字母开头,以字母或数字结尾,并且只能包含小写字母、数字和连字符 (-)。
  • DISPLAY_NAME:可选。永久性资源的显示名称。
  • MACHINE_TYPE:要使用的虚拟机 (VM) 类型。如需查看支持的虚拟机列表,请参阅机器类型。此字段对应于 ResourcePool API 消息中的 machineSpec.machineType 字段。
  • REPLICA_COUNT:可选。要为资源池创建的副本数(如果您不想使用自动扩缩)。此字段对应于 ResourcePool API 消息中的 replicaCount 字段。 如果您未指定 MIN_REPLICA_COUNTMAX_REPLICA_COUNT 字段,则必须指定副本数。
  • MIN_REPLICA_COUNT:可选。副本数下限(如果您对资源池使用自动扩缩)。您必须同时指定 MIN_REPLICA_COUNTMAX_REPLICA_COUNT 才能使用自动扩缩。
  • MAX_REPLICA_COUNT:可选。副本数上限(如果您对资源池使用自动扩缩)。您必须同时指定 MIN_REPLICA_COUNTMAX_REPLICA_COUNT 才能使用自动扩缩。
  • CONFIG:永久性资源 YAML 配置文件的路径,其中包含 ResourcePool 规范列表。如果配置文件和命令行参数中都指定了选项,则命令行参数会替换配置文件。请注意,带有下划线的键会被认为无效。

    示例 YAML 配置文件:

    resourcePoolSpecs:
      machineSpec:
        machineType: n1-standard-4
      replicaCount: 1
        

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud ai persistent-resources create \
    --persistent-resource-id=PERSISTENT_RESOURCE_ID \
    --display-name=DISPLAY_NAME \
    --project=PROJECT_ID \
    --region=LOCATION \
    --resource-pool-spec="replica-count=REPLICA_COUNT,machine-type=MACHINE_TYPE,min-replica-count=MIN_REPLICA_COUNT,max-replica-count=MAX_REPLICA_COUNT" \
    --enable-custom-service-account

Windows (PowerShell)

gcloud ai persistent-resources create `
    --persistent-resource-id=PERSISTENT_RESOURCE_ID `
    --display-name=DISPLAY_NAME `
    --project=PROJECT_ID `
    --region=LOCATION `
    --resource-pool-spec="replica-count=REPLICA_COUNT,machine-type=MACHINE_TYPE,min-replica-count=MIN_REPLICA_COUNT,max-replica-count=MAX_REPLICA_COUNT" `
    --enable-custom-service-account

Windows (cmd.exe)

gcloud ai persistent-resources create ^
    --persistent-resource-id=PERSISTENT_RESOURCE_ID ^
    --display-name=DISPLAY_NAME ^
    --project=PROJECT_ID ^
    --region=LOCATION ^
    --resource-pool-spec="replica-count=REPLICA_COUNT,machine-type=MACHINE_TYPE,min-replica-count=MIN_REPLICA_COUNT,max-replica-count=MAX_REPLICA_COUNT" ^
    --enable-custom-service-account

您应该会收到类似如下所示的响应:

Using endpoint [https://us-central1-aiplatform.googleapis.com/]
Operation to create PersistentResource [projects/PROJECT_NUMBER/locations/us-central1/persistentResources/mypersistentresource/operations/OPERATION_ID] is submitted successfully.

You can view the status of your PersistentResource create operation with the command

  $ gcloud ai operations describe projects/sample-project/locations/us-central1/operations/OPERATION_ID

示例 gcloud 命令:

gcloud ai persistent-resources create \
    --persistent-resource-id=my-persistent-resource \
    --region=us-central1 \
    --resource-pool-spec="replica-count=4,machine-type=n1-standard-4"
    --enable-custom-service-account

gcloud 中的高级配置

如果您想指定前面示例中未提供的配置选项,则可以使用 --config 标志指定本地环境中的 config.yaml 文件的路径,该文件包含 persistentResources 的字段。例如:

gcloud ai persistent-resources create \
    --persistent-resource-id=PERSISTENT_RESOURCE_ID \
    --project=PROJECT_ID \
    --region=LOCATION \
    --config=CONFIG
    --enable-custom-service-account

Python

在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Python 设置说明执行操作。 如需了解详情,请参阅 Vertex AI Python API 参考文档

如需向 Vertex AI 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证

如需创建可与流水线运行搭配使用的永久性资源,请在创建永久性资源时将 ResourceRuntimeSpec 对象中的 enable_custom_service_account 参数设置为 True

from google.cloud.aiplatform.preview import persistent_resource
from google.cloud.aiplatform_v1beta1.types.persistent_resource import ResourcePool
from google.cloud.aiplatform_v1beta1.types.machine_resources import MachineSpec

my_example_resource = persistent_resource.PersistentResource.create(
    persistent_resource_id='PERSISTENT_RESOURCE_ID',
    display_name='DISPLAY_NAME',
    resource_pools=[
        ResourcePool(
            machine_spec=MachineSpec(
                machine_type='MACHINE_TYPE'
            ),
            replica_count=REPLICA_COUNT
        )
    ],
    enable_custom_service_account=True,
)

替换以下内容:

  • PERSISTENT_RESOURCE_ID:永久性资源的唯一用户定义 ID。该 ID 只能包含小写字母、数字和连字符 (-)。第一个字符必须是小写字母,最后一个字符必须是小写字母或数字。
  • DISPLAY_NAME:可选。永久性资源的显示名称。
  • MACHINE_TYPE:要使用的虚拟机 (VM) 类型。如需查看支持的虚拟机列表,请参阅机器类型。此字段对应于 ResourcePool API 消息中的 machineSpec.machineType 字段。
  • REPLICA_COUNT:创建此资源池时要创建的副本数。

REST

如需创建可与流水线运行关联的 PersistentResource 资源,请使用 persistentResources/create 方法发送 POST 请求,并在请求正文中将 enable_custom_service_account 参数设置为 true

永久性资源可以具有一个或多个资源池。您可以将每个资源池配置为使用固定数量的副本或自动扩缩。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:要在其中创建永久性资源的 Google Cloud 项目的项目 ID。
  • LOCATION:要创建永久性资源的区域。如需查看受支持区域的列表,请参阅功能可用性
  • PERSISTENT_RESOURCE_ID:永久性资源的唯一用户定义 ID。该 ID 必须以字母开头,以字母或数字结尾,并且只能包含小写字母、数字和连字符 (-)。
  • DISPLAY_NAME:可选。永久性资源的显示名称。
  • MACHINE_TYPE:要使用的虚拟机 (VM) 类型。如需查看支持的虚拟机列表,请参阅机器类型。此字段对应于 ResourcePool API 消息中的 machineSpec.machineType 字段。
  • REPLICA_COUNT:可选。要为资源池创建的副本数(如果您不想使用自动扩缩)。此字段对应于 ResourcePool API 消息中的 replicaCount 字段。 如果您未指定 MIN_REPLICA_COUNTMAX_REPLICA_COUNT 字段,则必须指定副本数。
  • MIN_REPLICA_COUNT:可选。副本数下限(如果您对资源池使用自动扩缩)。您必须同时指定 MIN_REPLICA_COUNTMAX_REPLICA_COUNT 才能使用自动扩缩。
  • MAX_REPLICA_COUNT:可选。副本数上限(如果您对资源池使用自动扩缩)。您必须同时指定 MIN_REPLICA_COUNTMAX_REPLICA_COUNT 才能使用自动扩缩。

HTTP 方法和网址:

POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/persistentResources?persistent_resource_id=PERSISTENT_RESOURCE_ID

请求 JSON 正文:

{
  "display_name": "DISPLAY_NAME",
  "resource_pools": [
    {
      "machine_spec": {
        "machine_type": "MACHINE_TYPE"
      },
      "replica_count": REPLICA_COUNT,
      "autoscaling_spec": {
        "min_replica_count": MIN_REPLICA_COUNT,
        "max_replica_count": MAX_REPLICA_COUNT
      }
    }
  ],
  "resource_runtime_spec": {
    "service_account_spec": {
      "enable_custom_service_account": true
    }
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/persistentResources/mypersistentresource/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreatePersistentResourceOperationMetadata",
    "genericMetadata": {
      "createTime": "2023-02-08T21:17:15.009668Z",
      "updateTime": "2023-02-08T21:17:15.009668Z"
    }
  }
}

使用永久性资源创建流水线运行

如需创建流水线作业,您必须先创建流水线规范。流水线规范是一种内存中对象,您可以通过转换已编译的流水线定义来创建该对象。

创建流水线规范

按照以下说明创建内存中流水线规范,之后您可以使用该规范来创建流水线运行:

  1. 定义流水线并将其编译为 YAML 文件。如需详细了解如何定义和编译流水线,请参阅构建流水线

  2. 使用以下代码示例将已编译的流水线 YAML 文件转换为内存中流水线规范。

    import yaml
    with open("COMPILED_PIPELINE_PATH", "r") as stream:
      try:
        pipeline_spec = yaml.safe_load(stream)
        print(pipeline_spec)
      except yaml.YAMLError as exc:
        print(exc)
    

    COMPILED_PIPELINE_PATH 替换为已编译的流水线 YAML 文件的本地路径。

创建流水线运行

使用以下 Python 代码示例创建使用永久性资源的流水线运行:

# Import aiplatform and the appropriate API version v1beta1
from google.cloud import aiplatform, aiplatform_v1beta1
from google.cloud.aiplatform_v1beta1.types import pipeline_job as pipeline_job_types

# Initialize the Vertex SDK using PROJECT_ID and LOCATION
aiplatform.init(project='PROJECT_ID', location='LOCATION')

# Create the API Endpoint
client_options = {
    "api_endpoint": f"LOCATION-aiplatform.googleapis.com"
}

# Initialize the PipeLineServiceClient
client = aiplatform_v1beta1.PipelineServiceClient(client_options=client_options)

# Construct the runtime detail
pr_runtime_detail = pipeline_job_types.PipelineJob.RuntimeConfig.PersistentResourceRuntimeDetail(
    persistent_resource_name=(
        f"projects/PROJECT_NUMBER/"
        f"locations/LOCATION/"
        f"persistentResources/PERSISTENT_RESOURCE_ID"
    ),
    task_resource_unavailable_wait_time_ms=WAIT_TIME,
    task_resource_unavailable_timeout_behavior='TIMEOUT_BEHAVIOR',
)

# Construct the default runtime configuration block
default_runtime = pipeline_job_types.PipelineJob.RuntimeConfig.DefaultRuntime(
    persistent_resource_runtime_detail=pr_runtime_detail
)

# Construct the main runtime configuration
runtime_config = pipeline_job_types.PipelineJob.RuntimeConfig(
    gcs_output_directory='PIPELINE_ROOT',
    parameter_values={
        'project_id': 'PROJECT_ID'
    },
    default_runtime=default_runtime
)

# Construct the pipeline job object
pipeline_job = pipeline_job_types.PipelineJob(
    display_name='PIPELINE_DISPLAY_NAME',
    pipeline_spec=PIPELINE_SPEC,
    runtime_config=runtime_config,
)

# Construct the request
parent_path = f"projects/PROJECT_ID/locations/LOCATION"
request = aiplatform_v1beta1.CreatePipelineJobRequest(
    parent=parent_path,
    pipeline_job=pipeline_job,
)

# Make the API Call to create the pipeline job
response = client.create_pipeline_job(request=request)

# Construct the Google Cloud console link
job_id = response.name.split('/')[-1]
console_link = (
    f"https://console.cloud.google.com/vertex-ai/locations/LOCATION"
    f"/pipelines/runs/{job_id}"
    f"?project=PROJECT_ID"
)

# Print the Google Cloud console link to the pipeline run
print(f"View Pipeline Run in Google Cloud console: {console_link}")

替换以下内容:

  • PROJECT_ID:流水线在其中运行的 Google Cloud 项目。

  • LOCATION:在其中执行流水线运行的区域。如需详细了解提供 Vertex AI Pipelines 的区域,请参阅 Vertex AI 位置指南。如果您未设置此参数,Vertex AI Pipelines 会使用 aiplatform.init 中设置的默认位置。

  • PERSISTENT_RESOURCE_ID:您创建的永久性资源的 ID。

  • PROJECT_NUMBER:您的 Google Cloud项目的项目编号。项目编号不同于项目 ID。您可以在 Google Cloud 控制台的项目设置页面上找到项目编号。

  • COMPILED_PIPELINE_PATH:已编译的流水线 YAML 文件的路径。该路径可以是本地路径或 Cloud Storage URI。

  • WAIT_TIME:永久性资源不可用的情况下的等待时间(以毫秒为单位)。

  • TIMEOUT_BEHAVIOR:超过 WAIT_TIME 的情况下的流水线任务回退行为。可能值包括:

    • FAIL,流水线任务在超出等待时间后失败。

    • FALL_BACK_TO_ON_DEMAND,流水线任务会继续使用默认的 Vertex AI 训练资源运行,而不会使用永久性资源。

  • PIPELINE_ROOT:用于存储流水线运行制品的 Cloud Storage URI 的路径。

  • PIPELINE_DISPLAY_NAME:流水线运行的名称。显示名称的长度上限为 128 个 UTF-8 字符。

  • PIPELINE_SPEC:您在创建流水线规范部分创建的流水线规范。

后续步骤