Komponente schreiben, um einen Google Cloud Console-Link anzuzeigen
Es ist üblich, dass Sie beim Ausführen einer Komponente nicht nur den Link zum gestarteten Komponentenjob sehen möchten, sondern auch den Link zu den zugrunde liegenden Cloud-Ressourcen wie die Vertex-Batchvorhersagejobs oder Dataflow-Jobs.
Der gcp_resource
-Proto ist ein spezieller Parameter, mit dem Sie in Ihrer Komponente die Google Cloud Console aktivieren können, um eine benutzerdefinierte Ansicht der Logs und des Status der Ressource in der Vertex AI Pipelines-Konsole bereitzustellen.
Parameter gcp_resource
ausgeben
Containerbasierte Komponente verwenden
Zuerst müssen Sie den Parameter gcp_resource
in Ihrer Komponente definieren, wie in der folgenden component.py
-Beispieldatei gezeigt:
Python
Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python API.
Installieren Sie als Nächstes im Container das Paket der Google Cloud-Pipeline-Komponenten:
pip install --upgrade google-cloud-pipeline-components
Definieren Sie als Nächstes im Python-Code die Ressource als gcp_resource
-Parameter:
Python
Informationen zur Installation des Vertex AI SDK for Python finden Sie unter Vertex AI SDK for Python installieren. Weitere Informationen finden Sie in der Referenzdokumentation zur Python 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))
Python-Komponente verwenden
Alternativ können Sie den Ausgabeparameter gcp_resources
wie einen beliebigen Stringausgabeparameter zurückgeben:
@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
Unterstützte resource_type
-Werte
Sie können den resource_type
als beliebigen String festlegen. Nur die folgenden Typen haben in der Google Cloud Console jedoch Links:
- BatchPredictionJob
- BigQueryJob
- CustomJob
- DataflowJob
- HyperparameterTuningJob
Komponente schreiben, um die zugrunde liegenden Ressourcen abzubrechen
Wenn ein Pipelinejob abgebrochen wird, werden die zugrunde liegenden Google Cloud-Ressourcen standardmäßig weiter ausgeführt. Sie werden nicht automatisch abgebrochen. Um dieses Verhalten zu ändern, sollten Sie an den Pipelinejob einen SIGTERM-Handler anhängen. Dies empfiehlt sich unmittelbar vor der Abfrageschleife für einen Job, die über einen längeren Zeitraum ausgeführt werden kann.
Das Abbrechen wurde für mehrere Google Cloud-Pipeline-Komponenten implementiert, darunter:
- Batchvorhersagejob
- BigQuery ML-Job
- Benutzerdefinierter Job
- Serverloser Dataproc-Batchjob
- Hyperparameter-Abstimmungsjob
Weitere Informationen und Beispielcode zum Anhängen eines SIGTERM-Handlers finden Sie unter den folgenden GitHub-Links:
- 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
Beachten Sie bei der Implementierung des SIGTERM-Handlers Folgendes:
- Die Abbruchfortführung funktioniert nur, nachdem die Komponente einige Minuten lang ausgeführt wurde. Dies ist in der Regel darauf zurückzuführen, dass Startaufgaben im Hintergrund verarbeitet werden müssen, bevor die Python-Signal-Handler aufgerufen werden.
- Bei einigen Google Cloud-Ressourcen ist möglicherweise kein Abbruch implementiert. Beispielsweise kann das Erstellen oder Löschen eines Vertex AI-Endpunkts oder -Modells einen Vorgang mit langer Ausführungszeit erstellen, der eine Abbruchanfrage über seine REST API akzeptiert, aber den Abbruchvorgang nicht implementiert.