Escrever um componente para mostrar um link do Console do Google Cloud
É comum que, ao executar um componente, você queira ver não apenas o link para o job do componente que está sendo iniciado, mas também o link para os recursos de nuvem subjacentes, como os jobs de previsão em lote do Vertex ou jobs do Dataflow.
O proto do gcp_resource
é um parâmetro especial que pode ser usado no componente para permitir que o Console do Google Cloud forneça uma visualização personalizada dos registros e do status do recurso no console do Vertex AI Pipelines.
Gerar o parâmetro gcp_resource
Como usar um componente baseado em contêiner
Primeiro, é necessário definir o parâmetro gcp_resource
no seu componente, conforme mostrado no seguinte arquivo component.py
de exemplo:
Python
Para saber como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Para mais informações, consulte a documentação de referência da API Python.
Em seguida, dentro do contêiner, instale o pacote Componentes do Pipeline do Google Cloud:
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 o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Para mais informações, consulte a documentação de referência da 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))
Como usar um componente para Python
Como alternativa, é possível retornar o parâmetro de saída gcp_resources
como qualquer parâmetro de saída de string:
@dsl.component(
base_image='python:3.9',
packages_to_install=['google-cloud-pipeline-components==2.16.1'],
)
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
resource_type
: valores aceitos:
É possível definir o resource_type
como uma string arbitrária, mas apenas os seguintes tipos têm links no Console do Google Cloud:
- BatchPredictionJob
- BigQueryJob
- CustomJob
- DataflowJob
- HyperparameterTuningJob
Escrever um componente para cancelar os recursos subjacentes
Quando um job de pipeline é cancelado, o comportamento padrão é que os recursos subjacentes do Google Cloud continuem em execução. Elas não são canceladas automaticamente. Para alterar esse comportamento, anexe um gerenciador SIGTERM ao job do pipeline. Um bom lugar para fazer isso é antes de um loop de pesquisa para um job que pode ser executado por muito tempo.
O cancelamento foi implementado em vários componentes do Google Cloud Pipeline, incluindo:
- Job de previsão em lote
- Job do BigQuery ML
- Job personalizado
- Job em lote do Dataproc sem servidor
- Job de ajuste de hiperparâmetros
Para obter mais informações, incluindo exemplos de código que mostram como anexar um gerenciador SIGTERM, consulte os seguintes links do GitHub:
- https://github.com/kubeflow/pipelines/blob/google-cloud-pipeline-components-2.16.1/components/google-cloud/google_cloud_pipeline_components/container/utils/execution_context.py
- https://github.com/kubeflow/pipelines/blob/google-cloud-pipeline-components-2.16.1/components/google-cloud/google_cloud_pipeline_components/container/v1/gcp_launcher/job_remote_runner.py#L124
Considere o seguinte ao implementar seu gerenciador SIGTERM:
- A propagação de cancelamento só funciona depois que o componente estiver em execução por alguns minutos. Geralmente, isso ocorre devido a tarefas de inicialização em segundo plano que precisam ser processadas antes de os gerenciadores de sinal do Python serem chamados.
- Alguns recursos do Google Cloud podem não ter o cancelamento implementado. Por exemplo, criar ou excluir um endpoint ou modelo do Vertex AI pode criar uma operação de longa duração que aceite uma solicitação de cancelamento pela API REST, mas não implemente a operação de cancelamento em si.