Un recurso persistente de Vertex AI es un clúster de larga duración que puedes usar para ejecutar trabajos de entrenamiento personalizados y ejecuciones de flujos de procesamiento. Si usas un recurso persistente para una ejecución de una canalización, puedes asegurarte de que los recursos de computación estén disponibles y reducir el tiempo de inicio de las tareas de la canalización. Los recursos persistentes admiten todas las máquinas virtuales y GPUs que admiten los trabajos de entrenamiento personalizados. Para obtener más información sobre los recursos persistentes, consulta el artículo Descripción general de los recursos persistentes.
En esta página se explica cómo hacer lo siguiente:
Antes de empezar
Antes de crear una ejecución de una canalización con un recurso persistente, debes completar los siguientes requisitos previos.
Definir y compilar un flujo de procesamiento
Define tu flujo de procesamiento y, a continuación, compila la definición del flujo en un archivo YAML. Para obtener más información sobre cómo definir y compilar una canalización, consulta Crear una canalización.
Roles de gestión de identidades y accesos necesarios
Para obtener el permiso que necesitas para crear un recurso persistente,
pide a tu administrador que te conceda el
rol de gestión de identidades y accesos Administrador de Vertex AI (roles/aiplatform.admin
)
en tu proyecto.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene el permiso aiplatform.persistentResources.create
, que es necesario para crear un recurso persistente.
También puedes obtener este permiso con roles personalizados u otros roles predefinidos.
Crear un recurso persistente
Usa los siguientes ejemplos para crear un recurso persistente que puedas asociar a una ejecución de una canalización. Para obtener más información sobre cómo crear recursos persistentes, consulta el artículo Crear un recurso persistente.
gcloud
Para crear un recurso persistente que puedas asociar a una ejecución de un flujo de trabajo, usa el comando gcloud ai persistent-resources create
junto con la marca --enable-custom-service-account
.
Un recurso persistente puede tener uno o varios grupos de recursos. Para crear varios grupos de recursos en un recurso persistente, especifica varias marcas --resource-pool-spec
.
Puedes especificar todas las configuraciones del grupo de recursos como parte de la línea de comandos o usar la marca --config
para especificar la ruta a un archivo YAML que contenga las configuraciones.
Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:
- PROJECT_ID: el ID del proyecto en el que quieres crear el recurso persistente. Google Cloud
- LOCATION: la región en la que quieras crear el recurso persistente. Para ver una lista de las regiones admitidas, consulta Disponibilidad de las funciones.
- PERSISTENT_RESOURCE_ID: ID único definido por el usuario del recurso persistente. Debe empezar por una letra, terminar por una letra o un número y solo puede contener letras minúsculas, números y guiones (-).
- DISPLAY_NAME: opcional. Nombre visible del recurso persistente.
- MACHINE_TYPE: el tipo de máquina virtual que se va a usar. Para ver una lista de las máquinas virtuales compatibles, consulta Tipos de máquinas.
Este campo se corresponde con el campo
machineSpec.machineType
del mensaje de la APIResourcePool
. - REPLICA_COUNT: opcional. Número de réplicas que se van a crear
para el grupo de recursos, si no quieres usar el autoescalado. Este campo se corresponde con el campo
replicaCount
del mensaje de la APIResourcePool
. Debes especificar el número de réplicas si no especificas los campos MIN_REPLICA_COUNT y MAX_REPLICA_COUNT. - MIN_REPLICA_COUNT: opcional. El número mínimo de réplicas si usas el autoescalado para el grupo de recursos. Debes especificar MIN_REPLICA_COUNT y MAX_REPLICA_COUNT para usar el autoescalado.
- MAX_REPLICA_COUNT: opcional. El número máximo de réplicas si usas el autoescalado para el grupo de recursos. Debes especificar MIN_REPLICA_COUNT y MAX_REPLICA_COUNT para usar el autoescalado.
- CONFIG: ruta al archivo de configuración YAML del recurso persistente, que contiene una lista de especificaciones de
ResourcePool
. Si se especifica una opción tanto en el archivo de configuración como en los argumentos de la línea de comandos, los argumentos de la línea de comandos anularán el archivo de configuración. Tenga en cuenta que las claves con guiones bajos no son válidas.Ejemplo de archivo de configuración YAML:
resourcePoolSpecs: machineSpec: machineType: n1-standard-4 replicaCount: 1
Ejecuta el siguiente comando:
Linux, macOS o 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
Deberías recibir una respuesta similar a la siguiente:
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
Ejemplo 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
Configuraciones gcloud
avanzadas
Si quieres especificar opciones de configuración que no estén disponibles en los ejemplos anteriores, puedes usar la marca --config
para especificar la ruta a un archivo config.yaml
en tu entorno local que contenga los campos de persistentResources
. Por ejemplo:
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 probar este ejemplo, sigue las Python instrucciones de configuración de la guía de inicio rápido de Vertex AI con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de Vertex AI.
Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Para crear un recurso persistente que puedas usar con una ejecución de una canalización, asigna el valorTrue
al parámetro enable_custom_service_account
en el objeto ResourceRuntimeSpec
al crear el 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,
)
Haz los cambios siguientes:
- PERSISTENT_RESOURCE_ID: ID único definido por el usuario del recurso persistente. El ID solo puede contener letras minúsculas, números y guiones (
-
). El primer carácter debe ser una letra minúscula y el último carácter debe ser una letra minúscula o un número. - DISPLAY_NAME: opcional. Nombre visible del recurso persistente.
- MACHINE_TYPE: El tipo de máquina virtual (VM) que se va a usar. Para consultar una lista de las máquinas virtuales compatibles, consulta Tipos de máquinas.
Este campo se corresponde con el campo
machineSpec.machineType
del mensaje de la APIResourcePool
. - REPLICA_COUNT: número de réplicas que se crearán al crear este grupo de recursos.
REST
Para crear un recurso PersistentResource
que puedas asociar a una ejecución de una canalización, envía una solicitud POST mediante el método persistentResources/create
con el parámetro enable_custom_service_account
definido como true
en el cuerpo de la solicitud.
Un recurso persistente puede tener uno o varios grupos de recursos. Puedes configurar cada grupo de recursos para que use un número fijo de réplicas o el autoescalado.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- PROJECT_ID: el ID del proyecto en el que quieres crear el recurso persistente. Google Cloud
- LOCATION: la región en la que quieras crear el recurso persistente. Para ver una lista de las regiones admitidas, consulta Disponibilidad de las funciones.
- PERSISTENT_RESOURCE_ID: ID único definido por el usuario del recurso persistente. Debe empezar por una letra, terminar por una letra o un número y solo puede contener letras minúsculas, números y guiones (-).
- DISPLAY_NAME: opcional. Nombre visible del recurso persistente.
- MACHINE_TYPE: el tipo de máquina virtual que se va a usar. Para ver una lista de las máquinas virtuales compatibles, consulta Tipos de máquinas.
Este campo se corresponde con el campo
machineSpec.machineType
del mensaje de la APIResourcePool
. - REPLICA_COUNT: opcional. Número de réplicas que se van a crear
para el grupo de recursos, si no quieres usar el autoescalado. Este campo se corresponde con el campo
replicaCount
del mensaje de la APIResourcePool
. Debes especificar el número de réplicas si no especificas los campos MIN_REPLICA_COUNT y MAX_REPLICA_COUNT. - MIN_REPLICA_COUNT: opcional. El número mínimo de réplicas si usas el autoescalado para el grupo de recursos. Debes especificar MIN_REPLICA_COUNT y MAX_REPLICA_COUNT para usar el autoescalado.
- MAX_REPLICA_COUNT: opcional. El número máximo de réplicas si usas el autoescalado para el grupo de recursos. Debes especificar MIN_REPLICA_COUNT y MAX_REPLICA_COUNT para usar el autoescalado.
Método HTTP y URL:
POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/persistentResources?persistent_resource_id=PERSISTENT_RESOURCE_ID
Cuerpo JSON de la solicitud:
{ "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 tu solicitud, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
{ "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" } } }
Crea una ejecución de flujo de trabajo con el recurso persistente
Para crear un trabajo de flujo de trabajo, primero debe crear una especificación de flujo de trabajo. Una especificación de flujo de trabajo es un objeto en memoria que se crea convirtiendo una definición de flujo de trabajo compilada.
Crear una especificación de flujo de procesamiento
Sigue estas instrucciones para crear una especificación de canalización en memoria que puedas usar para crear la ejecución de la canalización:
Define una canalización y compílala en un archivo YAML. Para obtener más información sobre cómo definir y compilar una canalización, consulta Crear una canalización.
Usa el siguiente código de ejemplo para convertir el archivo YAML de la canalización compilada en una especificación de canalización en memoria.
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)
Sustituye COMPILED_PIPELINE_PATH por la ruta local al archivo YAML de la canalización compilada.
Crear una ejecución de un flujo de procesamiento
Usa el siguiente código de ejemplo de Python para crear una ejecución de flujo de trabajo que use el 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}")
Haz los cambios siguientes:
PROJECT_ID: el Google Cloud proyecto en el que se ejecuta la canalización.
LOCATION: la región en la que se ejecuta el flujo de procesamiento. Para obtener más información sobre las regiones en las que está disponible Vertex AI Pipelines, consulta la guía de ubicaciones de Vertex AI. Si no define este parámetro, Vertex AI Pipelines usará la ubicación predeterminada definida en
aiplatform.init
.PERSISTENT_RESOURCE_ID: ID del recurso persistente que has creado.
PROJECT_NUMBER: el número de proyecto de tu Google Cloud proyecto. Es distinto del ID de proyecto. Puedes encontrar el número de proyecto en la página Configuración del proyecto de la Google Cloud consola.
COMPILED_PIPELINE_PATH: la ruta al archivo YAML de la canalización compilada. Puede ser una ruta local o un URI de Cloud Storage.
WAIT_TIME: el tiempo en milisegundos que se debe esperar si el recurso persistente no está disponible.
TIMEOUT_BEHAVIOR: el comportamiento alternativo de la tarea de la canalización en caso de que se supere el WAIT_TIME. Entre los posibles valores se incluyen los siguientes:
FAIL
La tarea de la canalización falla después de superar el tiempo de espera.FALL_BACK_TO_ON_DEMAND
La tarea de la canalización sigue ejecutándose con los recursos de entrenamiento predeterminados de Vertex AI, sin usar el recurso persistente.
PIPELINE_ROOT: ruta a un URI de Cloud Storage para almacenar los artefactos de la ejecución de la canalización.
PIPELINE_DISPLAY_NAME: el nombre de la ejecución del flujo de procesamiento. La longitud máxima de un nombre visible es de 128 caracteres UTF-8.
PIPELINE_SPEC: la especificación de flujo de procesamiento que has creado en Crear una especificación de flujo de procesamiento.
Siguientes pasos
- Consulta cómo ejecutar una canalización.