Configure uma execução de pipeline num recurso persistente

Um recurso persistente do Vertex AI é um cluster de execução prolongada que pode usar para executar tarefas de preparação personalizadas e execuções de pipelines. Ao usar um recurso persistente para uma execução de pipeline, pode ajudar a garantir a disponibilidade de recursos de computação e reduzir o tempo de arranque da tarefa do pipeline. Os recursos persistentes suportam todas as VMs e GPUs suportadas por tarefas de programação personalizadas. Para saber mais sobre os recursos persistentes, consulte o artigo Vista geral dos recursos persistentes.

Esta página mostra como fazer o seguinte:

Antes de começar

Antes de poder criar uma execução de pipeline com um recurso persistente, tem de concluir os seguintes pré-requisitos.

Defina e compile um pipeline

Defina o seu pipeline e, em seguida, compile a definição do pipeline num ficheiro YAML. Para mais informações sobre como definir e compilar um pipeline, consulte o artigo Crie um pipeline.

Funções de IAM necessárias

Para receber a autorização de que precisa para criar um recurso persistente, peça ao seu administrador para lhe conceder a função do IAM administrador do Vertex AI (roles/aiplatform.admin) no seu projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém a autorização aiplatform.persistentResources.create , que é necessária para criar um recurso persistente.

Também pode obter esta autorização com funções personalizadas ou outras funções predefinidas.

Crie um recurso persistente

Use os exemplos seguintes para criar um recurso persistente que pode associar a uma execução de pipeline. Para mais informações sobre a criação de recursos persistentes, consulte o artigo Crie um recurso persistente.

gcloud

Para criar um recurso persistente que pode associar a uma execução de pipeline, use o comando gcloud ai persistent-resources create juntamente com a flag --enable-custom-service-account.

Um recurso persistente pode ter um ou mais conjuntos de recursos. Para criar vários pools de recursos num recurso persistente, especifique várias flags --resource-pool-spec.

Pode especificar todas as configurações do conjunto de recursos como parte da linha de comandos ou usar o sinalizador --config para especificar o caminho para um ficheiro YAML que contém as configurações.

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

  • PROJECT_ID: O ID do projeto do Google Cloud projeto onde quer criar o recurso persistente.
  • LOCATION: a região onde quer criar o recurso persistente. Para ver uma lista das regiões suportadas, consulte o artigo Disponibilidade das funcionalidades.
  • PERSISTENT_RESOURCE_ID: um ID exclusivo definido pelo utilizador para o recurso persistente. Tem de começar por uma letra, terminar com uma letra ou um número e conter apenas letras minúsculas, números e hífenes (-).
  • DISPLAY_NAME: opcional. O nome a apresentar do recurso persistente.
  • MACHINE_TYPE: O tipo de máquina virtual (VM) a usar. Para ver uma lista das VMs suportadas, consulte a secção Tipos de máquinas. Este campo corresponde ao campo machineSpec.machineType na mensagem da API ResourcePool.
  • REPLICA_COUNT: opcional. O número de réplicas a criar para o conjunto de recursos, se não quiser usar o dimensionamento automático. Este campo corresponde ao campo replicaCount na mensagem da API ResourcePool. Tem de especificar a quantidade de réplicas se não especificar os campos MIN_REPLICA_COUNT e MAX_REPLICA_COUNT.
  • MIN_REPLICA_COUNT: opcional. O número mínimo de réplicas se estiver a usar o dimensionamento automático para o conjunto de recursos. Tem de especificar MIN_REPLICA_COUNT e MAX_REPLICA_COUNT para usar o ajuste de escala automático.
  • MAX_REPLICA_COUNT: opcional. O número máximo de réplicas se estiver a usar o dimensionamento automático para o conjunto de recursos. Tem de especificar MIN_REPLICA_COUNT e MAX_REPLICA_COUNT para usar o ajuste de escala automático.
  • CONFIG: caminho para o ficheiro de configuração YAML do recurso persistente, que contém uma lista de especificações ResourcePool. Se uma opção for especificada no ficheiro de configuração e nos argumentos da linha de comandos, os argumentos da linha de comandos substituem o ficheiro de configuração. Tenha em atenção que as chaves com carateres de sublinhado são consideradas inválidas.

    Exemplo de ficheiro de configuração YAML:

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

Execute o seguinte comando:

Linux, macOS ou 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

Deve receber uma resposta semelhante à seguinte:

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

Exemplo de comando 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

Configurações gcloud avançadas

Se quiser especificar opções de configuração que não estão disponíveis nos exemplos anteriores, pode usar a flag --config para especificar o caminho para um ficheiro config.yaml no seu ambiente local que contenha os campos de persistentResources. Por exemplo:

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

Python

Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do Vertex AI com bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Python Vertex AI.

Para se autenticar no Vertex AI, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

Para criar um recurso persistente que pode usar com uma execução de pipeline, defina o parâmetro enable_custom_service_account como True no objeto ResourceRuntimeSpec ao criar o recurso persistente.

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,
)

Substitua o seguinte:

  • PERSISTENT_RESOURCE_ID: um ID exclusivo definido pelo utilizador para o recurso persistente. O ID tem de conter apenas letras minúsculas, números e hífenes (-). O primeiro caráter tem de ser uma letra minúscula e o último caráter tem de ser uma letra minúscula ou um número.
  • DISPLAY_NAME: opcional. O nome a apresentar do recurso persistente.
  • MACHINE_TYPE: o tipo de máquina virtual (VM) a usar. Para ver uma lista das VMs suportadas, consulte os tipos de máquinas. Este campo corresponde ao campo machineSpec.machineType na mensagem da API ResourcePool.
  • REPLICA_COUNT: o número de réplicas a criar quando criar este conjunto de recursos.

