Запуск конвейера Vertex AI завершается сбоем после прохождения dsl.Condition==True
Я работаю с конвейерами Vertex AI уже 3 месяца. Я начал с миграции проектов из старой специализированной инфраструктуры Kubernetes в конвейеры на основе компонентов Vertex AI Python. Я создал конвейеры шаблонов, которые до прошлой недели работали нормально. Недавно я внес некоторые изменения, и мой конвейер не выдает сообщение об ошибке.Failed to evaluate the expression with error: UNKNOWN: No value with name "True" found in Activation; Failed to evaluate the TriggerPolicy.condition field.
Мое определение конвейера выглядит следующим образом
@kfp.v2.dsl.pipeline(name="my-custom-pipeline-name", )
def my_pipeline_new(
ENV: str = "dev",
ISO_CODE_COUNTRY: str = "DE",
DEFAULT_TRUE_FLAG: bool=True,
ENABLE_PERSIST_RESULTS:bool= True,
SOME_FLAG: bool = True
):
with kfp.v2.dsl.Condition(DEFAULT_TRUE_FLAG==True) as C1:
with kfp.v2.dsl.Condition(SOME_FLAG== True):
some_module_obj = some_python_based_component(env=ENV, iso_code= ISO_CODE_COUNTRY, enable_persist_results= ENABLE_PERSIST_RESULTS)
Моя текущая версия KFP — 1.7.0. Я совершенно потерялся здесь, чтобы выяснить, почему мой конвейер внезапно перестал работать.
Возможно ли, что в Vertex AI Pipelines произошли какие-то обновления, о которых я не знаю?
Любые предложения/идеи будут высоко оценены.
Я использовал методы проб и ошибок, чтобы увидеть, но мой конвейер даже не запускается и дает сбой на начальном этапе. Когда я пытаюсь запустить свой компонент на основе Python без каких-либо условий, он работает совершенно нормально, но с условиями он просто терпит неудачу.
Чтобы убедиться в правильности моих подозрений, я создал фиктивный конвейер, который, похоже, также не работает в условиях dsl.
import kfp
from kfp.v2.dsl import (
component,
Dataset,
Input,
Output,
Metrics,
Artifact,
ClassificationMetrics,
Model,
Metrics,
Dataset,
OutputPath,
InputPath,
Condition,
)
@component
def component_A(flag: bool):
if flag:
print("Flag is true.")
else:
print("Flag is false.")
@component
def component_B():
print("Running component B.")
@kfp.dsl.pipeline(
name="conditional-pipeline",
description="A simple pipeline with a condition",
pipeline_root="gs:bucket-name"
)
def my_pipeline(flag: bool = True):
with Condition(flag == True):
a = component_A(flag)
b = component_B()
PIPELINE_ROOT = "{}/pipeline_root".format("MY-GCS-BUCKET")
Вот фрагмент конвейера, который дает сбой и выдает ошибку:
Ошибка простого кода условия
1 ответ
VertexAI растет очень быстро и, к сожалению, из-за небольшого количества документации и мало кто ее использует! Существует множество сломанных и неработающих модулей и кодов, связанных с VertexAI, а также таких модулей, как пакетное прогнозирование.
Возможный способ устранить вашу ошибку (не очень чистый) — использовать выходные данные такого компонента:
...
**@component
def set_flag(flag: bool):
return flag**
@kfp.dsl.pipeline(
name="conditional-pipeline",
description="A simple pipeline with a condition",
pipeline_root="gs:bucket-name"
)
def my_pipeline(flag: bool = True):
**result = set_flag(flag)**
with Condition(
**result.output == True,**
name = 'check flag?'):
a = component_A(flag)
b = component_B()
...
Вы также можете проверить рабочий пример в GCP github: ссылка