Есть ли ограничение на количество рабов, которое может создать R snow?

Я пытаюсь построить снежный кластер с примерно 120 процессами на 3 разных хостах. Это серверы AMD с 48 ядрами каждый. После сборки примерно 90 первых рабов я получаю эту ошибку:

cl = makeSOCKcluster(c(rep("localhost", 44), rep("host2", 46), rep("host3", 45)))
Error in socketConnection(port = port, server = TRUE, blocking = TRUE,  : 
  all connections are in use
> traceback()
3: socketConnection(port = port, server = TRUE, blocking = TRUE, 
       open = "a+b")
2: newSOCKnode(names[[i]], options = options, rank = i)
1: makeSOCKcluster(c(rep("localhost", 44), rep("host2", 46), 
       rep("host3", 45)))

Я проверил свои системные ограничения и не вижу никаких проблем:

# cat /proc/sys/fs/file-max
12897622
# grep "#define __FD_SETSIZE" /usr/include/*.h /usr/include/*/*.h
/usr/include/linux/posix_types.h:#define __FD_SETSIZE   1024
# ulimit -a |grep open
open files                      (-n) 65536

Есть ли ограничение на количество процессов, которые может создать снег?

1 ответ

Решение

Да, но только потому, что существует ограничение на общее количество соединений, которые R может создать (в настоящее время 128). Это включает в себя не только сокетные соединения, поэтому вы можете получить до ~90 рабочих узлов.

> grep "define NCONNECTIONS" *
connections.c:#define NCONNECTIONS 128 /* snow needs one per slave node */

Поскольку вы используете GNU/Linux, я бы предложил использовать многоядерный вместо снега.

Другие вопросы по тегам