논문 · arXiv 2205.14135
FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness
세 줄 요약
- 🎯 표준 정확한 어텐션은 느린 GPU HBM에 크기의 어텐션 행렬을 구체화(materialize)하므로 메모리 바운드가 발생하고 긴 컨텍스트로 확장하기 어렵습니다.
- 🔧 FlashAttention은 빠른 온칩 SRAM에 입력을 타일링하고, 소프트맥스를 점진적으로 업데이트하며, 역전파 중에 어텐션을 온칩에서 재연산함으로써 단일 융합(fused) CUDA 커널 내에서 정확한 어텐션을 계산합니다.
- 📈 FlashAttention은 GPT-2에서 최대 3배의 엔드투엔드 학습 속도 향상을 제공하고, MLPerf 1.1 BERT-large 기록보다 15% 빠른 학습을 달성하며, 컨텍스트를 64K 토큰까지 확장합니다.
초록
트랜스포머는 셀프 어텐션의 시간 및 메모리 복잡도가 시퀀스 길이에 대해 2차(quadratic)로 증가하기 때문에 긴 시퀀스에서 느리고 많은 메모리를 소모합니다. 근사 어텐션 방법들은 연산 복잡도를 줄이기 위해 모델 품질을 희생하며 이 문제를 해결하려 했으나, 실제 소요 시간(wall-clock) 단축에는 실패하는 경우가 많았습니다. 우리는 놓치고 있던 원칙이 어텐션 알고리즘을 IO-aware하게 만드는 것, 즉 GPU 메모리 계층 간의 읽기 및 쓰기를 고려하는 것이라고 주장합니다. 우리는 GPU 고대역폭 메모리(HBM)와 GPU 온칩 SRAM 사이의 메모리 읽기/쓰기 횟수를 줄이기 위해 타일링(tiling)을 사용하는 IO-aware 정확한 어텐션(exact attention) 알고리즘인 FlashAttention을 제안합니다. FlashAttention의 IO 복잡도를 분석하여 표준 어텐션보다 적은 HBM 접근을 필요로 하며 다양한 SRAM 크기 범위에서 최적임을 보입니다. 또한 FlashAttention을 블록 희소 어텐션(block-sparse attention)으로 확장하여 기존의 모든 근사 어텐션 기법보다 빠른 근사 어텐션 알고리즘을 도출합니다. FlashAttention은 기존 베이스라인보다 빠르게 트랜스포머를 학습시킵니다. MLPerf 1.1 학습 속도 기록 대비 BERT-large(시퀀스 길이 512)에서 15%의 엔드투엔드 wall-clock 속도 향상, GPT-2(시퀀스 길이 1K)에서 3배 속도 향상, Long-Range Arena(시퀀스 길이 1K-4K)에서 2.4배 속도 향상을 달성했습니다. FlashAttention 및 block-sparse FlashAttention은 트랜스포머에서 더 긴 컨텍스트를 지원하여 더 높은 품질의 모델(GPT-2에서 0.7 더 우수한 perplexity 및 장문 문서 분류에서 6.4점 향상)을 가능하게 하며, 완전히 새로운 역량을 제공합니다. 즉, Path-X 챌린지(시퀀스 길이 16K, 61.4% 정확도) 및 Path-256(시퀀스 길이 64K, 63.1% 정확도)에서 무작위 확률 이상의 성능을 달성한 최초의 트랜스포머가 되었습니다.
영어 원문 초록
Transformers are slow and memory-hungry on long sequences, since the time and memory complexity of self-attention are quadratic in sequence length. Approximate attention methods have attempted to address this problem by trading off model quality to reduce the compute complexity, but often do not achieve wall-clock speedup. We argue that a missing principle is making attention algorithms IO-aware -- accounting for reads and writes between levels of GPU memory. We propose FlashAttention, an IO-aware exact attention algorithm that uses tiling to reduce the number of memory reads/writes between GPU high bandwidth memory (HBM) and GPU on-chip SRAM. We analyze the IO complexity of FlashAttention, showing that it requires fewer HBM accesses than standard attention, and is optimal for a range of SRAM sizes. We also extend FlashAttention to block-sparse attention, yielding an approximate attention algorithm that is faster than any existing approximate attention method. FlashAttention trains Transformers faster than existing baselines: 15% end-to-end wall-clock speedup on BERT-large (seq. length 512) compared to the MLPerf 1.1 training speed record, 3 speedup on GPT-2 (seq. length 1K), and 2.4 speedup on long-range arena (seq. length 1K-4K). FlashAttention and block-sparse FlashAttention enable longer context in Transformers, yielding higher quality models (0.7 better perplexity on GPT-2 and 6.4 points of lift on long-document classification) and entirely new capabilities: the first Transformers to achieve better-than-chance performance on the Path-X challenge (seq. length 16K, 61.4% accuracy) and Path-256 (seq. length 64K, 63.1% accuracy).
논문 해설
문제 및 동기
트랜스포머는 시퀀스 길이 에 대해 2차(quadratic) 시간 및 메모리 복잡도를 가집니다. 근사 어텐션 방법들은 이론적인 FLOP 수를 줄이지만, 최신 GPU 연산이 산술 연산보다는 주로 메모리 전송(IO)에 의해 병목이 발생하기 때문에 실제 소요 시간(wall-clock) 단축을 달성하지 못하는 경우가 많습니다.
표준 어텐션에서는 , , 를 계산할 때 크기 의 중간 행렬을 느린 고대역폭 메모리(HBM)에 쓰고 이를 여러 번 다시 읽어옵니다. 이는 의 HBM 접근과 의 메모리 사용량을 발생시켜 실질적인 컨텍스트 윈도우를 제한합니다.
핵심 아이디어
- IO-Awareness: GPU 메모리 계층 구조를 명시적으로 고려합니다: 빠르고 작은 온칩 SRAM(예: A100에서 SM당 192KB, 대역폭 약 19TB/s) 대 크고 느린 HBM(대역폭 1.5–2.0TB/s의 40–80GB).
- 타일링(블록 소프트맥스 계산): 입력 를 SRAM 내에 완전히 들어가는 블록으로 나눕니다. 연속적인(running) 소프트맥스 행 최댓값과 정규화 통계량을 추적함으로써 HBM에 전체 행렬을 구체화하지 않고도 블록 전반에 걸쳐 소프트맥스 축약(reduction)을 점진적으로 계산합니다.
- 역전파에서의 재연산(Recomputation): 역전파를 위해 중간 어텐션 행렬을 저장하지 않습니다. 대신 출력 와 소프트맥스 통계량 만 저장하고, 역전파 과정에서 SRAM 내에서 블록 단위로 와 를 온칩 재연산합니다.
- 커널 융합(Kernel Fusion): 행렬 곱셈, 마스킹, 소프트맥스, 드롭아웃을 단일 CUDA 커널로 융합하여 불필요한 HBM 왕복을 제거합니다.
방법 (핵심 수식 포함)
가 주어졌을 때, FlashAttention은 블록 크기를 및 로 설정합니다. 여기서 은 SRAM 용량입니다.
점진적 소프트맥스 추적
하위 벡터 과 로 분해된 벡터에 대해, running 통계량은 다음과 같이 업데이트됩니다:
키/값의 블록 와 쿼리의 블록 에 대해:
- SRAM 상에서 정규화되지 않은 점수를 계산: .
- 블록의 로컬 통계량 계산: , , 그리고 .
- 누적 전역 정규화 값 업데이트:
- 누적 출력 블록 업데이트:
복잡도 분석
- IO 복잡도: 표준 어텐션은 의 HBM 접근을 필요로 합니다. FlashAttention은 의 HBM 접근을 필요로 합니다. 저자들은 모든 에 걸쳐 접근을 점근적으로 달성할 수 있는 정확한 어텐션 알고리즘이 없음을 증명합니다.
- FLOPs 및 메모리: FlashAttention은 FLOPs를 수행하며(재연산으로 인해 역전파에서 FLOP 수가 약간 증가함), 입력 및 출력 외에 의 보조 메모리만 필요로 합니다.
확장: Block-Sparse FlashAttention
사전 정의된 희소성 마스크 에 따라 0이 아닌 블록으로 평가를 제한하면 의 IO 복잡도를 달성합니다. 여기서 는 0이 아닌 블록의 비율입니다.
결과 (가장 중요한 수치 포함)
- 학습 속도 향상:
- BERT-large (시퀀스 길이 512): MLPerf 1.1 학습 속도 기록을 15% 능가( A100에서 20.0분 대비 17.4분).
- GPT-2 (시퀀스 길이 1K): HuggingFace 대비 최대 3.5배, Megatron-LM 대비 최대 1.8배 속도 향상 달성.
- Long-Range Arena (LRA): 표준 어텐션 대비 2.4배 속도 향상, Block-sparse FlashAttention은 2.8배 속도 향상 달성.
- 더 긴 컨텍스트 지원 역량:
- 4K 컨텍스트의 GPT-2: 1K 컨텍스트의 Megatron-LM보다 빠르게 학습하면서 검증 perplexity를 0.7 포인트 개선(18.2 대비 17.5).
- 장문 문서 분류: 컨텍스트를 512에서 16K로 확장하면 MIMIC-III에서 micro- 4.3 증가(52.8에서 57.1), ECtHR에서 최대 8.5 증가(8K에서 72.2에서 80.7)를 달성.
- Path-X 및 Path-256: FlashAttention은 61.4%의 정확도로 Path-X(시퀀스 길이 16K)를 해결한 최초의 트랜스포머입니다. Block-sparse FlashAttention은 Path-256(시퀀스 길이 64K)에서 63.1%의 정확도를 달성합니다.
한계점 및 열린 질문
- CUDA 엔지니어링 오버헤드: IO-aware 커널을 구현하려면 표준 PyTorch나 컴파일러 추상화가 아닌 커스텀 로우레벨 CUDA 프로그래밍이 필요하므로, 다양한 하드웨어 아키텍처 간의 이식성이 떨어집니다.
- 다중 GPU 어텐션: 최적화된 단일 노드 IO 스케줄이 상호 연결(NVLink, InfiniBand)을 통한 분산 다중 GPU 어텐션으로 자동으로 확장되지는 않습니다.
- 정확한 어텐션의 하한선: 일반적인 에 걸쳐 최적이지만, 에 관한 정밀한 매개변수화된 복잡도 하한선을 증명하는 것은 여전히 미해결 과제로 남아 있습니다.
핵심 용어
- IO-awareness
- 하드웨어 메모리 계층(예: 빠른 온칩 SRAM 대 더 느린 HBM) 간의 읽기 및 쓰기를 고려하여 연산을 설계하는 알고리즘 원칙.
- High Bandwidth Memory (HBM)
- 높은 총 용량을 제공하지만 온칩 캐시보다는 대역폭이 훨씬 낮은 대용량 GPU 기본 메모리.
- SRAM
- 각 Streaming Multiprocessor(SM) 내에 위치한 최신 GPU의 빠르고 작은 온칩 스크래치패드 메모리.
- Tiling
- 입력 행렬을 SRAM에 들어갈 수 있는 작은 블록으로 분할하고 여러 패스에 걸쳐 결과를 누적하여 연산을 재구성하는 기법.
- Selective gradient checkpointing
- 순전파 중 대형 중간 어텐션 행렬 저장을 피하고 캐시된 소프트맥스 통계량을 사용해 역전파 중 온칩에서 이를 재연산하는 기법.
- Kernel fusion
- 여러 개별 연산(행렬 곱셈, 마스킹, 소프트맥스, 드롭아웃)을 단일 GPU 커널 실행으로 결합하여 HBM에 대한 반복적인 읽기/쓰기를 제거하는 기법.
- Block-sparse FlashAttention
- 블록 희소성 마스크로 정의된 0이 아닌 타일 블록만 계산하여 희소성 비율에 비례해 IO 복잡도를 줄이는 FlashAttention의 확장.
- Path-X / Path-256
- 기존 트랜스포머가 무작위 확률 이상의 정확도를 달성하지 못했던 Long-Range Arena의 긴 시퀀스 시각적 추론 벤치마크(16K 및 64K 시퀀스 길이).
자주 묻는 질문
FlashAttention은 어텐션 행렬을 근사하나요?
아닙니다. FlashAttention은 수치적 부동소수점 정밀도 범위 내에서 표준 어텐션과 수학적으로 완전히 동일한 출력을 내는 정확한 셀프 어텐션(exact self-attention)을 계산합니다.
FlashAttention이 역전파에서 더 많은 FLOPs를 계산하는데도 왜 더 빠른가요?
표준 어텐션이 메모리 바운드이기 때문입니다. HBM과 SRAM 간에 행렬을 전송하는 것이 빠른 SRAM에서 추가 산술 연산을 수행하는 것보다 훨씬 더 많은 실제 소요 시간(wall-clock time)을 소모합니다.
FlashAttention은 역전파를 위해 어떤 보조 메모리를 저장하나요?
FlashAttention은 순전파 출력 , 소프트맥스 정규화 계수 및 (의 추가 메모리만 필요), 그리고 온칩에서 드롭아웃 마스크를 재생성하기 위한 의사 난수 생성기 상태만 저장합니다.
FlashAttention은 IO 복잡도 측면에서 표준 어텐션과 어떻게 비교되나요?
표준 어텐션은 의 HBM 접근을 필요로 하는 반면, FlashAttention은 의 접근만 필요로 합니다. 여기서 은 SRAM의 크기이고 는 헤드 차원입니다.
이 페이지의 해설은 AI가 논문을 바탕으로 작성했으며 오류가 있을 수 있습니다. 자세한 내용은 원문을 확인하세요.