Escrever um componente para mostrar um Google Cloud link doconsole
É 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 gcp_resource proto é um parâmetro especial que pode ser usado no componente para permitir que o Google Cloud console forneça uma visualização personalizada dos registros e do status do recurso no console do Gemini Enterprise Agent Platform 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 Python documentação de referência da API.
Em seguida, dentro do contêiner, instale o pacote Google Cloud 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 o SDK da Vertex AI para Python, consulte Instalar o SDK da 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))
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.22.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 aceitos:
É possível definir o resource_type como uma string arbitrária, mas apenas os seguintes tipos têm links no Google Cloud console:
- 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 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 Google Cloud Componentes do Pipeline, incluindo:
- Job de previsão em lote
- Job do BigQuery ML
- Job personalizado
- Job em lote do Serviço Gerenciado para Apache Spark
- 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.22.0/components/google-cloud/google_cloud_pipeline_components/container/utils/execution_context.py
- https://github.com/kubeflow/pipelines/blob/google-cloud-pipeline-components-2.22.0/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 Google Cloud recursos podem não ter o cancelamento implementado. Por exemplo, criar ou excluir um endpoint ou modelo do Gemini Enterprise Agent Platform 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.