Пакеты R nlt / adlift / ebayesthresh используют огромные объемы памяти; как повысить производительность?

Все началось с пакета R , который мне пришлось плохо использовать ( 'nlt' ), который имеет 2 другие (довольно большие) зависимости пакетов ( 'adlift' , 'ebayesthresh' ). Мне он понадобился для анализа выборки данных примерно из 4000 точек.

Алгоритмы создают множество «скрытых» векторов, поэтому даже если на первый взгляд кажется, что у вас достаточно памяти для загрузки выборки данных и ее обработки, все быстро портится. Здесь я должен упомянуть, что в моем распоряжении есть Ubuntu x64 и Windows x64 с 4 ГБ оперативной памяти.

Думаю, из чистого любопытства и мазохизма я решил попробовать Amazon EC2 ] пример. В итоге я попробовал несколько из них и остановился на Экстра-большом экземпляре с высокой памятью 17,1 ГБ памяти с 6,5 ЭБУ, когда снова у меня закончилась память, и Ubuntu убил мою работающую функцию.

В итоге я использовал подход разделить-применить-объединить с 'snowall' , 'foreach' и 'doSMP' . Я разбил свои данные, обработал каждый блок и объединил результаты. Слава богу, лаппи и sfLapply существуют. Образец был проанализирован менее чем за 7 минут на моем ноутбуке.

Думаю, я должен быть счастлив, но 7 минут - это все еще много, и я бы не хотел снова переходить на Amazon EC2, если на самом деле это не так. больше ничего не осталось, чтобы сократить время выполнения.

Я провел небольшое исследование, пакеты 'bigmemory' и 'ff' для R, похоже, позволяют значительно ускорить работу, особенно если Я использую данные с резервным копированием.

Пакет 'nlt' принимает только векторы в качестве входных данных, а 'bigmemory' , например, имеет свой особый тип данных, big.matrix. Даже если бы я волшебным образом смог передать big.matrix в пакет 'nlt' , functions

Я прыгаю через акулу? Может ли кто-нибудь еще предложить другое решение или поделиться аналогичным опытом?

8
задан smci 16 November 2018 в 08:30
поделиться