getkeops/keops

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

何を解決するか

KeOpsはGPU上の大規模な数学的計算におけるメモリボトルネックを解決します。標準的な密行列はGPUのメモリ(RAM)を超えることが多く、疎行列はGPUではランダムメモリアクセスのため効率が悪いことがよくあります。KeOpsは、フル行列をメモリに保持する必要なく、大規模な配列の還元(たとえば、カーネル行列-ベクトル積、K近傍、N体相互作用など)を計算可能にし、メモリオーバーフローを防ぎます。

動作方法

KeOpsは「記号行列」(またはLazyTensors)の概念を導入します。完全な値の行列を保持するのではなく、2つの小さなデータ配列に基づいた数学的式 $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
  • プロジェクト