Jump to content

ГрафБЛАС

Спецификация GraphBLAS
Логотип API GraphBLAS
Статус Выпущенный
Впервые опубликовано 29 мая 2017 г. ( 29 мая 2017 г. )
Последняя версия 2.1.0
22 декабря 2023 г. ( 22 декабря 2023 г. )
Домен Графовые алгоритмы
Лицензия С указанием авторства Creative Commons (CC BY) 4.0
Веб-сайт графблас .org

GraphBLAS ( / ˈ ɡ r æ f ˌ b l ɑː z / ) — API спецификация , определяющая стандартные строительные блоки для графовых алгоритмов на языке линейной алгебры . [1] [2] GraphBLAS построен на идее, что разреженная матрица может использоваться для представления графов как в виде матрицы смежности, так и в виде матрицы инцидентности . Спецификация GraphBLAS описывает, как операции с графами (например, обход и преобразование графов) могут быть эффективно реализованы с помощью линейных алгебраических методов (например, умножение матриц ) над различными полукольцами . [3]

Разработка GraphBLAS и его различных реализаций — это постоянная работа сообщества, включающая представителей промышленности, научных кругов и государственных исследовательских лабораторий. [4] [5]

Алгоритмы на графах уже давно используют идею о том, что граф можно представить в виде матрицы , а операции над графом можно выполнять как линейные преобразования и другие линейные алгебраические операции над разреженными матрицами. [6] : xxv – xxvi Например, умножение матрицы на вектор можно использовать для выполнения шага поиска в ширину . [6] : 32–33 

Спецификация GraphBLAS (и различные библиотеки , ее реализующие) предоставляет структуры данных и функции для вычисления этих линейных алгебраических операций. В частности, GraphBLAS определяет объекты разреженной матрицы, которые хорошо сопоставляются с графами, где вершины, вероятно, связаны с относительно небольшим количеством соседей (т. е. степень значительно меньше вершины общего количества вершин в графе). Спецификация также позволяет использовать различные полукольца для выполнения операций в различных математических контекстах.

Первоначально мотивированный необходимостью стандартизации в графовой аналитике, подобно своему тезке BLAS , [7] стандарт GraphBLAS также начал интересовать людей за пределами сообщества графов, включая исследователей в области машинного обучения, [8] и биоинформатика. [9] Реализации GraphBLAS также использовались в высокопроизводительных графовых приложениях баз данных, таких как RedisGraph . [10] [11] [12] [13] [14]

Спецификация

[ редактировать ]

Спецификация GraphBLAS находится в разработке с 2013 года. [15] и достиг версии 2.1.0 по состоянию на декабрь 2023 года. [16] Хотя формально это спецификация языка программирования C , для разработки реализаций в духе GraphBLAS использовались различные языки программирования, включая C++ , [17] Ява , [18] и Нвидиа КУДА . [19]

Совместимые реализации и языковые привязки

[ редактировать ]

В настоящее время существуют две полностью совместимые эталонные реализации спецификации GraphBLAS. [20] [21] существует совместимая спецификация Привязки, предполагающие, что для Python , [22] МАТЛАБ , [23] и Джулия [24] [25] языки программирования.

Линейные алгебраические основы

[ редактировать ]
Вычисление одного шага поиска в ширину графа. Умножение матрицы на вектор можно использовать для вычисления исходящих соседей (вершины 1 и 3, показаны синим цветом) данной исходной вершины (показаны красным). Обратите внимание, что матрица — матрица смежности графа, показанного слева, с исходящими ребрами (4,1) и (4,3), показанными зеленым цветом.

Математические основы GraphBLAS основаны на линейной алгебре и двойственности между матрицами и графами . [26] [27]

Каждая операция графа в GraphBLAS работает с полукольцом , которое состоит из следующих элементов:

Обратите внимание, что нулевой элемент (то есть элемент, который представляет отсутствие ребра в графе) также может быть интерпретирован по-новому. [26] : «VII. 0-элемент: нет края графика» Например, в GraphBLAS можно реализовать следующие алгебры:

Алгебра Домен Нулевой элемент
Стандартная арифметика 0
Макс – плюс алгебра
Мин-плюс алгебра
Макс–мин алгебра 0
Мин-макс алгебра 0
Поле Галуа БЕСПЛАТНО И 0

