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