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
  • 專案