REST

Para criar um recurso PersistentResource que pode associar a uma execução de pipeline, envie um pedido POST através do método persistentResources/create com o parâmetro enable_custom_service_account definido como true no corpo do pedido.

Um recurso persistente pode ter um ou mais conjuntos de recursos. Pode configurar cada conjunto de recursos para usar um número fixo de réplicas ou o dimensionamento automático.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: O ID do projeto do Google Cloud projeto onde quer criar o recurso persistente.
  • LOCATION: a região onde quer criar o recurso persistente. Para ver uma lista das regiões suportadas, consulte o artigo Disponibilidade das funcionalidades.
  • PERSISTENT_RESOURCE_ID: um ID exclusivo definido pelo utilizador para o recurso persistente. Tem de começar por uma letra, terminar com uma letra ou um número e conter apenas letras minúsculas, números e hífenes (-).
  • DISPLAY_NAME: opcional. O nome a apresentar do recurso persistente.
  • MACHINE_TYPE: O tipo de máquina virtual (VM) a usar. Para ver uma lista das VMs suportadas, consulte a secção Tipos de máquinas. Este campo corresponde ao campo machineSpec.machineType na mensagem da API ResourcePool.
  • REPLICA_COUNT: opcional. O número de réplicas a criar para o conjunto de recursos, se não quiser usar o dimensionamento automático. Este campo corresponde ao campo replicaCount na mensagem da API ResourcePool. Tem de especificar a quantidade de réplicas se não especificar os campos MIN_REPLICA_COUNT e MAX_REPLICA_COUNT.
  • MIN_REPLICA_COUNT: opcional. O número mínimo de réplicas se estiver a usar o dimensionamento automático para o conjunto de recursos. Tem de especificar MIN_REPLICA_COUNT e MAX_REPLICA_COUNT para usar o ajuste de escala automático.
  • MAX_REPLICA_COUNT: opcional. O número máximo de réplicas se estiver a usar o dimensionamento automático para o conjunto de recursos. Tem de especificar MIN_REPLICA_COUNT e MAX_REPLICA_COUNT para usar o ajuste de escala automático.

Método HTTP e URL:

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

Corpo JSON do pedido:

{
  "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
    }
  }
}

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

{
  "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"
    }
  }
}

Crie uma execução do pipeline com o recurso persistente

Para criar uma tarefa de pipeline, primeiro tem de criar uma especificação de pipeline. Uma especificação de pipeline é um objeto na memória que cria convertendo uma definição de pipeline compilada.

Crie uma especificação do pipeline

Siga estas instruções para criar uma especificação de pipeline na memória que pode usar para criar a execução do pipeline:

  1. Defina um pipeline e compile-o num ficheiro YAML. Para mais informações sobre como definir e compilar um pipeline, consulte o artigo Crie um pipeline.

  2. Use o seguinte exemplo de código para converter o ficheiro YAML do pipeline compilado numa especificação do pipeline na memória.

    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)
    

    Substitua COMPILED_PIPELINE_PATH pelo caminho local para o ficheiro YAML da pipeline compilada.

Crie uma execução de pipeline

Use o seguinte exemplo de código Python para criar uma execução de pipeline que usa o recurso persistente:

# 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}")

Substitua o seguinte:

  • PROJECT_ID: o Google Cloud projeto no qual o pipeline é executado.

  • LOCATION: a região onde a execução do pipeline é feita. Para mais informações sobre as regiões onde o Vertex AI Pipelines está disponível, consulte o guia de localizações da Vertex AI. Se não definir este parâmetro, o Vertex AI Pipelines usa a localização predefinida definida em aiplatform.init.

  • PERSISTENT_RESOURCE_ID: O ID do recurso persistente que criou.

  • PROJECT_NUMBER: o número do projeto do seu Google Cloud projeto. Isto é diferente do ID do projeto. Pode encontrar o número do projeto na página Definições do projeto na Google Cloud consola.

  • COMPILED_PIPELINE_PATH: o caminho para o ficheiro YAML da pipeline compilada. Pode ser um caminho local ou um URI do Cloud Storage.

  • WAIT_TIME: O tempo em milissegundos a aguardar se o recurso persistente não estiver disponível.

  • TIMEOUT_BEHAVIOR: o comportamento alternativo da tarefa de pipeline caso o limite de WAIT_TIME seja excedido. Os valores possíveis incluem o seguinte:

    • FAIL A tarefa da pipeline falha após exceder o tempo de espera.

    • FALL_BACK_TO_ON_DEMAND A tarefa do pipeline continua a ser executada com os recursos de preparação do Vertex AI predefinidos, sem usar o recurso persistente.

  • PIPELINE_ROOT: o caminho para um URI do Cloud Storage para armazenar os artefactos da execução da sua pipeline.

  • PIPELINE_DISPLAY_NAME: o nome da execução da pipeline. O comprimento máximo de um nome a apresentar é de 128 carateres UTF-8.

  • PIPELINE_SPEC: a especificação da pipeline que criou em Crie uma especificação da pipeline.

O que se segue?