Ядра mclapply проводят много времени в непрерывном сне

Это несколько общий вопрос, за который я прошу прощения, но я не могу создать пример кода, воспроизводящий поведение. Мой вопрос таков: я оцениваю большой набор данных (~ 11 миллионов строк с 274 измерениями), разбивая набор данных на список кадров данных, а затем запуская функцию оценки на 16 ядрах 24-ядерного сервера Linux с использованием mclapply . Каждый фрейм данных в списке назначается порожденному экземпляру и оценивается, возвращая список фреймов данных прогнозов. Во время работы mclapply различные экземпляры R проводят много времени в непрерывном спящем режиме, больше, чем они тратят на работу. Кто-нибудь еще сталкивался с этим, используя mclapply? Я новичок в Linux, с точки зрения ОС это имеет смысл? Спасибо.


person TomR    schedule 05.02.2014    source источник
comment
Это не сон. Вы можете попробовать Rprof или аналогичный инструмент для отслеживания многоядерных процессов, чтобы увидеть, какие операции занимают много времени.   -  person Carl Witthoft    schedule 05.02.2014
comment
Вы должны быть осторожны при использовании mclapply для работы с большими наборами данных. Вы должны проверить, не мало ли у вас памяти и плохо ли вы меняетесь. Работает ли он лучше при использовании меньшего количества ядер?   -  person Steve Weston    schedule 05.02.2014
comment
У меня немного мало свопа, но я думаю, что проблема в памяти в целом. Он очень часто используется в этой операции, и это кажется узким местом. В настоящее время мой список имеет тот же размер, что и количество ядер. Если я удлиню список или буду использовать меньше ядер, это поможет? Какую роль играет предварительное планирование?   -  person TomR    schedule 06.02.2014


Ответы (1)


Вы должны быть осторожны при использовании mclapply для работы с большими наборами данных. Легко создать слишком много рабочих для объема памяти на вашем компьютере и объема памяти, используемого вашими вычислениями. Трудно предсказать требования к памяти из-за сложности управления памятью в R, поэтому лучше всего тщательно отслеживать использование памяти с помощью таких инструментов, как «top» или «htop».

Вы можете уменьшить использование памяти, разделив свою работу на большее количество, но меньших задач, поскольку это может уменьшить объем памяти, необходимой для вычислений. Я не думаю, что выбор предварительного планирования сильно влияет на использование памяти, так как mclapply никогда не будет разветвлять более mc.cores воркеров за раз, независимо от значения mc.prescheduling.

person Steve Weston    schedule 05.02.2014
comment
Спасибо, это то, что я в итоге сделал. Я только что добавил слой списков, поэтому вместо того, чтобы разбивать мою массивную систему подсчета очков на список из 16 кадров, я разделил его на список списков из 16 кадров, и, похоже, он работает нормально. - person TomR; 07.02.2014