실내 메모리 절감 인플레이 실수 FFT 구현
초록
본 논문은 실수 입력에 대해 입력과 출력이 동일한 메모리 버퍼를 공유하도록 설계된 완전 인플레이 FFT 연산자(rdFFT)를 제안한다. 복소수 대칭성과 버터플라이 연산의 특성을 이용해 N개의 실수 입력을 N개의 실수 슬롯에 그대로 저장하면서도 rFFT와 동일한 스펙트럼을 얻는다. 이를 통해 자연어 이해 모델의 학습 단계에서 중간 텐서 할당을 0으로 줄일 수 있다.
상세 분석
rdFFT는 기존 rFFT가 갖는 “입력(N) → 출력(N+2) 실수 슬롯” 불일치를 근본적으로 해소한다. 핵심 아이디어는 Cooley‑Tukey 알고리즘의 모든 재귀 단계에서 실수 입력이 유지된다는 점을 이용해, 각 서브‑FFT가 생성하는 복소수 계수를 ‘실수‑실수’ 형태로 압축 저장하는 것이다. 구체적으로, y₀와 y_{N/2}는 실수이므로 단일 슬롯에 그대로 두고, 나머지 복소수 계수 y_k (1 ≤ k < N/2)는 실수부를 인덱스 k에, 허수부를 대칭 인덱스 N‑k에 배치한다. 이렇게 하면 N개의 실수 배열만으로 전체 스펙트럼을 표현할 수 있다.
버터플라이 연산 자체는 입력과 출력을 같은 메모리 위치에 덮어쓰는 인플레이 특성을 가지고 있다. rdFFT는 이 특성을 그대로 활용하면서도, 복소수 연산을 실수 연산으로 변환한다. 즉, twiddle factor와 곱셈을 수행할 때도 실수‑실수 곱셈과 덧셈만으로 결과를 계산하도록 알고리즘을 재구성한다. 이 과정에서 ‘대칭 4‑원소 그룹’(두 개의 복소수와 그 켤레 쌍)이 항상 동시에 업데이트되므로, 메모리 충돌이나 데이터 손실이 발생하지 않는다.
또한, 논문은 float16 지원을 명시적으로 구현하였다. 기존 cuFFT·FFTW은 float16을 직접 다루지 못해 메모리 절감 효과가 제한적이었지만, rdFFT는 실수 기반 인플레이 구조 덕분에 half‑precision 연산을 그대로 적용할 수 있다. 이는 최신 대형 언어 모델에서 메모리 대역폭과 저장 용량을 크게 낮추는 효과를 만든다.
수식적으로는 입력 x∈ℝᴺ에 대해 FFT(x) → y, 그리고 IFFT(y) → x 를 동일한 버퍼 B∈ℝᴺ에서 수행한다. 역변환 시에는 각 인덱스의 켤레 관계를 이용해 복원하고, 최종 정규화 1/N을 실수 연산으로 적용한다. 미분 단계에서도 동일한 인플레이 메커니즘이 유지되어, 자동 미분 프레임워크가 중간 텐서를 별도로 저장할 필요가 없으며, 역전파 시에도 메모리 사용량이 증가하지 않는다.
실험에서는 BERT‑Base, RoBERTa‑Large 등 여러 자연어 이해 모델에 rdFFT 기반 순환 적응층(Circulant Adapter)을 삽입하였다. 결과는 동일한 정확도(또는 미세한 성능 저하) 하에 GPU 메모리 사용량을 평균 12~18% 감소시켰으며, 특히 float16 환경에서 메모리 절감 비율이 더욱 높았다. 이는 중간 텐서가 전혀 할당되지 않음으로써 배치 크기를 늘리거나 더 큰 모델을 동일 하드웨어에서 학습할 수 있게 만든다.
한계점으로는 현재 구현이 1‑차원 FFT에 국한되어 있어 이미지 처리와 같은 2‑D FFT 적용에는 추가 설계가 필요하고, 복소수‑실수 변환 로직이 복잡해 커스텀 연산자를 직접 구현해야 하는 진입 장벽이 존재한다는 점이다. 또한, 매우 큰 N(예: 2⁰)에서는 인덱스 매핑 비용이 미세하게 증가할 수 있다. 그럼에도 불구하고, 메모리 효율성을 극대화하려는 대규모 모델 학습 환경에서 rdFFT는 실질적인 가치를 제공한다.
댓글 및 학술 토론
Loading comments...
의견 남기기