Escribe un componente para mostrar un Google Cloud enlace de consola
Es habitual que, al ejecutar un componente, no solo quieras ver el enlace al trabajo del componente que se está lanzando, sino también el enlace a los recursos de la nube subyacentes, como los trabajos de predicción por lotes de Vertex o los trabajos de Dataflow.
El gcp_resource
proto es un parámetro especial que puedes usar en tu componente para permitir que la consola de Google Cloud proporcione una vista personalizada de los registros y el estado del recurso en la consola de Vertex AI Pipelines.
Generar el parámetro gcp_resource
Usar un componente basado en contenedores
Primero, debes definir el parámetro gcp_resource
en tu componente, tal como se muestra en el siguiente archivo component.py
de ejemplo:
Python
Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.
A continuación, dentro del contenedor, instala el paquete Google Cloud Pipeline Components:
pip install --upgrade google-cloud-pipeline-components
A continuación, en el código Python, define el recurso como un parámetro gcp_resource
:
Python
Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.
from google_cloud_pipeline_components.proto.gcp_resources_pb2 import GcpResources
from google.protobuf.json_format import MessageToJson
dataflow_resources = GcpResources()
dr = dataflow_resources.resources.add()
dr.resource_type='DataflowJob'
dr.resource_uri='https://dataflow.googleapis.com/v1b3/projects/[your-project]/locations/us-east1/jobs/[dataflow-job-id]'
with open(gcp_resources, 'w') as f:
f.write(MessageToJson(dataflow_resources))
Usar un componente de Python
También puedes devolver el parámetro de salida gcp_resources
como cualquier otro parámetro de salida de cadena:
@dsl.component(
base_image='python:3.9',
packages_to_install=['google-cloud-pipeline-components==2.19.0'],
)
def launch_dataflow_component(project: str, location:str) -> NamedTuple("Outputs", [("gcp_resources", str)]):
# Launch the dataflow job
dataflow_job_id = [dataflow-id]
dataflow_resources = GcpResources()
dr = dataflow_resources.resources.add()
dr.resource_type='DataflowJob'
dr.resource_uri=f'https://dataflow.googleapis.com/v1b3/projects/{project}/locations/{location}/jobs/{dataflow_job_id}'
gcp_resources=MessageToJson(dataflow_resources)
return gcp_resources
Valores resource_type
admitidos
Puede definir resource_type
como una cadena arbitraria, pero solo los siguientes tipos tienen enlaces en la consola Google Cloud :
- BatchPredictionJob
- BigQueryJob
- CustomJob
- DataflowJob
- HyperparameterTuningJob
Escribir un componente para cancelar los recursos subyacentes
Cuando se cancela un trabajo de una canalización, el comportamiento predeterminado es que los recursos de Google Cloud subyacentes sigan ejecutándose. No se cancelan automáticamente. Para cambiar este comportamiento, debe adjuntar un controlador SIGTERM al trabajo de la canalización. Un buen lugar para hacerlo es justo antes de un bucle de sondeo de un trabajo que podría ejecutarse durante mucho tiempo.
La cancelación se ha implementado en varios componentes de la canalización, entre los que se incluyen los siguientes: Google Cloud
- Tarea de predicción por lotes
- Tarea de BigQuery ML
- Trabajo personalizado
- Tarea por lotes de Dataproc Serverless
- Tarea de ajuste de hiperparámetros
Para obtener más información, incluido un código de ejemplo que muestra cómo adjuntar un controlador SIGTERM, consulta los siguientes enlaces de GitHub:
- https://github.com/kubeflow/pipelines/blob/google-cloud-pipeline-components-2.19.0/components/google-cloud/google_cloud_pipeline_components/container/utils/execution_context.py
- https://github.com/kubeflow/pipelines/blob/google-cloud-pipeline-components-2.19.0/components/google-cloud/google_cloud_pipeline_components/container/v1/gcp_launcher/job_remote_runner.py#L124
Ten en cuenta lo siguiente al implementar el controlador SIGTERM:
- La propagación de la cancelación solo funciona después de que el componente se haya ejecutado durante unos minutos. Esto suele deberse a tareas de inicio en segundo plano que deben procesarse antes de que se llamen los controladores de señales de Python.
- Es posible que no se haya implementado la cancelación de algunos Google Cloud recursos. Por ejemplo, al crear o eliminar un endpoint o un modelo de Vertex AI, se podría crear una operación de larga duración que acepte una solicitud de cancelación a través de su API REST, pero que no implemente la operación de cancelación en sí.