Як можна оптимізувати обчислювальну ефективність при підгонці складної моделі до великого набору даних неодноразово?


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 шкіл. Перед запуском я видалив усі невикористані змінні з фрейму даних і видалив усі інші об'єкти з пам'яті. Проблема, яка у мене є, полягає в тому, що запускати потрібно дуже багато часу, якщо я не скорочую ітерації до неприпустимо невеликої кількості. З 50 000 ітерацій потрібно 5 годин, і у мене є багато різних моделей. Тож я хотів би знати, чи є способи прискорити виконання коду чи інші пакунки, які я можу використовувати. Я використовую, MCMCglmmтому що я хочу довірчі інтервали для випадкових ефектів.

З іншого боку, я сподівався отримати новий ПК пізніше цього року, але з невеликою долею мені вдасться досягти цього, тому мені було цікаво, як найкраще витратити обмежену кількість грошей на нове обладнання - більше оперативної пам’яті , швидший процесор і т. д. Переглядаючи диспетчер завдань, я не вважаю, що проблема оперативної пам'яті (вона ніколи не перевищує 50% фізичної кількості), але використання процесора не набагато перевищує 50%, що вважає мене дивним . Моя поточна настройка - це ядро ​​Intel i5 2,66 ГГц, 4 Гб оперативної пам’яті, 7200 об / хв. Чи розумно просто отримати найшвидший процесор за рахунок додаткової оперативної пам’яті? Я також цікавився, як впливає розмір кешу 3-го рівня процесора на такі статистичні обчислювальні проблеми?

Оновлення: Запитавши мета-SO, мені порадили перефразувати питання та опублікувати повідомлення про Superuser. Для цього мені потрібно детальніше розповісти про те, що відбувається "під капотом" у MCMCglmm. Я маю рацію, думаючи, що основна частина обчислень витрачається на оптимізацію - я маю на увазі пошук максимуму якоїсь складної функції? Чи є матричною інверсією та / або іншими операціями лінійної алгебри також звичайною операцією, яка може спричинити вузькі місця? Будь-яка інша інформація, яку я могла би надати спільноті Суперусерів, була б найвдячнішою.


Я не думаю, що це має бути несподіванкою, що MCMC займає багато часу на подібні проблеми. Я впевнений, що, ймовірно, є способи змусити його працювати швидше. Але для виправдання правильної відповіді все одно знадобиться час.
Майкл Р. Черник

@Michael Chernick, дякую - я знаю, що це ще забирає час. Я просто хотів би максимально зменшити його, ось і все. Мій тато працює у своїй роботі Oracle SPARC T4, і він працює досить швидко; MCMC;)
Джо Кінг,

3
@JoeKing, я змінив вашу назву, щоб вона була більш описовою і, можливо, залучила більше користувачів, які можуть вам допомогти. Я також виявив, що примірка lmer()моделей до великих наборів даних може зайняти досить багато часу, особливо якщо це потрібно робити багато разів. Відповідь на ваше запитання може полягати в паралельних обчисленнях, хоча інші користувачі (наприклад, @DirkEddelbuettel) були б набагато корисніші, ніж мені в цьому. Також є ймовірність, що ви отримаєте кращі відповіді на stackoverflow.
Макрос

Макрос, дякую за корисну редакцію. Я також використовував glmer(як ви знаєте з інших моїх публікацій), і це займає близько 20 секунд, але проблема полягає в тому, що він не дає довірчих інтервалів або стандартних помилок, і з того, що я читав у архіві розсилки, автор архіву lme4Пакет говорить, що розподіл вибірки випадкових ефектів може бути дуже перекошеним, тому про ці статистичні дані не повідомляється. Насправді я виявив, MCMCglmmщо в моєму випадку вони наближаються до нормальних (не те, що це дуже допомагає - я просто кажу). Було б краще, якби я просив перенести його на SO?
Джо Кінг

1
Я не знаю специфіки mcmcglmm, але багато використовував методи MCMC. Найприємніше в MCMC - це те, що це бентежно паралельно (це технічний термін!). Якщо у вас кілька ядер, ви запускаєте незалежні ланцюги на кожному, а потім об'єднуєте результати. Так я запускаю MCMC, але я написав власні паралельні коди C ++ (використовуючи MPI) для цього. З точки зору апаратних порад, знайдіть щось з якомога більше ядер. Це передбачає, що будь-який інструмент, яким ви користуєтесь, може скористатися кількома ядрами. З точки зору інформації, яку слід надати СУ у своєму питанні, з’ясуйте, чи можете ви використовувати ядра.
Богдановіст

Відповіді:


3

Чому б не запустити його на послугу хмарних обчислень EC2 Amazon або подібну подібну послугу? MCMCpackце, якщо я добре пам’ятаю, в основному реалізований на C, тому він не стане набагато швидшим, якщо ви не зменшите складність моделі, ітерації тощо. За допомогою EC2 або подібних хмарних обчислювальних сервісів ви можете мати кілька примірників на будь-яких характеристики, які ви хочете, і запускайте всі свої моделі відразу.


Одна зміна цього: запуск на m2.4xlarge (опція 68,7 Гб оперативної пам’яті) - єдиний спосіб гарантувати отримання повноцінної машини, так що вам не обов'язково траплятися з проблемами кешування оперативної пам’яті, які можуть виникати на віртуальних машинах (віртуальні машини / AMI), які працюють на частці машини.
Ітератор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.