spGEMM (Sparse GEneral Matrix-Matrix multiplication) — операция умножения над разреженными матрицами.
Для хранения разреженных матриц используются три основных формата:
— список координат (COO);
— сжатое хранение строкой (CSR);
— сжатое хранение столбцом (CSC).
Каждый из них имеет своим преимущества и недостатки, поэтому есть различные варианты spGEMM, использующие тот или иной формат. Например, они реализованы в библиотеках cuSPARSE, MKL и Kokkos. Во фреймворке PyTorch операции над разреженными матрицами находятся в стадии разработки.
В новой архитектуре Ampere появилась аппаратная поддержка операций с разреженными матрицами, имеющими специальную структуру (semi-structured sparse matrix). Для Ampere Nvidia разработала оптимизированный подход к использованию spGEMM и добавила поддержку редуцирования нейросетей в библиотеку APEX (A PyTorch Extension).
Новый подход Nvidia позволяет получать разреженные нейросети без существенной потери в качественных метриках. Он уменьшает объём обрабатываемых данных и способствует более эффективному балансу нагрузки в параллельных вычислениях.