R параллельная обработка и (оптимизированные) лучшие практики BLAS/LAPACK

Я имею в виду пару проектов R, оба из которых я хотел бы использовать параллельную обработку и оптимизированные библиотеки BLAS, но я новичок в этом вопросе, поэтому я надеялся получить несколько советов по лучшему подходу (е) для сценариев, которые я планирую.

Я знаю, что существует множество способов использования оптимизированных библиотек - например, я мог бы использовать Microsoft Open R (ранее Revolution R), который построен для использования библиотеки MKL - которые оптимизированы и (я думаю) автоматически используют параллельные вычисления. Или в Linux я мог бы использовать Atlas или OpenBlas. Оба из которых описаны здесь: http://brettklamer.com/diversions/statistical/faster-blas-in-r/

В качестве альтернативы я мог бы использовать различные пакеты в R (как я упоминаю ниже), которые используют (я думаю) оптимизированные библиотеки автоматически (например, RcppEigen).

Как вы можете сказать, я очень мало знаю обо всем этом и, хотя я прочитал документацию, многое из этого предполагает знание (и знание терминологии) далеко за пределами моего опыта. Я, наверное, уже совершенно не прав.

Я также знаю, что существует множество способов параллельной обработки. Кажется, что самое простое - ParallelsMap, основанный на параллельности. Конечно, есть несколько других методов.

Может быть, лучше объяснить, что я хочу сделать.

  1. Первый проект включает в себя инструмент машинного обучения для использования некоторыми друзьями. Поскольку многие из них не будут иметь опыта работы с R (или чего-то другого, кроме Excel), я упаковываю все в развертываемое блестящее приложение, используя потрясающий инструмент: https://github.com/wleepang/DesktopDeployR.

Проект потребует использования svm от e1071 ( https://cran.r-project.org/web/packages/e1071/index.html). Я планировал реализовать настройку гиперпараметров, используя mlr ( https://mlr-org.github.io/mlr-tutorial/release/html/index.html), а не функцию настройки в e1071.

Я считаю, что мне не нужно беспокоиться об оптимизированных библиотеках BLAS для svm, так как e1071 использует libsvm - что, я полагаю, делает это для меня. Но я легко могу ошибаться. Может быть, это делает параллельную обработку тоже.

Что касается настройки гиперпараметров, которая является наиболее трудоемкой частью процесса, я понятия не имею об использовании оптимизированных библиотек. Я думаю, что это зависит от того, какой алгоритм настройки вы попросите использовать mlr (он использует алгоритмы из других пакетов).

В mlr упоминается, что parallelMap может использоваться вокруг кода для автоматического распараллеливания (это термин?) частей, которые могут выполняться параллельно.

Итак, для этого проекта я думаю, что для запуска параллельного процесса в этом проекте достаточно использовать ParallelMap, так как большая часть кода будет слишком высокого уровня, чтобы делать что-либо вручную.

Но верно ли, что все e1071 (и, следовательно, libsvm) используют оптимизированные библиотеки BLAS - или мне следует подумать о реализации чего-либо в этом направлении?

Если нет, то все пользователи будут работать на базе Windows, так что, хотя Microsoft Open R выглядит неплохо - я не знаю простого способа сделать его переносимым так же, как использование R-Portable в DesktopDeployR, связанный выше. Есть ли простой способ сделать это с "нормальным" R - который подходит для DesktopDeployR?

  1. Второй проект - это то, что я хотел бы попробовать написать свой первый R-пакет. Я написал полезный код (первоначально в Maple, а затем в R), который моделирует некоторые физические системы. Я подумал, что было бы неплохо написать R-пакет об этом и немного поспособствовать сообществу. Мой код содержит несколько циклов for и несколько умножений / сложений матриц, а также поиск собственных векторов (используя модифицированную версию "eigen", которая не сортирует собственные векторы). Возможно я должен использовать RcppEigen - или другой - для этого в настоящее время, это было первоначально написано в 2007 (я опаздываю).

Собственная документация определяет "eigen использует подпрограммы LAPACK DSYEVR, DGEEV, ZHEEV и ZGEEV.", Но я не знаю, означает ли это, что они оптимизированы или (медленнее) те, что обеспечивает R. Мое невежество просвечивает снова.

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

Или, как пакет R, лучше оставить эти решения пользователю - даже если это означает, что они должны выполнять какие-либо параллельные процессы на более высоком уровне?

tl; dr - как лучше всего обеспечить, чтобы R использовал оптимизированные библиотеки линейной алгебры (которые также используют параллельную обработку), и как обеспечить выполнение циклов на нескольких ядрах? Я думаю, что есть пакеты, которые автоматически делают обе для линейной алгебры, но я не уверен. Параллельная карта - лучшее решение для циклов - или лучше погрузиться в параллель?

0 ответов

Другие вопросы по тегам