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()과 같은 축소 연산 중에 값들을 실시간으로 계산합니다. 이로 인해 메모리 사용량이 2차에서 선형으로 전환되며, 표준 PyTorch GPU 기준 대비 10배~100배의 속도 향상을 제공합니다.
대상 사용자
기하학적 딥러닝, 형태 분석, 가우시안 프로세스, 계산 생물학, 물리학 분야에서 일하는 연구자 및 개발자, 그리고 자동 미분 지원이 필요한 GPU에서 대규모 커널 연산을 수행해야 하는 모든 사람.
주요 특징
- 선형 메모리 사용량: 대규모 계산에서 2차 메모리 증가를 방지.
- 자동 미분: 임의의 차수의 기울기와 도함수를 완전히 지원.
- 다국어 지원: Python(PyTorch, NumPy), Matlab, R과 통합 가능.
- 광범위한 축소 지원: Sum, LogSumExp, Min, Max, ArgMin, ArgMax, K-min 축소를 포함.
- 하드웨어 최적화: CUDA 레지스터에 특화되어 GPU 처리량을 극대화.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- Dispatch
- 프로젝트