У меня есть большой объект (150 МБ), который мне нужно передать всем распределенным рабочим dask, чтобы его можно было использовать в будущих задачах. Я пробовал несколько подходов:
Client.scatter(broadcast=True)
: Это требовало отправки всех данных с одного компьютера (на котором я запускаю клиент и планировщик), что создает узкое место в полосе пропускания.Client.submit
, за которым следуетClient.replicate
: Эти воркеры совместно используют файловую систему, поэтому вместо отправки данных я могу запланировать задачу, которая загружает данные, а затем реплицировать данные всем воркерам. Похоже, что для распределения данных используется древовидная стратегия, которая быстрее, чем предыдущий вариант.
Однако потенциально быстрее заставить каждого рабочего запускать функцию загрузки данных локально, чем загружать данные на одного рабочего и сериализовать их от одного рабочего к другому. Есть ли способ сделать это? Client.run
кажется частью того, что я хочу, но мне нужно вернуть будущее для загруженных данных, которые я могу передать другим задачам позже.