Определение рабочих ресурсов dask для операции фрейма данных

Я применяю несколько операций к фрейму данных dask. Могу ли я определить требования к распределенным рабочим ресурсам для конкретной операции?

например Я называю что-то вроде:

df.fillna(value="").map_partitions(...).map(...)

Я хочу указать требования к ресурсам для map_partitions () (потенциально отличные от тех, что для map ()), но похоже, что метод не принимает ресурсы параметр.

PS. В качестве альтернативы я понял, что могу вызвать client.persist () после map_partitions () и указать ресурсы в этом вызове, но это немедленно запускает вычисление.


person evilkonrex    schedule 28.08.2017    source источник


Ответы (1)


Вы можете указать ограничения ресурсов для определенных частей ваших вычислений, когда вы вызываете compute или persist, предоставляя промежуточную коллекцию.

x = dd.read_csv(...)
y = x.map_partitions(func)
z = y.map(func2)

z.compute(resources={tuple(y._keys()): {'GPU': 1}})

Спасибо за вопрос, я пошел добавить ссылку на документацию по этой функции и обнаружил, что она недокументирована. Скоро исправлю.

Похоже, что сегодня есть ошибка, из-за которой промежуточные ключи могут быть оптимизированы в некоторых ситуациях (хотя это менее вероятно для работы с фреймом данных), поэтому вы также можете передать ключевое слово optimize_graph=False.

z.compute(resources={tuple(y._keys()): {'GPU': 1}}, optimize_graph=False)

См. https://github.com/dask/distributed/pull/1362.

person MRocklin    schedule 28.08.2017
comment
Также есть ошибка при попытке добиться этого с to_parquet на графике - см. github.com/dask / dask / issues / 6758 - person stav; 03.11.2020