Crear, subir y usar una plantilla de flujo de procesamiento

Una plantilla de canalización es un recurso que puedes usar para publicar una definición de flujo de trabajo de forma que se pueda reutilizar varias veces, por un solo usuario o por varios usuarios.

El cliente de registro del SDK de Kubeflow Pipelines es una nueva interfaz de cliente que puedes usar con un servidor de registro compatible, como Artifact Registry, para controlar las versiones de tus plantillas de Kubeflow Pipelines (KFP). Para obtener más información, consulta Usar la plantilla en un cliente de registro del SDK de Kubeflow Pipelines.

En esta página se explica cómo hacer lo siguiente:

  • Crear una plantilla de flujo de trabajo de KFP
  • Usa el cliente de registro del SDK de Kubeflow Pipelines para subir la plantilla a un repositorio de plantillas de canalizaciones
  • Usar la plantilla en el cliente de Kubeflow Pipelines

Antes de empezar

Antes de compilar y ejecutar tu canalización, sigue estas instrucciones para configurar tu proyecto y tu entorno de desarrollo en la consola. Google Cloud Google Cloud

  1. Instala la versión 2 o una posterior del SDK de Kubeflow Pipelines.

    pip install --upgrade "kfp>=2,<3"
    
  1. Instala la versión 1.15.0 o una posterior del SDK de Vertex AI para Python.
    (Opcional) Antes de instalarlo, ejecuta el siguiente comando para ver qué versión del SDK de Vertex AI para Python tienes instalada:

      pip freeze | grep google-cloud-aiplatform
    
  2. (Opcional) Instala la versión 390.0.0 o posterior de Google Cloud CLI.

  3. Habilita la API Artifact Registry.

Configurar permisos

Si aún no has configurado tu proyecto de la CLI de gcloud para Vertex AI Pipelines, sigue las instrucciones de Configurar tu proyecto para Vertex AI Pipelines Google Cloud .

Además, asigna los siguientes permisos predefinidos de gestión de identidades y accesos para usar Artifact Registry como registro de plantillas:

  • roles/artifactregistry.admin: asigna este rol para crear y gestionar un repositorio.
  • roles/artifactregistry.repoAdmin o roles/artifactregistry.writer: asigna cualquiera de estos roles para gestionar las plantillas de un repositorio.
  • roles/artifactregistry.reader: asigna este rol para descargar plantillas de un repositorio.
  • roles/artifactregistry.reader: Asigna este rol a una cuenta de servicio asociada a Vertex AI Pipelines para crear una ejecución de un flujo de trabajo a partir de una plantilla.

Para obtener más información sobre los roles predefinidos de Identity and Access Management de Artifact Registry, consulta el artículo Roles predefinidos de Artifact Registry.

Usa el siguiente ejemplo para asignar roles:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=PRINCIPAL \
    --role=ROLE

Haz los cambios siguientes:

  • PROJECT_ID: el proyecto en el que quieres crear la canalización.
  • PRINCIPAL: la entidad a la que vas a añadir permisos.
  • ROLE: el rol de gestión de identidades y accesos que quieres conceder al principal.

Consulta Roles y permisos en la documentación de Artifact Registry para obtener más información sobre lo siguiente:

Crear un repositorio en Artifact Registry

A continuación, creará un repositorio en Artifact Registry para sus plantillas de canalización.

Consola

  1. Abre Vertex AI Pipelines en la Google Cloud consola.

    Ve a Vertex AI Pipelines.

  2. Haz clic en la pestaña Tus plantillas.

  3. Para abrir el panel Seleccionar repositorio, haz clic en Seleccionar repositorio.

  4. Haz clic en Crear repositorio.

  5. Especifica quickstart-kfp-repo como nombre del repositorio.

  6. En Formato, selecciona Kubeflow Pipelines.

  7. En Location Type (Tipo de ubicación), selecciona Region (Región).

  8. En la lista desplegable Región, selecciona us-central1.

  9. Haz clic en Crear.

Google Cloud CLI

Ejecuta el siguiente comando para crear un repositorio.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • LOCATION: la ubicación o la región en la que quieres crear el repositorio. Por ejemplo, us-central1.

Ejecuta el comando gcloud artifacts repositories create:

Linux, macOS o Cloud Shell

gcloud artifacts repositories create quickstart-kfp-repo --location=LOCATION_ID --repository-format=KFP

Windows (PowerShell)

gcloud artifacts repositories create quickstart-kfp-repo --location=LOCATION_ID --repository-format=KFP

Windows (cmd.exe)

