Графическое параллельное программирование на примере задачи выявления сообществ в графах Аркадий Климов [email protected] Институт проблем проектирования в микроэлектронике РАН GraphHPC-2016 МГУ им. М.В.Ломоносова, Москва 3 марта 2016 История появления доклада На GraphHPC-2015 был представлен доклад Александра Позднеева «Алгоритм выделения сообществ в графах для параллельных компьютеров с распределенной памятью» ─ по материалам статьи X.Que, F. Checonni, F.Petrini, J.Gunnels “Scalable community detection with the Louvain algorithm” [QCPG], которая на тот момент еще не была опубликована. В нем предлагалось использование хеш-таблиц для поддержки обмена информацией. Я увидел много сходства с моделью вычислений потока данных (ПД), где в реализации используются хеш-таблицы при приеме сообщений. Захотелось выразить этот алгоритм на языке потоков данных. Летом я получил текст статьи [QCPG] и смог реализовать свое желание. Детали алгоритма уточнялись в прямой переписке с авторами. Результат предлагаю вашему вниманию. Основная задача доклада – на примере данного алгоритма показать изобразительные средства языка программирования. Для облегчения понимания используется графическая форма языка ПД. Язык находится в процессе становления. Сам алгоритм не существен, но нужен для понимания изображаемого в языке. Поэтому с него и начнем (очень коротко). 2 План доклада • Понятия о графах • Задача о разбиении графа и модулярность • Лувенский метод A. Общая идея B. Последовательный алгоритм C. Параллельный алгоритм • Параллельный метаязык (Pamela) • Параллельный алгоритм выявления сообществ (Лувенским методом) на графическом языке Pamela-G (на одном слайде) 3 Графы. Общие сведения Граф G = (V,E,W) 1 V – множество вершин (u,v,…) E – множество дуг (u→v) W: E → R (весовая функция) 2 1 2 2 3 1 3 4 Дугa Вершина Вес • • • • • • n=|V| (число вершин) Дуги имеют кратности, или веса (0, если дуги нет) Граф симметричный: wuv wuv . 0120 Граф задан весовой матрицей W: 1010 2143 На диагонали – удвоенный вес. Вес вершины: wu wuv 0 0 3 0 v 4 Модулярность – мера качества разбиения Кластеризация – разбиение на непересекающие подмножества (сообщества). Хорошо, если внутренних связей много, внешних мало. Модулярность – мера качества разбиения % внутренних дуг (по числу концов) % внутренних дуг для случайного графа при тех же степенях вершин Modularity [M.E.J. Newman, 2004] 2 c c Q in tot2 2m 4m cС c Выигрыш от присоединения изолированной вершины u к сообществу C : u wu c c wu c wu tot Q u c 2m 2m 2 Используемые величины (обозначения из статьи X.Que et al): w wuv u vV u w wuv u c vc c w in u c uc c w tot u uc c c 2m wu uV u c c 5 Лувенский алгоритм. Идея. OUTER INNER LOOP LOOP Предложен группой студентов, обучавшихся в Лувенском университете (Бельгия) до 2008 года 1. Полагаем С = { {u} | u∈V } – множество одноэлементных сообществ. 2. SWEEP: для каждой вершины u находим наилучшее сообщество ĉ(u), в которое ее наиболее выгодно переместить, и перемещаем, если оно отличается от старого cu (при этом модулярность строго увеличивается). 3. Повторяем п.2, пока удается с выгодой переместить хоть одну вершину. 4. GRAPH RECONSTRUCTION: сообщества становятся вершинами нового графа, дуги между сообществами получаются из дуг между их членами, веса суммируются. 5. Повторяем (с п.1), пока удается увеличивать модулярность Q, иначе конец. Можно распараллелить пп. 2 и 4, но без гарантии монотонности в п.2 Проблема 1. Вычисление wu c в распределенной среде. Проблема 2. Конфликты: одни перемещения влияют на величину выигрышей других перемещений. Возможны проблемы со сходимостью. 6 Элементы языка Pamela-G Значение Входы узла Индекс целевого узла Индекс в узле u,с u,* ΔQ DifQ δ u,c ΔQ−δ,c u @(max)(ΔQ,c) Токен Индекс с маской Простой узел Операция свертки Gv u Узел с одним собирающим входом Узлы имеют индексы i и передают друг другу токены val i . Выражения в токене вычисляются в среде узла-отправителя. Семейства однотипных узлов реализуются хеш-таблицами по индексам. Узел (с конкретным индексом i1 ) срабатывает (и выполняет предусмотренные в нем действия), когда прибывшие токены присутствуют на всех его входах x . Элемент хеш-таблицы создается по приходу первого токена с данным индексом. Собирающий узел (вход) @(op)name : по первому токену элемент создается, последующие к нему добавляются. 7 Элементы языка Pamela-G. Итерация (средство заимствовано из системы LabVIEW от NI) for (it=0; P(…) ; it++) {…} Все приближения (кроме начального) со всех итераций ВЫЧИСЛЕНИЕ SQRT(A) Аргумент, общий для всех итераций it i x A it a x x1 =0.5* (x + a/x) 1 − 0.00001 Начальное значение x Значение из предыдущей итерации sqrt(A) abs > Значение P(…) Значение для следующей итерации Значение, вычисленное на последней итерации (выходное) 8 The Louvain Algorithm Flowgraph OUTER LOOP INNER LOOP - REFINE s INPUT GRAPH t Edge weight Edge v,w v,u w VState STATE PROPAGATION v,w u,c u v,c w @(+) wu→c c v=u u Vertex weight GRAPH RECONSTRUCTION c, wu→c . u CHECK THRESHOLD w @(+) wu [nu] u u u,* u 1 wu ChkTh @(+)wuu u THE VERTEX’ COMMUNITY u,* u,* FIND BEST COMMUNITY wu→c cu wuu wu u,c @(max) (mu,ĉ) u ΔQ,c ΔQ = wu→c/(2m) − wu* Σctot/(2m2) − m −(c=cu? wuu/(2m) − wu2/(2m2) : 0) с==сu Σctot @(+)n *,c Total weight sum wu→c u mu,ĉ UPDATE COMMUNITY INFORMATION u @(+)m c COMPUTE THRESHOLD ΔQ^ (Histo-Scan-Search) Total number of vertices c,w mu ≥ ΔQ^ u c ĉ c cʹ FACTOR GRAPH TOWER cʹ,c w cʹ,c @(+) w ΔQ^ − wu c + wu ĉ @(+)Σctot c CALCULATE MODULARUTY Σctot m @(+)Σcin c @(+)Q Qc=Σcin/(2m) − (Σctot/(2m))2 MODULARITY > 0 0 > 9 The Louvain Algorithm Flowgraph (the previous slide zoomed) OUTER LOOP INNER LOOP - REFINE s INPUT GRAPH t Edge weight Edge v,w v,u w v,w VState u c v=u u Vertex weight STATE PROPAGATION w v,c u,c @(+) wu→c w @(+) wu [nu] u @(+)wuu u u THE VERTEX’ COM u,* wu→c cu wuu wu u,c ΔQ = wu→c/(2m) − wu* Σctot/(2m2) − m −(c=cu? wuu/(2m) − wu2/(2m2) : 0) u,* u,* 1 u FIND B ΔQ,c с==сu Σctot MODULARITY @(+)n Total number of vertices @(+)m wu→c u CO (H *,c Total Weight sum @ 10 The Louvain Algorithm Flowgraph (the previous slide zoomed) OUTER LOOP INNER LOOP - REFINE s INPUT t Edge weight Фрагмент алгоритма из статьи [QCPG]: GRAPH Edge 1 function STATE PROPAGATION v,w v,u 2 begin w 3 // Scan In_Table and send messages. 4 for ((v,u),w) ∈ In_Tablep do weight 5 send ((v,c),w)Vertex to process pʹ (v∈Vpʹ , u∈c) ; 6 // Update Out_Table. @(+) wu [n 7 for ((u,c),w) received dou] 8 if ∃((u,c),wʹ) ∈ Out_Table u u p then 9 wʹ ← wʹ + w 10 else u,* 11 place the triple with linear probing ; 1 u v,w VState u c v=u u STATE PROPAGATION w v,c u,c @(+) wu→c w @(+)wuu u THE VERTEX’ COM u,* wu→c cu wuu wu u,c ΔQ = wu→c/(2m) − wu* Σctot/(2m2) − m −(c=cu? wuu/(2m) − wu2/(2m2) : 0) u,* FIND B ΔQ,c с==сu Σctot MODULARITY @(+)n Total number of vertices @(+)m wu→c u CO (H *,c Total Weight sum @ 11 Заключение 1. Представлен язык PAMELA(G) = PArallel MEta LAnguage. 2. Предназначен для выражения чистой математической структуры алгоритмов. Описание может быть исполнено! 3. Сверхзадача – уметь быстро конкретизировать до эффективных программ в разных платформах и парадигмах, дополнительно управляя распределением, представлением информации и т.п. 4. Индексирование (узлов и токенов) – основная «фича» языка, расширение старой парадигмы dataflow. Обеспечивает: – семантическую выразительность (ср. Map-Reduce) – управление распределением по пространству-времени в распределенных системах. 5. Графическая форма улучшит обзорность кода, повысит продуктивность разработки, отладки, анализа, поиска «узких мест» и т.п. 6. Надо больше экспериментировать, пробовать выражать разные алгоритмы, проводить их преобразования в традиционные языки. 7. Приглашаем к сотрудничеству! Приходите со своими задачами! 8. Только совместно сможем создать мощный инструмент! 12 Ссылки 1. 2. 3. 4. 5. M. E. J. Newman. Analysis of weighted networks. Physical review E, vol. 70, no. 5, p. 056131, Nov. 2004. – вводит понятие модулярности. V. Blondel, J. Guillaume, R. Lambiotte, and E. Lefebvre. Fast unfolding of communities in large networks. Journal of Statistical Mechanics: Theory and Experiment, 2008(10):P10008, 2008. – последовательный Лувенский алгоритм. S. Fortunato. Community detection in graphs. Physics Reports, 486, no. 3-5, pp. 75 – 174, 2010. – очень хороший обзор методов. Xinyu Que, Fabio Checconi, Fabrizio Petrini, John A. Gunnels. Scalable Community Detection with the Louvain Algorithm. 2015 IEEE 29th International Parallel and Distributed Processing Symposium, pages 28– 37, May 2015. – статья, вдохновившая данный доклад [QCPG]. http://labview-rus.blogspot.ru/ . – о LabVIEW по-русски. 13