Я запускаю R на linux box, который имеет 8 многоядерных процессоров, и у меня есть проблема оптимизации, которую я хотел бы ускорить, распараллеливая сама процедура оптимизации. Важно отметить, что эта проблема включает в себя (1) несколько параметров, и (2) по своей сути медленный модель работает. Довольно распространенная проблема!Параллельная оптимизация в R
Кто-нибудь знает о параллельном оптимизаторе для таких случаев?
В частности, решатели, такие как nlm()
, выполняют множественные оценки моделей (по два значения каждого параметра) каждый раз, когда алгоритм делает шаг в пространстве параметров, поэтому распараллеливание этого экземпляра нескольких прогонов моделей значительно ускорит процесс в этих ситуациях, когда больше, чем несколько значений параметров подходят.
Похож кодами, который делает использование пакета parallel
может быть написано таким образом, чтобы пользователь имел бы сделать минимального изменение кода, чтобы перейти от использования nlm()
или optim()
к этой распараллеленные подпрограмме оптимизации. То есть, по-видимому, можно переписать эти процедуры в основном без каких-либо изменений, за исключением того, что шаг вызова модели несколько раз, как это принято в градиентных методах, будет выполняться параллельно.
В идеале, что-то вроде nlmPara() бы код, который выглядит
fit <- nlm(MyObjFunc, params0);
и требуют лишь незначительных модификаций, например,
fit <- nlmPara(MyObjFunc, params0, ncores=6);
мысли/предложения?
PS: Я предпринял шаги, чтобы ускорить эти пробежки модели, но они медленны по целому ряду причин (т. Е. Мне не нужны советы по ускорению запуска моделей! ;-)).
Немного больше читайте в разных оптимизаторах, и похоже, что этот вид взлома потребует перезаписывания кода C (например, переписывание порта C подпрограммы OPTIF9 для использования нескольких потоков) или создание собственного оптимизатора R для использования опции параллельного параллелизма, 'multicore',' snow' и т. д. –
Пакет 'optimx' /' optimplus' имеет версии с поддержкой R-интерфейса для множества алгоритмов оптимизации: может быть, проще всего начать с этого. ..? –
Спасибо Ben :-) optimx позволяет вводить функцию градиента. Я попробую и посмотрю, не могу ли я просто передать ему параллельный блок кода, который должен сделать трюк. –