getkeops/keops

KErnel OPerationS, on CPUs and GPUs, with autodiff and without memory overflows

解决的问题

KeOps 解决了在 GPU 上进行大规模数学计算时的内存瓶颈问题。标准的稠密矩阵通常会超出 GPU 内存(RAM),而稀疏矩阵由于随机内存访问,在 GPU 上往往效率低下。KeOps 允许在无需将完整矩阵存储在内存中的情况下计算大规模数组的归约操作——例如核矩阵-向量乘积、K-近邻和 N 体相互作用,从而防止内存溢出。

工作原理

KeOps 引入了“符号矩阵”(或 LazyTensors)的概念。它不存储完整的数值矩阵,而是基于两个较小的数据数组,将矩阵表示为数学公式 $F(x_i, y_j)$。它利用高效的 C++ 例程和 CUDA 寄存器,绕过昂贵的内存传输,在归约操作(如 .sum().logsumexp().argmin())期间实时计算值。这将内存占用从二次方降低到线性,相比标准 PyTorch GPU 基线实现 10 倍至 100 倍的加速。

适用人群

从事几何深度学习、形状分析、高斯过程、计算生物学和物理学的研究人员和开发者,以及任何需要在 GPU 上执行大规模核操作并支持自动微分的人。

主要亮点

  • 线性内存占用: 避免大规模计算中的二次内存增长。
  • 自动微分: 完全支持任意阶数的梯度和导数。
  • 多语言支持: 可与 Python(PyTorch、NumPy)、Matlab 和 R 集成。
  • 广泛归约支持: 支持 Sum、LogSumExp、Min、Max、ArgMin、ArgMax 和 K-min 归约。
  • 硬件优化: 特别针对 CUDA 寄存器优化,以最大化 GPU 吞吐量。

相关

  • 项目
  • 项目
  • 项目
  • Dispatch
  • 项目