Все приведенные выше примеры удовлетворяют следующим двум условиям в своих соответствующих областях:

Например, пользователь может указать алгебру мин-плюс в области чисел с плавающей запятой двойной точности с помощью GrB_Semiring_new(&min_plus_semiring, GrB_MIN_FP64, GrB_PLUS_FP64).

Функциональность

[ редактировать ]

Хотя спецификация GraphBLAS в целом допускает значительную гибкость в реализации, некоторые функциональные возможности и детали реализации описаны явно:

  • Объекты GraphBLAS, включая матрицы и векторы, представляют собой непрозрачные структуры данных. [16] : 2.4 Непрозрачные объекты GraphBLAS
  • Неблокирующий режим выполнения, который допускает ленивую или асинхронную оценку определенных операций. [16] : 2.5.1 Режимы выполнения
  • Маскированное присвоение, обозначаемое , который присваивает элементы матрицы матрица только в позициях, где матрица маски не равно нулю. [16] : 3.5.4 Маски

Спецификация GraphBLAS также предписывает, чтобы реализации библиотеки были потокобезопасными . [16] : 2.5.2 Многопоточное выполнение

Пример кода

[ редактировать ]

Ниже приведен совместимый с GraphBLAS 2.1 пример поиска в ширину на языке программирования C. [16] : 294 

#include <stdlib.h>#include <stdio.h>#include <stdint.h>#include <stdbool.h>#include "GraphBLAS.h"/* * Given a boolean n x n adjacency matrix A and a source vertex s, performs a BFS traversal * of the graph and sets v[i] to the level in which vertex i is visited (v[s] == 1). * If i is not reachable from s, then v[i] = 0 does not have a stored element. * Vector v should be uninitialized on input. */GrB_Info BFS(GrB_Vector *v, GrB_Matrix A, GrB_Index s){  GrB_Index n;  GrB_Matrix_nrows(&n,A);                  // n = # of rows of A  GrB_Vector_new(v,GrB_INT32,n);           // Vector<int32_t> v(n)  GrB_Vector q;                            // vertices visited in each level  GrB_Vector_new(&q, GrB_BOOL, n);         // Vector<bool> q(n)  GrB_Vector_setElement(q, (bool)true, s); // q[s] = true, false everywhere else  /*   * BFS traversal and label the vertices.   */  int32_t level = 0;                                       // level = depth in BFS traversal  GrB_Index nvals;  do {    ++level;                                               // next level (start with 1)    GrB_apply(*v, GrB_NULL, GrB_PLUS_INT32,              GrB_SECOND_INT32, q, level, GrB_NULL);       // v[q] = level    GrB_vxm(q, *v, GrB_NULL, GrB_LOR_LAND_SEMIRING_BOOL,            q, A, GrB_DESC_RC);                            // q[!v] = q ||.&& A; finds all the                                                            // unvisited successors from current q    GrB_Vector_nvals(&nvals, q);  } while (nvals);                                         // if there is no successor in q, we are done.  GrB_free(&q);                                            // q vector no longer needed  return GrB_SUCCESS;}

См. также

