Как тиражировать данные, когда их быстрее вычислить, чем передать в распределенном режиме? - PullRequest
0 голосов
/ 25 июня 2018

У меня есть большой объект (150 МБ), который мне нужно передать всем распределенным работникам, чтобы его можно было использовать в будущих задачах.Я испробовал несколько подходов:

  • Client.scatter(broadcast=True): для этого требовалась отправка всех данных с одного компьютера (где я запускаю клиент и планировщик), что создает узкое место в пропускной способности.
  • Client.submit, за которым следует Client.replicate: эти работники используют общую файловую систему, поэтому вместо отправки данных я могу запланировать задачу, которая загружает данные, а затем реплицировать данные всем работникам.Похоже, что для распространения данных используется древовидная стратегия, которая работает быстрее, чем предыдущая опция.

Однако потенциально быстрее заставить каждого работника выполнять функцию загрузки данных локально, чемзагрузить данные на одного работника и сериализовать их от работника к работнику.Есть ли способ сделать это?Client.run кажется частью того, что я хочу, но мне нужно вернуть будущее для загруженных данных, которые я могу передать другим задачам позже.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

У меня была точно такая же проблема, которую я задал на StackOverflow и недавно решил, см. this для моего решения.

0 голосов
/ 25 июня 2018

Короткий ответ здесь - «нет», прямого способа достичь этого не существует. Однако можно кое-что взломать, если вам удобно использовать внутренний код (который может измениться без предупреждения).

Другим способом было бы определить вычислительное поведение при сериализации объекта, а затем просто снова вызвать функцию в коде десериализации.

...