[Обновление 1: Для тех, кто только что настроился: первоначальный вопрос заключался в распараллеливании вычислений для решения проблемы регрессии;учитывая, что основная проблема связана с альфа-центральностью, некоторые из таких проблем, как расфасовка и регуляризованная регрессия, могут быть не так быстро применимы, хотя это ведет к дальнейшим статистическим дискуссиям.]
множество вопросов для решения, от инфраструктурных до статистических.
Инфраструктура [Обновлено - см. также Обновление № 2 ниже.]
Что касается распараллеленных линейных решателей, выможет заменить библиотеку R BLAS / LAPACK библиотекой, поддерживающей многопоточные вычисления, например ATLAS, Goto BLAS, Intel MKL или AMD ACML.Лично я использую версию AMD.ATLAS раздражает, потому что каждый фиксирует количество ядер при компиляции, а не во время выполнения.МКЛ является коммерческим.Goto больше не поддерживается, но часто является самым быстрым, но только с небольшим отрывом.Это по лицензии BSD.Вы также можете взглянуть на Revolution Analytics R, который, я думаю, включает в себя библиотеки Intel.
Итак, вы можете сразу начать использовать все ядра с простым внутренним изменением.Это может дать вам 12-кратное ускорение (b / c от количества ядер) или потенциально намного больше (b / c лучшей реализации).Если это сбивает время до приемлемого диапазона, то все готово.:) Но изменение статистических методов может быть даже лучше.
Вы не упомянули объем доступной оперативной памяти (или ее распределение по ядру или машине), но разреженныйСолвер должен быть достаточно умен в управлении доступом к ОЗУ и не пытаться одновременно пережевать слишком много данных.Тем не менее, если он находится на одной машине и если все делается наивно, то вы можете столкнуться с множеством обменов.В этом случае взгляните на пакеты типа biglm
, bigmemory
, ff
и другие.Первый предназначен для решения линейных уравнений (или, скорее, GLM) в ограниченной памяти, последние два адресуют общую память (т.е. отображение памяти и файловое хранилище), что удобно для очень больших объектов.Больше пакетов (например, speedglm
и других) можно найти в представлении задач CRAN для HPC .
. Полустатистическая, полу-вычислительная проблема заключается в визуализации вашей матрицы.Попробуйте выполнить сортировку по поддержке по строке и столбцу (идентично, если график не является ненаправленным, в противном случае выполните одно, а затем другое, или попробуйте метод переупорядочения, например, обратный Cuthill-McKee), а затем используйте image()
для построения матрицы.Было бы интересно посмотреть, как это формируется, и это влияет на то, какие вычислительные и статистические методы можно попробовать.
Еще одно предложение: можете ли вы перейти на Amazon EC2?Это недорого, и вы можете управлять собственной установкой.Если ничего другого, вы можете создать прототип того, что вам нужно, и перенести его на свой компьютер, как только вы протестировали ускорения.У JD Long есть пакет под названием segue
, который, очевидно, облегчает распределение заданий в инфраструктуре Amazon Elastic MapReduce. Нет необходимости переходить на EC2, если у вас 96 ГБ ОЗУ и 12 ядер - его распределение может ускорить процесс, ноэто не проблема здесь.Просто 100% -ное использование на этом компьютере было бы хорошим улучшением.
Статистика
Далее следуют несколько простых статистических вопросов:
BAGGING Вы можете рассмотреть выборку подмножеств ваших данных, чтобы соответствовать моделям, а затем упаковать ваши модели.Это может дать вам ускорение.Это может позволить вам распределить ваши вычисления на столько машин и ядер, сколько у вас есть.Вы можете использовать SNOW вместе с foreach
.
РЕГУЛЯРИЗАЦИЯ glmnet
поддерживает разреженные матрицы и работает очень быстро.Вы были бы мудры, чтобы проверить это.Будьте осторожны с плохо обусловленными матрицами и очень маленькими значениями лямбды.
RANK Ваши матрицы разрежены: они имеют полный ранг? Если это не так, это может быть частью проблемы, с которой вы сталкиваетесь. Когда матрицы либо единичные, либо почти одинаковые (проверьте примерный номер условия или хотя бы посмотрите, как сравниваются ваши 1-е и N-е собственные значения - если есть крутой спад, у вас проблемы - вы можете проверить eval1 против ev2 ,. .., EV10, ...). Опять же, если у вас есть почти единичные матрицы, вам нужно вернуться к чему-то вроде glmnet
, чтобы сжать переменные либо коллинеарные, либо с очень низкой поддержкой.
BOUNDING Можете ли вы уменьшить пропускную способность вашей матрицы? Если вы можете заблокировать его диагонализацию, это здорово, но у вас, вероятно, будут клики и члены нескольких кликов. Если вы можете обрезать наиболее плохо связанных членов, то вы сможете оценить их альфа-центральность как ограниченную сверху наименьшим значением в той же клике. В R есть несколько пакетов, которые подходят для такого рода вещей (посмотрите Reverse Cuthill-McKee или просто посмотрите, как бы вы конвертировали его в прямоугольники, часто относящиеся к кликам или гораздо меньшим группам). Если у вас есть несколько отключенных компонентов, то непременно разделите данные на отдельные матрицы.
АЛЬТЕРНАТИВЫ Вы преданы Альфа-центральности? Могут быть и другие показатели, которые монотонно коррелированы (то есть имеют высокую ранговую корреляцию) с тем же значением, которое можно рассчитать дешевле или, по крайней мере, реализовать достаточно эффективно. Если это сработает, тогда ваш анализ может быть выполнен с гораздо меньшими усилиями. У меня есть несколько идей, но на самом деле это не место для обсуждения.
Для большей статистической перспективы соответствующие вопросы и ответы должны быть выполнены на stats.stackexchange.com, перекрестная проверка .
Обновление 2: я слишком быстро отвечал и не рассматривал это в долгосрочной перспективе. Если вы планируете проводить исследования таких систем в долгосрочной перспективе, вам следует обратить внимание на другие решения, которые могут быть более применимы к вашему типу данных и вычислительной инфраструктуры. Вот очень хороший каталог опций как для решателей, так и для предварительных кондиционеров. Похоже, это не включает IBM Watson Solver Suite . Хотя установка программного обеспечения может занять несколько недель, вполне возможно, что один из пакетов уже установлен, если у вас есть хороший администратор HPC.
Кроме того, имейте в виду, что пакеты R могут быть установлены в каталог пользователя - вам не нужно устанавливать пакет в общем каталоге. Если вам нужно выполнить что-то как пользователь, отличный от вас, вы также можете загрузить пакет на пустое место или во временное пространство (если вы работаете только в 1 R экземпляре, но используете несколько ядер, ознакомьтесь с tempdir
).