2013-05-09 3 views
3

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

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 

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

ответ

3

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

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

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

+1

Использование multicore не позволит ему использовать 3 хоста. Но он мог использовать кластер MPI со снегом. –

+0

@SteveWeston: хорошо пункт. Я не заметил несколько хостов ... –

+0

Другим вариантом является использование одного рабочего на узел со снегом, а затем использование многоядерных процессоров для каждого рабочего. Это больше работы, но масштабы намного лучше. –

Смежные вопросы