gcloud artifacts repositories create quickstart-kfp-repo --location=LOCATION_ID --repository-format=KFP
 

Crear una plantilla

Usa el siguiente código de ejemplo para definir una canalización con un solo componente. Para obtener información sobre cómo definir una canalización con KFP, consulta Crear una canalización.

from kfp import dsl
from kfp import compiler

@dsl.component()
def hello_world(text: str) -> str:
    print(text)
    return text

@dsl.pipeline(name='hello-world', description='A simple intro pipeline')
def pipeline_hello_world(text: str = 'hi there'):
    """Pipeline that passes small pipeline parameter string to consumer op."""

    consume_task = hello_world(
        text=text)  # Passing pipeline parameter as argument to consumer op

compiler.Compiler().compile(
    pipeline_func=pipeline_hello_world,
    package_path='hello_world_pipeline.yaml')

Cuando ejecutas el ejemplo, la instrucción compiler.Compiler().compile(...) compila la canalización "hello-world" en el archivo YAML local llamado hello_world_pipeline.yaml.

Subir la plantilla

Consola

  1. Abre Vertex AI Pipelines en la Google Cloud consola.

    Ve a Vertex AI Pipelines.

  2. Haz clic en Subir para abrir el panel Subir flujo de procesamiento o componente.

  3. En la lista desplegable Repositorio, selecciona el repositorio quickstart-kfp-repo.

  4. Especifica un nombre para la plantilla de canalización.

  5. En el campo Archivo, haga clic en Elegir para seleccionar y subir el archivo YAML de la plantilla de canalización compilada desde su sistema de archivos local.

  6. Una vez que hayas subido la plantilla de la canalización, aparecerá en la página Tus plantillas.

    Ve a Tus plantillas.

Cliente del SDK de Kubeflow Pipelines

  1. Para configurar el cliente de registro del SDK de Kubeflow Pipelines, ejecuta los siguientes comandos:

    from kfp.registry import RegistryClient
    
    client = RegistryClient(host=f"https://us-central1-kfp.pkg.dev/PROJECT_ID/quickstart-kfp-repo")
    
  2. Sube el archivo YAML compilado a tu repositorio en Artifact Registry.

    templateName, versionName = client.upload_pipeline(
      file_name="hello_world_pipeline.yaml",
      tags=["v1", "latest"],
      extra_headers={"description":"This is an example pipeline template."})
    
  3. Para comprobar que la plantilla se ha subido, sigue estos pasos:

    1. Abre Vertex AI Pipelines en la Google Cloud consola.

      Ve a Vertex AI Pipelines.

    2. Haz clic en la pestaña Tus plantillas.

    3. Haz clic en Seleccionar repositorio.

    4. En la lista, selecciona el repositorio quickstart-kfp-repo y, a continuación, haz clic en Seleccionar.

    5. En la lista, debería aparecer el paquete de plantilla que ha subido hello-world.

    6. Para ver la lista de versiones de la plantilla de canalización, haga clic en la plantilla hello-world.

    7. Para ver la topología de la canalización, haz clic en la versión.

Usar la plantilla en Vertex AI

Una vez que haya subido su plantilla de canalización a su repositorio en Artifact Registry, podrá usarla en Vertex AI Pipelines.

Crea un segmento de almacenamiento provisional para tu plantilla

Antes de poder usar tu plantilla de flujo de trabajo, tendrás que crear un segmento de Cloud Storage para las ejecuciones de flujo de trabajo de staging.

Para crear el bucket, sigue las instrucciones de Configurar un bucket de Cloud Storage para los artefactos de la canalización y, a continuación, ejecuta el siguiente comando:

STAGING_BUCKET="gs://BUCKET_NAME"

Sustituye BUCKET_NAME por el nombre del bucket que acabas de crear.

Crear una ejecución de flujo de trabajo a partir de tu plantilla

Puedes usar el SDK de Vertex AI para Python o la Google Cloud consola para crear una ejecución de una canalización a partir de tu plantilla en Artifact Registry.

Consola

  1. Abre Vertex AI Pipelines en la Google Cloud consola.

    Ve a Vertex AI Pipelines.

  2. Haz clic en la pestaña Tus plantillas.

  3. Para abrir el panel Seleccionar repositorio, haz clic en Seleccionar repositorio.

  4. Selecciona el repositorio quickstart-kfp-repo y, a continuación, haz clic en Seleccionar.

  5. Haz clic en el paquete hello-world.

  6. Junto a la versión 4f245e8f9605, haz clic en Crear ejecución.

  7. Haz clic en Configuración de tiempo de ejecución.

  8. En Ubicación de Cloud Storage, introduce lo siguiente:

    gs://BUCKET_NAME
    

    Sustituye BUCKET_NAME por el nombre del segmento que has creado para organizar las ejecuciones de tu canalización.

  9. Haz clic en Enviar.

