Накладные расходы на выполнение цикла Dask из библиотек
При вызове другой библиотеки для dask, такой как scikit image Contrast stretch, я понимаю, что dask создает результат для каждого блока, сохраняя его либо в памяти, либо на диск отдельно. Затем он пытается объединить все результаты. Это нормально, если вы работаете в кластере или на одном компьютере и набор данных для массива небольшой, все хорошо контролируется. Проблемы начинают возникать, когда вы работаете с наборами данных, размер которых намного превышает размер вашей оперативной памяти или диска. Есть ли способ смягчить это или использовать формат файла zarr для сохранения обновляемых значений по мере продвижения? Может быть, это слишком фантастично. Были бы полезны любые другие идеи, чтобы купить больше барана.
редактировать
Я смотрел документацию по dask, и предложения по размерам блоков для dask примерно 100 МБ. В итоге я значительно уменьшил эту сумму до 30-70 МБ в зависимости от размера файла. Затем я провел растяжку контраста (не из библиотеки, а с numpy ununc, и у меня не было никаких проблем! На самом деле я играл со способом выполнения вычислений. Так как я начинаю с массива uint8 3dim, умножая его на коэффициент контраста stretch Я неизбежно увеличиваю кусок массива до массива float64. Это занимает значительную часть памяти и вычислений. Итак, что я делал, так это обрабатывал da.array как np.asarray(float64), но только до умножения на число с плавающей запятой. Затем вернемся к uint8, чтобы завершить вычисление. Время растяжения сократилось до чуть менее 5 минут для файла размером 20 ГБ. Так что я думаю, что это положительный шаг.Просто означает обработку изображений без библиотек, хотя я посмотрю на ретранслятор.
Конвейер обработки изображений, который я создаю, неизбежно будет использоваться для объединенного набора данных размером около 250-300 ГБ (определенно за пределами моего ноутбука). У меня также нет времени, чтобы разобраться с облачной или параллельной обработкой в облаке. Это на несколько месяцев. Прямо сейчас он пытается пройти этот анализ.
1 ответ
Да, вы можете делать то, о чем говорите. Я рекомендую вам ознакомиться с проектом rechunker, который специализируется на изменении макета данных в хранилище zarr, но показывает идею того, как сохранить временные посредники с целью смягчения проблем с памятью и связью.