GraphHPC-2016 Графическое параллельное программирование на примере

реклама
Графическое параллельное программирование
на примере задачи выявления сообществ в графах
Аркадий Климов
Arkady.Klimov@gmail.com
Институт проблем проектирования в микроэлектронике РАН
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
vV
u
w
  wuv
u c
vc
c  w
in
u c
uc
c  w
tot
u
uc
c
c
2m   wu
uV
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
Скачать