SDK de Vertex AI para Python

Usa el siguiente ejemplo para crear una ejecución de la canalización a partir de tu plantilla:

from google.cloud import aiplatform

# Initialize the aiplatform package
aiplatform.init(
    project="PROJECT_ID",
    location='us-central1',
    staging_bucket=STAGING_BUCKET)

# Create a pipeline job using a version ID.
job = aiplatform.PipelineJob(
    display_name="hello-world-latest",
    template_path="https://us-central1-kfp.pkg.dev/PROJECT_ID/quickstart-kfp-repo/hello-world@SHA256_TAG" + \
        versionName)

# Alternatively, create a pipeline job using a tag.
job = aiplatform.PipelineJob(
    display_name="hello-world-latest",
    template_path="https://us-central1-kfp.pkg.dev/PROJECT_ID/quickstart-kfp-repo/hello-world/TAG")

job.submit()

Haz los cambios siguientes:

  • PROJECT_ID: el Google Cloud proyecto en el que se ejecuta esta canalización.

  • SHA256_TAG: el valor de hash sha256 de la versión de la plantilla.

  • TAG: etiqueta de versión de la plantilla.

Ver las ejecuciones de flujos de procesamiento creadas

Puedes ver las ejecuciones creadas por una versión de una canalización específica en el SDK de Vertex AI para Python.

Consola

  1. Abre Vertex AI Pipelines en la Google Cloud consola.

    Ve a Vertex AI Pipelines.

  2. Haz clic en la pestaña Tus plantillas.

  3. Haz clic en Seleccionar repositorio.

  4. En la lista, selecciona el repositorio quickstart-kfp-repo y, a continuación, haz clic en Seleccionar.

  5. Para ver la lista de versiones de la plantilla de canalización hello-world, haga clic en la plantilla hello world.

  6. Haz clic en la versión para la que quieras ver las ejecuciones de la canalización.

  7. Para ver las ejecuciones de la canalización de la versión seleccionada, haga clic en Ver ejecuciones y, a continuación, en la pestaña Ejecuciones.

SDK de Vertex AI para Python

Para enumerar las ejecuciones de los flujos de procesamiento, ejecuta el comando pipelineJobs.list como se muestra en uno o varios de los siguientes ejemplos:

  from google.cloud import aiplatform

  # To filter all runs created from a specific version
  filter = 'template_uri:"https://us-central1-kfp.pkg.dev/PROJECT_ID/quickstart-kfp-repo/hello-world/*" AND ' + \
           'template_metadata.version="%s"' % versionName
  aiplatform.PipelineJob.list(filter=filter)

  # To filter all runs created from a specific version tag
  filter = 'template_uri="https://us-central1-kfp.pkg.dev/PROJECT_ID/quickstart-kfp-repo/hello-world/latest"'
  aiplatform.PipelineJob.list(filter=filter)

  # To filter all runs created from a package
  filter = 'template_uri:"https://us-central1-kfp.pkg.dev/PROJECT_ID/quickstart-kfp-repo/hello-world/*"'
  aiplatform.PipelineJob.list(filter=filter)

  # To filter all runs created from a repo
  filter = 'template_uri:"https://us-central1-kfp.pkg.dev/PROJECT_ID/quickstart-kfp-repo/*"'
  aiplatform.PipelineJob.list(filter=filter)

Usar la plantilla en un cliente de registro del SDK de Kubeflow Pipelines

Puedes usar un cliente de registro del SDK de Kubeflow Pipelines junto con Artifact Registry para descargar y usar tu plantilla de canalización.

  • Para enumerar los recursos del repositorio, ejecuta los siguientes comandos:

    templatePackages = client.list_packages()
    templatePackage = client.get_package(package_name = "hello-world")
    
    versions = client.list_versions(package_name="hello-world")
    version = client.get_version(package_name="hello-world", version=versionName)
    
    tags = client.list_tags(package_name = "hello-world")
    tag = client.get_tag(package_name = "hello-world", tag="latest")
    

    Para ver la lista completa de métodos y documentos disponibles, consulta los proto archivos de Artifact Registry en el repositorio de GitHub.

  • Para descargar la plantilla en tu sistema de archivos local, ejecuta los siguientes comandos:

    # Sample 1
    filename = client.download_pipeline(
      package_name = "hello-world",
      version = versionName)
    # Sample 2
    filename = client.download_pipeline(
      package_name = "hello-world",
      tag = "v1")
    # Sample 3
    filename = client.download_pipeline(
      package_name = "hello-world",
      tag = "v1",
      file_name = "hello-world-template.yaml")
    

