KubeFlow, обрабатывающий большие динамические массивы, и ParallelFor с текущими ограничениями размера
В течение последнего дня я изо всех сил пытался найти хорошее решение для этого способа и хотел бы услышать ваши мысли.
У меня есть конвейер, который получает большой и динамический массив JSON (содержащий только строковые объекты), мне нужно иметь возможность создавать ContainerOp для каждой записи в этом массиве (используя dsl.ParallelFor).
Это отлично подходит для небольших входов.
Прямо сейчас массив поступает как URL-адрес файла http из-за ограничений размера аргументов ввода конвейера для argo и Kubernetes (или это то, что я понял из текущих открытых проблем), но - когда я пытаюсь прочитать файл из одного Op, чтобы использовать в качестве ввода для ParallelFor я сталкиваюсь с ограничением размера вывода.
Что было бы хорошим и многоразовым решением для такого сценария?
Спасибо!
1 ответ
массив поступает как URL-адрес файла http из-за ограничений размера аргументов конвейера argo и Kubernetes
Обычно внешние данные сначала импортируются в конвейер (загружаются и выводятся). Тогда компоненты используютinputPath
а также outputPath
передавать большие фрагменты данных в виде файлов. Ограничение размера применяется только к данным, которые вы используете как значение вместо файла, используяinputValue
.
Циклы потребляют данные по значению, поэтому к ним применяется ограничение на размер.
Что вы можете сделать, так это уменьшить эти данные. Например, если ваши данные представляют собой список больших объектов JSON[{obj1}, {obj2}, ... , {objN}]
, вы можете преобразовать его в список индексов [1, 2, ... , N]
, передайте этот список в цикл, а затем внутри цикла у вас может быть компонент, который использует индекс и данные для выбора одного элемента для работы N
->{objN}
.