Escreva um componente para mostrar um Google Cloud link da consola
É comum que, quando executa um componente, queira ver não só o link para a tarefa do componente que está a ser iniciada, mas também o link para os recursos de nuvem subjacentes, como as tarefas de previsão em lote do Vertex ou as tarefas do Dataflow.
O gcp_resource
proto é um parâmetro especial que pode usar no seu componente para permitir que a Google Cloud consola forneça uma vista personalizada dos registos e do estado do recurso na consola do Vertex AI Pipelines.
Produzir o parâmetro gcp_resource
Usar um componente baseado em contentores
Primeiro, tem de definir o parâmetro gcp_resource
no seu componente, conforme mostrado no ficheiro de exemplo component.py
seguinte:
Python
Para saber como instalar ou atualizar o SDK Vertex AI para Python, consulte o artigo Instale o SDK Vertex AI para Python. Para mais informações, consulte a Python documentação de referência da API.
Em seguida, no contentor, instale o Google Cloud pacote de componentes do pipeline:
pip install --upgrade google-cloud-pipeline-components
Em seguida, no código Python, defina o recurso como um parâmetro gcp_resource
:
Python
Para saber como instalar ou atualizar o SDK Vertex AI para Python, consulte o artigo Instale o SDK Vertex AI para Python. Para mais informações, consulte a Python documentação de referência da API.
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 um componente Python
Em alternativa, pode devolver o parâmetro de saída gcp_resources
como faria com qualquer parâmetro de saída de string:
@dsl.component(
base_image='python:3.9',
packages_to_install=['google-cloud-pipeline-components==2.21.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
suportados
Pode definir o resource_type
como uma string arbitrária, mas apenas os seguintes tipos têm links na consola Google Cloud :
- BatchPredictionJob
- BigQueryJob
- CustomJob
- DataflowJob
- HyperparameterTuningJob
Escreva um componente para cancelar os recursos subjacentes
Quando uma tarefa de pipeline é cancelada, o comportamento predefinido é que os recursos Google Cloud subjacentes continuem a ser executados. Não são canceladas automaticamente. Para alterar este comportamento, deve anexar um controlador SIGTERM à tarefa do pipeline. Um bom local para o fazer é imediatamente antes de um ciclo de sondagem para uma tarefa que possa ser executada durante muito tempo.
O cancelamento foi implementado em vários Google Cloud componentes do pipeline, incluindo:
- Tarefa de previsão em lote
- Tarefa do BigQuery ML
- Tarefa personalizada
- Google Cloud Sem servidor para tarefas de lote do Apache Spark
- Tarefa de aperfeiçoamento de hiperparâmetros
Para mais informações, incluindo um código de exemplo que mostra como anexar um controlador SIGTERM, consulte os seguintes links do GitHub:
- https://github.com/kubeflow/pipelines/blob/google-cloud-pipeline-components-2.21.0/components/google-cloud/google_cloud_pipeline_components/container/utils/execution_context.py
- https://github.com/kubeflow/pipelines/blob/google-cloud-pipeline-components-2.21.0/components/google-cloud/google_cloud_pipeline_components/container/v1/gcp_launcher/job_remote_runner.py#L124
Considere o seguinte ao implementar o controlador SIGTERM:
- A propagação do cancelamento só funciona depois de o componente estar em execução durante alguns minutos. Isto deve-se normalmente a tarefas de arranque em segundo plano que têm de ser processadas antes de os controladores de sinais do Python serem chamados.
- Alguns Google Cloud recursos podem não ter o cancelamento implementado. Por exemplo, a criação ou a eliminação de um ponto final ou de um modelo da Vertex AI pode criar uma operação de longa duração que aceite um pedido de cancelamento através da respetiva API REST, mas não implemente a própria operação de cancelamento.