Как я могу оптимизировать вычислительную эффективность при многократной подгонке сложной модели к большому набору данных?

12

У меня проблемы с производительностью при использовании MCMCglmmпакета в R для запуска модели смешанных эффектов. Код выглядит так:

MC1<-MCMCglmm(bull~1,random=~school,data=dt,family="categorical"
, prior=list(R=list(V=1,fix=1), G=list(G1=list(V=1, nu=0)))
, slice=T, nitt=iter, ,burnin=burn, verbose=F)

В данных содержится около 20 000 наблюдений, которые сгруппированы примерно в 200 школах. Я удалил все неиспользуемые переменные из фрейма данных и удалил все другие объекты из памяти перед запуском. У меня проблема в том, что для запуска требуется очень много времени, если я не уменьшу количество итераций до недопустимо малого числа. С 50000 итераций это занимает 5 часов, и у меня много разных моделей для запуска. Поэтому я хотел бы знать, есть ли способы ускорить выполнение кода или другие пакеты, которые я мог бы использовать. Я использую, MCMCglmmпотому что я хочу доверительные интервалы для случайных эффектов.

С другой стороны, я надеялся получить новый ПК позже в этом году, но, если повезет, я смогу продвинуть это вперед, поэтому мне было интересно, как лучше потратить ограниченное количество денег на новое оборудование - больше оперативной памяти более быстрый процессор и т. д. Наблюдая за диспетчером задач, я не верю, что проблема заключается в оперативной памяти (она никогда не превышает 50% физического использования), но загрузка ЦП также не превышает 50%, что мне кажется странным , Моя текущая настройка - Intel Core i5 2,66 ГГц, 4 ГБ оперативной памяти, 7200 об / мин. Разумно ли просто получить максимально быстрый процессор за счет дополнительной оперативной памяти? Я также задавался вопросом о влиянии размера кэша ЦП уровня 3 на статистические вычислительные проблемы, как это?

Обновление: После спросил на мета SO мне было рекомендовано перефразировать вопрос и пост на суперпользователя. Для этого мне нужно дать более подробную информацию о том, что происходит «под капотом» в MCMCglmm. Правильно ли я считаю, что большая часть времени вычислений тратится на оптимизацию - я имею в виду нахождение максимума какой-то сложной функции? Является ли инверсия матрицы и / или другие операции линейной алгебры распространенной операцией, которая может стать причиной узких мест? Любая другая информация, которую я мог бы предоставить сообществу суперпользователей, будет принята с благодарностью.

Джо Кинг
источник
Я не думаю, что это должно быть сюрпризом, что MCMC занимает много времени на такие проблемы. Я уверен, что, возможно, есть способы заставить его работать быстрее. Но чтобы найти правильный ответ, потребуется время.
Майкл Р. Черник
@ Майкл Черник, спасибо - я знаю, что это все еще займет время. Я просто хотел бы максимально уменьшить это, вот и все. У моего отца на работе работает Oracle SPARC T4, и он довольно быстро запускает MCMC;)
Джо Кинг,
3
@JoeKing, я отредактировал твой заголовок, чтобы он был более наглядным и, возможно, привлек больше пользователей, которые могут тебе помочь. Я также обнаружил, что подгонка lmer()моделей к большим наборам данных может занять довольно много времени, особенно если вам нужно делать это много раз. Ответ на ваш вопрос может лежать в параллельных вычислениях, хотя другие пользователи (например, @DirkEddelbuettel) были бы намного полезнее, чем я, с этим. Также есть шанс, что вы получите лучшие ответы на stackoverflow.
Макро
Макрос, спасибо за полезное редактирование. Я также использовал glmer(как вы знаете из моих других сообщений), и это занимает около 20 секунд, но проблема в том, что он не дает доверительных интервалов или стандартных ошибок, и из того, что я прочитал в архиве списка рассылки, автор lme4Пакет говорит, что выборочное распределение случайных эффектов может быть очень искажено, поэтому эти статистические данные не сообщаются. На самом деле я обнаружил, MCMCglmmчто в моем случае они приближаются к норме (не то, чтобы это сильно помогало - я просто говорю). Было бы лучше, если бы я попросил перенести его на SO?
Джо Кинг,
1
Я не знаю специфики mcmcglmm, но я часто использовал методы MCMC. Хорошая особенность MCMC в том, что она смущающе распараллеливаема (это технический термин!). Если у вас несколько ядер, вы запускаете независимые цепочки на каждом, а затем объединяете результаты. Вот как я запускаю MCMC, но я написал собственные параллельные коды C ++ (используя MPI) для этого. С точки зрения аппаратного обеспечения, выбирайте как можно больше ядер. Это предполагает, что любой инструмент, который вы используете, может использовать преимущества нескольких ядер. С точки зрения информации, чтобы дать SU в вашем вопросе, выясните, можете ли вы использовать ядра.
Богдановец

Ответы:

3

Почему бы не запустить его на сервисе облачных вычислений Amazon EC2 или подобном подобном сервисе? MCMCpackесли я правильно помню, он в основном реализован на C, поэтому он не станет намного быстрее, если вы не уменьшите сложность модели, итерации и т. д. С EC2 или подобными службами облачных вычислений вы можете иметь несколько экземпляров в любой ситуации. спецификации, которые вы хотите, и запустить все свои модели одновременно.

Zach
источник
Одна из модификаций этого: запуск на m2.4xlarge (опция оперативной памяти 68,7 ГБ) - это единственный способ гарантировать, что вы получаете полную машину, так что вы не обязательно сталкиваетесь с проблемами кэширования памяти, которые могут возникнуть на виртуальных машинах (виртуальных машинах). / AMIs), которые работают на долю машины.
Итератор