[ редактировать ]
  1. ^ «ГрафБЛАС» . www.graphblas.org . Проверено 4 декабря 2021 г.
  2. ^ «GraphBLAS: спецификация программирования для анализа графов» . www.sei.cmu.edu . Проверено 08.11.2019 .
  3. ^ Перейра, Джулиана. «Высокопроизводительные графовые алгоритмы с использованием линейной алгебры» . Центрально-Европейский университет, факультет сетевых наук и наук о данных . Проверено 13 февраля 2020 г. .
  4. ^ «Люди ACM — Тим Дэвис» . acm.org . Ассоциация вычислительной техники . Проверено 8 ноября 2019 г.
  5. ^ Мэттсон, Тим; Габб, Генри. «Графическая аналитика: фундаментальный строительный блок для мира аналитики данных» . Тех.Раскодировано . Интел . Проверено 14 февраля 2020 г.
  6. ^ Jump up to: а б Кепнер, Джереми; Гилберт, Джон (2011). Графовые алгоритмы на языке линейной алгебры . Филадельфия, Пенсильвания, США: Общество промышленной и прикладной математики. ISBN  9780898719901 . Проверено 8 ноября 2019 г.
  7. ^ Ву, Линда. «GraphBLAS: строительные блоки для высокопроизводительной графовой аналитики» . crd.lbl.gov . Проверено 8 ноября 2019 г. В последующие годы в результате различных исследовательских коллабораций было создано множество BLAS-библиотек для разных задач. Осознавая преимущества для пользователей, поставщики также работали с исследователями над оптимизацией этих строительных блоков для работы на их оборудовании. GraphBLAS, по сути, является продолжением наследия BLAS.
  8. ^ Кепнер, Джереми; Кумар, Манодж; Морейра, Хосе; Паттнаик, Пратап; Серрано, Маурисио; Туфо, Генри (12–14 сентября 2017 г.). «Включение массивных глубоких нейронных сетей с помощью GraphBLAS». Конференция IEEE по высокопроизводительным экстремальным вычислениям (HPEC) 2017 . стр. 1–10. arXiv : 1708.02937 . Бибкод : 2017arXiv170802937K . дои : 10.1109/HPEC.2017.8091098 . ISBN  978-1-5386-3472-1 . S2CID   3632940 . В этой статье мы показали, что ключевые вычисления [глубокой нейронной сети] могут быть представлены в GraphBLAS, интерфейсе библиотеки, определенном для алгебры разреженных матриц. Кроме того, мы показали, что ключевой этап прямого распространения с ReLU в качестве нелинейности может быть выполнен гораздо эффективнее с помощью реализации GraphBLAS по сравнению с реализацией BLAS, когда весовые матрицы разрежены.
  9. ^ Ву, Линда (12 марта 2018 г.). «Изменитель правил игры: метагеномная кластеризация на базе суперкомпьютеров» . Информационный центр Национальной лаборатории Лоуренса Беркли . Проверено 10 ноября 2019 г. .
  10. ^ «РедисГраф» . Редис Лабс . Проверено 11 ноября 2019 г.
  11. ^ Анадиотис, Джордж (24 октября 2019 г.). «Redis Labs переходит в Google Cloud, Graph и другие интересные места» . ЗДНет . Проверено 8 ноября 2019 г.
  12. ^ «Redis Labs представляет RedisGraph и Streams для поддержки будущего с нулевой задержкой» . DevOps.com . 16 ноября 2018 года . Проверено 10 ноября 2019 г. . По результатам тестов RedisGraph, созданный на основе GraphBLAS, библиотеки с открытым исходным кодом, использующей линейную алгебру, включая умножение матриц, может выполнять вычисления до 600 раз быстрее, чем любое альтернативное графическое решение.
  13. ^ Вуди, Алекс (28 сентября 2018 г.). «Redis ускоряется к мультимодельному будущему» . Датанами . Проверено 10 ноября 2019 г. . Один из новейших модулей Redis Labs превращает хранилище значений ключей в графовую базу данных. Модуль под названием RedisGraph будет основан на технологии GraphBLAS, появившейся в научных кругах и промышленности.
  14. ^ Дсуза, Мелиша (20 ноября 2018 г.). «Выпущен RedisGraph v1.0, результаты бенчмаркинга показывают, что он в 6–600 раз быстрее существующих графовых баз данных» . Пакет . Проверено 10 ноября 2019 г. . RedisGraph — это модуль Redis, который добавляет в Redis функциональность графовой базы данных. RedisGraph предоставляет быстрый и эффективный способ хранения, управления и обработки графиков примерно в 6–600 раз быстрее, чем существующие базы данных графов. RedisGraph представляет связанные данные в виде матриц смежности и использует возможности GraphBLAS, высокооптимизированной библиотеки для операций с разреженными матрицами.
  15. ^ Мэттсон, Тим; Бадер, Дэвид; Берри, Джон; Булуч, Айдын; Донгарра, Джек; Фалуцсос, Христос; Фео, Джон; Гилберт, Джон; Гонсалес, Джозеф; Хендриксон, Брюс; Кепнер, Джереми; Лейзерсон, Чарльз; Ламсдейн, Эндрю; Падуя, Дэвид; Пул, Стивен; Рейнхардт, Стив; Стоунбрейкер, Майк; Уоллах, Стив; Ю, Эндрю (10–12 сентября 2013 г.). «Стандарты для примитивов графовых алгоритмов». Конференция IEEE по высокопроизводительным экстремальным вычислениям (HPEC) 2013 г. стр. 1–2. arXiv : 1408.0393 . дои : 10.1109/HPEC.2013.6670338 . ISBN  978-1-4799-1365-7 . S2CID   12099965 . По нашему мнению, современный уровень развития большого набора графовых алгоритмов с использованием линейных алгебраических операций достаточно развит, чтобы поддержать появление стандартного набора примитивных строительных блоков. Этот документ представляет собой позиционный документ, определяющий проблему и объявляющий о нашем намерении начать открытые усилия по определению этого стандарта. {{cite book}}: |journal= игнорируется ( помогите )
  16. ^ Jump up to: а б с д и ж Брок, Бенджамин; Булуч, Айдын; Киммерер, Рэй; Кухня, Джим; Кумар, Манодж; Мэттсон, Тимоти; Макмиллан, Скотт; Морейра, Джозеф; Пеллетье, Мишель; Уэлч, Эрик. «Спецификация GraphBLAS C API: версия 2.1.0» (PDF) . Получено 22 декабря.
  17. ^ «Библиотека шаблонов GraphBLAS (GBTL)» . GitHub.com . Проверено 8 ноября 2019 г.
  18. ^ «Graphulo: обработка графов на Accumulo» . Graphulo.mit.edu . Проверено 8 ноября 2019 г.
  19. ^ «ГрафБЛАСТ» . GitHub.com . Проверено 8 ноября 2019 г.
  20. ^ Дэвис, Тимоти. «SuiteSparse:GraphBLAS» . Проверено 11 ноября 2019 г. SuiteSparse:GraphBLAS — это полная реализация стандарта GraphBLAS (graphblas.org), который определяет набор разреженных матричных операций над расширенной алгеброй полуколец с использованием практически неограниченного разнообразия операторов и типов.
  21. ^ Морейра, Хосе; Хорн, Билл. «ибмграфблас» . GitHub.com . Проверено 19 ноября 2019 г.
  22. ^ Пеллетье, Мишель. «GraphBLAS для Python» . GitHub.com . Проверено 11 ноября 2019 г.
  23. ^ Дэвис, Тимоти. «SuiteSparse:GraphBLAS» . Проверено 11 ноября 2019 г. Теперь с параллелизмом OpenMP и интерфейсом MATLAB.
  24. ^ Мендиратта, Абхинав. «Реализация GraphBLAS» . Google Summer of Code Archive . Проверено 11 ноября 2019 г.
  25. ^ Мендиратта, Абхинав (7 июня 2019 г.). «Введение в GraphBLAS» . Блог GSoC'19 . Проверено 11 ноября 2019 г.
  26. ^ Jump up to: а б Кепнер, Джереми; Аалтонен, Питер; Бадер, Дэвид; Булуч, Айдын; Франкетти, Франц; Гилберт, Джон; Хатчисон, Дилан; Кумар, Манодж; Ламсдейн, Эндрю; Мейерхенке, Хеннинг; Макмиллан, Скотт; Морейра, Хосе; Оуэнс, Джон Д.; Ян, Карл; Залевский, Марцин; Мэттсон, Тимоти (13–15 сентября 2016 г.). «Математические основы GraphBLAS». Конференция IEEE по высокопроизводительным экстремальным вычислениям (HPEC) 2016 . стр. 1–9. arXiv : 1606.05790 . Бибкод : 2016arXiv160605790K . дои : 10.1109/HPEC.2016.7761646 . ISBN  978-1-5090-3525-0 . S2CID   3654505 .
  27. ^ Дополнительную математическую информацию см. Кепнер, Джереми; Джанантан, Хайден (17 июля 2018 г.). Математика больших данных: электронные таблицы, базы данных, матрицы и графики . Массачусетский технологический институт Пресс. стр. 81–168. ISBN  978-0262038393 . Проверено 10 ноября 2019 г. .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8c9214fa766c3038db9dd23332de5296__1703300760
URL1:https://arc.ask3.ru/arc/aa/8c/96/8c9214fa766c3038db9dd23332de5296.html
Заголовок, (Title) документа по адресу, URL1:
GraphBLAS - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)