Распараллелить Solve () для Ax = b? - PullRequest
9 голосов
/ 29 октября 2011

Перекрестно с STATS.se, так как эта проблема может охватить оба STATs.se/SO https://stats.stackexchange.com/questions/17712/parallelize-solve-for-ax-b


У меня есть несколько очень больших разреженных матриц, созданных с помощью функции spMatrix из пакета матриц.

Использование функции solve () работает для моей проблемы Ax = b, но это занимает очень много времени.Несколько дней.

Я заметил, что http://cran.r -project.org / web / packages / RScaLAPACK / RScaLAPACK.pdf , кажется, имеет функцию, которая может распараллелить функцию решения, однако это может занять нескольконедели, чтобы установить новые пакеты на этот конкретный сервер.

На сервере уже установлен пакет snow.

Итак

  1. Есть ли способ использовать снег для распараллеливания этой операции?
  2. Если нет, есть ли другие способы ускорить этот тип операции?
  3. Существуют ли другие пакеты, такие как RScaLAPACK?Похоже, мой поиск в RScaLAPACK показал, что у людей было много проблем с ним.

Спасибо.

[РЕДАКТИРОВАТЬ] - Дополнительные детали

Матрицы составляют около 370 000 x 370 000.Я использую его для определения альфа-центральности, http://en.wikipedia.org/wiki/Alpha_centrality. Первоначально я использовал функцию альфа-центральности в пакете igraph, но это приведет к сбою R.

Подробнее

  • Это на одной машине с 12 ядрами и 96 гигабайтами памяти (я полагаю)
  • Это ориентированный график вдоль линий соотношения цитирования на бумаге.
  • Расчет числа и плотности условиязаймет некоторое времяБудет публиковаться по мере поступления.
  • Будет кросспост на stat.SE и добавит ссылку сюда

1 Ответ

8 голосов
/ 29 октября 2011

[Обновление 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% -ное использование на этом компьютере было бы хорошим улучшением.

Статистика

Далее следуют несколько простых статистических вопросов:

  1. BAGGING Вы можете рассмотреть выборку подмножеств ваших данных, чтобы соответствовать моделям, а затем упаковать ваши модели.Это может дать вам ускорение.Это может позволить вам распределить ваши вычисления на столько машин и ядер, сколько у вас есть.Вы можете использовать SNOW вместе с foreach.

  2. РЕГУЛЯРИЗАЦИЯ glmnet поддерживает разреженные матрицы и работает очень быстро.Вы были бы мудры, чтобы проверить это.Будьте осторожны с плохо обусловленными матрицами и очень маленькими значениями лямбды.

  3. RANK Ваши матрицы разрежены: они имеют полный ранг? Если это не так, это может быть частью проблемы, с которой вы сталкиваетесь. Когда матрицы либо единичные, либо почти одинаковые (проверьте примерный номер условия или хотя бы посмотрите, как сравниваются ваши 1-е и N-е собственные значения - если есть крутой спад, у вас проблемы - вы можете проверить eval1 против ev2 ,. .., EV10, ...). Опять же, если у вас есть почти единичные матрицы, вам нужно вернуться к чему-то вроде glmnet, чтобы сжать переменные либо коллинеарные, либо с очень низкой поддержкой.

  4. BOUNDING Можете ли вы уменьшить пропускную способность вашей матрицы? Если вы можете заблокировать его диагонализацию, это здорово, но у вас, вероятно, будут клики и члены нескольких кликов. Если вы можете обрезать наиболее плохо связанных членов, то вы сможете оценить их альфа-центральность как ограниченную сверху наименьшим значением в той же клике. В R есть несколько пакетов, которые подходят для такого рода вещей (посмотрите Reverse Cuthill-McKee или просто посмотрите, как бы вы конвертировали его в прямоугольники, часто относящиеся к кликам или гораздо меньшим группам). Если у вас есть несколько отключенных компонентов, то непременно разделите данные на отдельные матрицы.

  5. АЛЬТЕРНАТИВЫ Вы преданы Альфа-центральности? Могут быть и другие показатели, которые монотонно коррелированы (то есть имеют высокую ранговую корреляцию) с тем же значением, которое можно рассчитать дешевле или, по крайней мере, реализовать достаточно эффективно. Если это сработает, тогда ваш анализ может быть выполнен с гораздо меньшими усилиями. У меня есть несколько идей, но на самом деле это не место для обсуждения.

Для большей статистической перспективы соответствующие вопросы и ответы должны быть выполнены на stats.stackexchange.com, перекрестная проверка .


Обновление 2: я слишком быстро отвечал и не рассматривал это в долгосрочной перспективе. Если вы планируете проводить исследования таких систем в долгосрочной перспективе, вам следует обратить внимание на другие решения, которые могут быть более применимы к вашему типу данных и вычислительной инфраструктуры. Вот очень хороший каталог опций как для решателей, так и для предварительных кондиционеров. Похоже, это не включает IBM Watson Solver Suite . Хотя установка программного обеспечения может занять несколько недель, вполне возможно, что один из пакетов уже установлен, если у вас есть хороший администратор HPC.

Кроме того, имейте в виду, что пакеты R могут быть установлены в каталог пользователя - вам не нужно устанавливать пакет в общем каталоге. Если вам нужно выполнить что-то как пользователь, отличный от вас, вы также можете загрузить пакет на пустое место или во временное пространство (если вы работаете только в 1 R экземпляре, но используете несколько ядер, ознакомьтесь с tempdir).

...