Usar la API REST de Artifact Registry

En las siguientes secciones se resume cómo usar la API REST de Artifact Registry para gestionar las plantillas de canalización en tu repositorio de Artifact Registry.

Subir una plantilla de canalización con la API REST de Artifact Registry

Para subir una plantilla de flujo de trabajo, crea una solicitud HTTP con los valores de los parámetros que se describen en esta sección.

  • PROJECT_ID es el Google Cloud proyecto en el que se ejecuta esta canalización.
  • REPO_ID es el ID de tu repositorio de Artifact Registry.

Solicitud curl de ejemplo

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -F tags=v1,latest \
    -F content=@pipeline_spec.yaml \
    https://us-central1-kfp.pkg.dev/PROJECT_ID/REPO_ID

Crear la solicitud de subida

La solicitud es una solicitud multiparte HTTP o HTTPS. Debe incluir el token de autenticación en el encabezado de la solicitud. Para obtener más información, consulta gcloud auth print-access-token.

La carga útil de la solicitud es el contenido del archivo pipeline_spec.yaml (o del paquete .zip). El límite de tamaño recomendado es de 10 MiB.

El nombre del paquete se toma de la entrada pipeline_spec.pipeline_info.name del archivo pipeline_spec.yaml. El nombre del paquete identifica de forma única el paquete y no se puede cambiar entre versiones. Puede tener entre 4 y 128 caracteres y debe coincidir con la siguiente expresión regular: ^[a-z0-9][a-z0-9-]{3,127}$.

El paquete tags es una lista de hasta ocho etiquetas separadas por comas. Cada etiqueta debe coincidir con la siguiente expresión regular: ^[a-zA-Z0-9\-._~:@+]{1,128}$.

Si existe una etiqueta y apunta a una canalización que ya se ha subido, la etiqueta se actualiza para que apunte a la canalización que estás subiendo. Por ejemplo, si la etiqueta latest apunta a una canalización que ya has subido y subes una nueva versión con --tag=latest, la etiqueta latest se elimina de la canalización que habías subido y se asigna a la nueva canalización que estás subiendo.

Si la canalización que estás subiendo es idéntica a una que ya has subido, la subida se completará correctamente. Los metadatos de la canalización subida, incluidas sus etiquetas de versión, se actualizan para que coincidan con los valores de los parámetros de la solicitud de subida.

Subir respuesta

Si la solicitud de subida se realiza correctamente, devuelve un estado HTTP OK. El cuerpo de la respuesta es el siguiente:

{packageName}/{versionName=sha256:abcdef123456...}

donde versionName es el digest sha256 de pipeline_spec.yaml con formato de cadena hexadecimal.

Descargar una plantilla de canalización con la API REST de Artifact Registry

Para descargar una plantilla de flujo de trabajo, crea una solicitud HTTP con los valores de los parámetros que se describen en esta sección.

  • PROJECT_ID es el Google Cloud proyecto en el que se ejecuta esta canalización.
  • REPO_ID es el ID de tu repositorio de Artifact Registry.
  • PACKAGE_ID es el ID de paquete de la plantilla que ha subido.
  • TAG es la etiqueta de versión.
  • VERSION es la versión de la plantilla en el formato sha256:abcdef123456....

Para descargar Artifact Registry de forma estándar, debe crear el enlace de descarga de la siguiente manera:

url = https://us-central1-kfp.pkg.dev/PROJECT_ID/REPO_ID/PACKAGE_ID/VERSION
url = https://us-central1-kfp.pkg.dev/PROJECT_ID/REPO_ID/PACKAGE_ID/TAG

Ejemplos de solicitudes curl

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://us-central1-kfp.pkg.dev/PROJECT_ID/REPO_ID/PACKAGE_ID/VERSION

Puedes sustituir VERSION por TAG y descargar la misma plantilla, como se muestra en el siguiente ejemplo:

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://us-central1-kfp.pkg.dev/PROJECT_ID/REPO_ID/PACKAGE_ID/TAG

Descargar respuesta

Si la solicitud de descarga se realiza correctamente, devuelve el estado HTTP OK. El cuerpo de la respuesta es el contenido del archivo pipeline_spec.yaml.