ГрафБЛАС
Статус | Выпущенный |
---|---|
Впервые опубликовано | 29 мая 2017 г. |
Последняя версия | 2.1.0 22 декабря 2023 г. |
Домен | Графовые алгоритмы |
Лицензия | С указанием авторства Creative Commons (CC BY) 4.0 |
Веб-сайт | графблас |
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] языки программирования.
Линейные алгебраические основы
[ редактировать ]Математические основы 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;}
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «ГрафБЛАС» . www.graphblas.org . Проверено 4 декабря 2021 г.
- ^ «GraphBLAS: спецификация программирования для анализа графов» . www.sei.cmu.edu . Проверено 08.11.2019 .
- ^ Перейра, Джулиана. «Высокопроизводительные графовые алгоритмы с использованием линейной алгебры» . Центрально-Европейский университет, факультет сетевых наук и наук о данных . Проверено 13 февраля 2020 г. .
- ^ «Люди ACM — Тим Дэвис» . acm.org . Ассоциация вычислительной техники . Проверено 8 ноября 2019 г.
- ^ Мэттсон, Тим; Габб, Генри. «Графическая аналитика: фундаментальный строительный блок для мира аналитики данных» . Тех.Раскодировано . Интел . Проверено 14 февраля 2020 г.
- ^ Jump up to: а б Кепнер, Джереми; Гилберт, Джон (2011). Графовые алгоритмы на языке линейной алгебры . Филадельфия, Пенсильвания, США: Общество промышленной и прикладной математики. ISBN 9780898719901 . Проверено 8 ноября 2019 г.
- ^ Ву, Линда. «GraphBLAS: строительные блоки для высокопроизводительной графовой аналитики» . crd.lbl.gov . Проверено 8 ноября 2019 г.
В последующие годы в результате различных исследовательских коллабораций было создано множество BLAS-библиотек для разных задач. Осознавая преимущества для пользователей, поставщики также работали с исследователями над оптимизацией этих строительных блоков для работы на их оборудовании. GraphBLAS, по сути, является продолжением наследия BLAS.
- ^ Кепнер, Джереми; Кумар, Манодж; Морейра, Хосе; Паттнаик, Пратап; Серрано, Маурисио; Туфо, Генри (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, когда весовые матрицы разрежены.
- ^ Ву, Линда (12 марта 2018 г.). «Изменитель правил игры: метагеномная кластеризация на базе суперкомпьютеров» . Информационный центр Национальной лаборатории Лоуренса Беркли . Проверено 10 ноября 2019 г. .
- ^ «РедисГраф» . Редис Лабс . Проверено 11 ноября 2019 г.
- ^ Анадиотис, Джордж (24 октября 2019 г.). «Redis Labs переходит в Google Cloud, Graph и другие интересные места» . ЗДНет . Проверено 8 ноября 2019 г.
- ^ «Redis Labs представляет RedisGraph и Streams для поддержки будущего с нулевой задержкой» . DevOps.com . 16 ноября 2018 года . Проверено 10 ноября 2019 г. .
По результатам тестов RedisGraph, созданный на основе GraphBLAS, библиотеки с открытым исходным кодом, использующей линейную алгебру, включая умножение матриц, может выполнять вычисления до 600 раз быстрее, чем любое альтернативное графическое решение.
- ^ Вуди, Алекс (28 сентября 2018 г.). «Redis ускоряется к мультимодельному будущему» . Датанами . Проверено 10 ноября 2019 г. .
Один из новейших модулей Redis Labs превращает хранилище значений ключей в графовую базу данных. Модуль под названием RedisGraph будет основан на технологии GraphBLAS, появившейся в научных кругах и промышленности.
- ^ Дсуза, Мелиша (20 ноября 2018 г.). «Выпущен RedisGraph v1.0, результаты бенчмаркинга показывают, что он в 6–600 раз быстрее существующих графовых баз данных» . Пакет . Проверено 10 ноября 2019 г. .
RedisGraph — это модуль Redis, который добавляет в Redis функциональность графовой базы данных. RedisGraph предоставляет быстрый и эффективный способ хранения, управления и обработки графиков примерно в 6–600 раз быстрее, чем существующие базы данных графов. RedisGraph представляет связанные данные в виде матриц смежности и использует возможности GraphBLAS, высокооптимизированной библиотеки для операций с разреженными матрицами.
- ^ Мэттсон, Тим; Бадер, Дэвид; Берри, Джон; Булуч, Айдын; Донгарра, Джек; Фалуцсос, Христос; Фео, Джон; Гилберт, Джон; Гонсалес, Джозеф; Хендриксон, Брюс; Кепнер, Джереми; Лейзерсон, Чарльз; Ламсдейн, Эндрю; Падуя, Дэвид; Пул, Стивен; Рейнхардт, Стив; Стоунбрейкер, Майк; Уоллах, Стив; Ю, Эндрю (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=
игнорируется ( помогите ) - ^ Jump up to: а б с д и ж Брок, Бенджамин; Булуч, Айдын; Киммерер, Рэй; Кухня, Джим; Кумар, Манодж; Мэттсон, Тимоти; Макмиллан, Скотт; Морейра, Джозеф; Пеллетье, Мишель; Уэлч, Эрик. «Спецификация GraphBLAS C API: версия 2.1.0» (PDF) . Получено 22 декабря.
- ^ «Библиотека шаблонов GraphBLAS (GBTL)» . GitHub.com . Проверено 8 ноября 2019 г.
- ^ «Graphulo: обработка графов на Accumulo» . Graphulo.mit.edu . Проверено 8 ноября 2019 г.
- ^ «ГрафБЛАСТ» . GitHub.com . Проверено 8 ноября 2019 г.
- ^ Дэвис, Тимоти. «SuiteSparse:GraphBLAS» . Проверено 11 ноября 2019 г.
SuiteSparse:GraphBLAS — это полная реализация стандарта GraphBLAS (graphblas.org), который определяет набор разреженных матричных операций над расширенной алгеброй полуколец с использованием практически неограниченного разнообразия операторов и типов.
- ^ Морейра, Хосе; Хорн, Билл. «ибмграфблас» . GitHub.com . Проверено 19 ноября 2019 г.
- ^ Пеллетье, Мишель. «GraphBLAS для Python» . GitHub.com . Проверено 11 ноября 2019 г.
- ^ Дэвис, Тимоти. «SuiteSparse:GraphBLAS» . Проверено 11 ноября 2019 г.
Теперь с параллелизмом OpenMP и интерфейсом MATLAB.
- ^ Мендиратта, Абхинав. «Реализация GraphBLAS» . Google Summer of Code Archive . Проверено 11 ноября 2019 г.
- ^ Мендиратта, Абхинав (7 июня 2019 г.). «Введение в GraphBLAS» . Блог GSoC'19 . Проверено 11 ноября 2019 г.
- ^ 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 .
- ^ Дополнительную математическую информацию см. Кепнер, Джереми; Джанантан, Хайден (17 июля 2018 г.). Математика больших данных: электронные таблицы, базы данных, матрицы и графики . Массачусетский технологический институт Пресс. стр. 81–168. ISBN 978-0262038393 . Проверено 10 ноября 2019 г. .