Максимальное количество рабочих/рабов для параллельной работы Snow

Я запускаю цикл foreach со снежным бэкэндом на машине с Windows. У меня есть 8 ядер для работы. Rscript выполняется через системный вызов, встроенный в скрипт Python, поэтому также будет активный экземпляр Python.

Есть ли какая-то польза от отсутствия #workers=#cores, а вместо #workers‹#cores, чтобы всегда было место для системных процессов или экземпляра python?

Он успешно работает с #workers=#cores, но я получаю удар по производительности, насыщая ядра (максимально возможные потоки) экземплярами r worker?


person imouellette81    schedule 22.10.2015    source источник


Ответы (1)


Это будет зависеть от

  1. Ваш процессор (особенно гиперпоточность)
  2. Сколько информации нужно скопировать в/из разных изображений
  3. Если вы реализуете это через несколько ящиков (LAN)

Для 1) помогает гиперпоточность. Я знаю, что моя машина делает это, поэтому у меня обычно в два раза больше рабочих ядер, и мой код завершается примерно в 85% случаев по сравнению с тем, если бы я сопоставил количество рабочих с ядрами. Это не улучшит больше, чем это.

2) Если вы не разветвляетесь, например, используя сокеты, вы работаете так, как будто вы находитесь в парадигме распределенной памяти, что означает создание одной копии в памяти для каждого работника. Это может быть нетривиальное количество времени. Кроме того, несколько изображений на одном компьютере могут занимать много места, в зависимости от того, над чем вы работаете. Я часто сопоставляю количество воркеров с числом, потому что удвоение воркеров приведет к нехватке памяти.

Это усугубляется 3) скоростью сети на нескольких рабочих станциях. Локально между машинами наш коммутатор будет передавать данные со скоростью около 20 Мбайт/с, что в 10 раз быстрее, чем моя скорость загрузки из Интернета дома, но скорость улитки по сравнению с копированием в том же ящике.

Вы можете подумать об увеличении значения nice R, чтобы у python был приоритет, когда ему нужно что-то сделать.

person Zenos    schedule 22.10.2015
comment
да, у машины есть гиперпоточность, и когда я имею в виду # рабочих = # ядер, я имею в виду # рабочих = # логических ядер. Я также использую сокеты в качестве машины для Windows. Это одна рабочая станция. Копирование данных каждому работнику занимает менее 1% времени. Когда начинаются вычисления, возникает больше вопросов, есть ли у них какая-либо польза от того, чтобы оставить ядро ​​​​открытым для процессов ОС или процесс Python, отправляющий системный вызов, порождает параллельное задание R. - person imouellette81; 23.10.2015