Kubeflow — как передать набор данных Tensorflow и тензоры из одного компонента в другой?

Я реализую конвейер Kubeflow в Vertex AI. В основном у меня есть два компонента: и :

      @component(
    packages_to_install = [
        "pandas==1.3.4",
        "numpy==1.20.3",
        "unidecode",
        "nltk==3.6.5",
        "gcsfs==2023.1.0"
        
    ],
)

def prepare_data(dataset:str,
        data_artifact: Output[Dataset]) -> NamedTuple("Outputs", [("ratings", Dataset),("movies", Dataset),("train", Dataset),("test", Dataset)]):

и...

      @component(
    packages_to_install = [
        "tensorflow-recommenders==0.7.0",
        "tensorflow==2.9.1",
    ],
)
def train_model(epochs: int, 
                ratings: Input[Dataset],
                movies: Input[Dataset],
                train: Input[Dataset],
                test: Input[Dataset],
    model_artifact: Output[Model]) -> NamedTuple("Outputs", [("model_artifact", Model)]):

генерирует четыре набора данных Tensorflow (фильмы, рейтинги, поезд и тест), которые будут использоваться внутри компонента.

Как сохранить (или сослаться) на эти наборы данных изprepare_dataдля использования внутриtrain_model? Например, я получаю следующую ошибку:

      AttributeError: 'Dataset' object has no attribute 'map'

Для этой строки кода:

      user_ids = ratings.map(lambda x: x["requisito"])

Мой конвейер выглядит так:

      @dsl.pipeline(
    pipeline_root=PIPELINE_ROOT + "data-pipeline",
    name="pipeline-with-deployment",
)

def pipeline():
    prepare_data_op = prepare_data('gs://bucket-777/data.csv').set_cpu_limit('16').set_memory_limit('32G').set_caching_options(False)
    
training_op=train_model(3,prepare_data_op.outputs["ratings"],prepare_data_op.outputs["movies"],prepare_data_op.outputs["train"],prepare_data_op.outputs["test"]).set_cpu_limit('16').set_memory_limit('32G').set_caching_options(False)

    
    deploy_op = deploy_model(training_op.outputs["model_artifact"] ,"projectid","us-central1")

training_op.outputs["model_artifact"]индекс для поиска подобия. Все это работает идеально в одной частиdata-train, но когда я разделяю, наборы данных не сохраняют свои свойства.

Любые идеи о том, как преодолеть эту проблему, приветствуются.

Я проверил этот вопрос о стеке (здесь), но я не уверен, как это сделать с наборами данных и тензорами Tensorflow.

1 ответ

Это будет реализовано в будущем командой Kubeflow. Это запланированная функция, как видно здесь:

https://github.com/kubeflow/pipelines/issues/8899#issuecomment-1452764426