AI 요약 · 영어에서 AI 번역
FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness
Tri Dao, Daniel Y. Fu, Stefano Ermon, Atri Rudra, Christopher Ré
TL;DR
Self-attention은 시간·메모리 요구량이 시퀀스 길이의 제곱에 비례해 긴 문맥을 처리하는 Transformer의 확장이 어렵다. FlashAttention은 타일링과 재계산으로 GPU 메모리 전송을 줄이면서 정확한 어텐션을 계산한다. BERT-large, GPT-2, long-range arena에서 학습을 가속하며, 더 긴 문맥으로 모델 품질을 높인다.
문제
Self-attention의 이차 시간·메모리 복잡도로 인해 Transformer에 더 긴 문맥을 제공하기 어려워, 더 빠르고 메모리 효율적인 어텐션이 필요하다.
출처: §1 · p. 1방법
FlashAttention은 타일링과 재계산으로 GPU 고대역폭 메모리와 온칩 SRAM 사이의 전송을 줄이면서 정확한 어텐션을 계산한다.
출처: §1 · p. 2, §3.1 · p. 4결과
시사점 및 한계
FlashAttention과 블록 희소 변형은 더 긴 문맥으로 모델 품질을 높이고, Transformer가 Path-X 와 Path-256에서 우연 수준을 웃도는 성능을 내도록 한다.
출처: §1 · p. 3새로운 어텐션 구현마다 맞춤형 CUDA 커널이 필요해 상당한 개발 노력이 들며, GPU 아키텍처 간 이식이 어려울 수 있다.
출처: §5 · p. 10
Abstract
from arXiv · showhide
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$\times$ speedup on GPT-2 (seq. length 1K), and 2.4$\times$ 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).
1 서론
FlashAttention은 타일링과 재계산으로 GPU 메모리 전송을 줄이고 선형 메모리 사용량으로 정확한 어텐션을 계산한다. Transformer 학습을 가속하고 더 긴 문맥을 활용해 모델 품질을 높이며, 블록 희소 확장은 길이 64K의 시퀀스를 지원한다.
연구 동기
IO를 줄인 정확한 어텐션
- FlashAttention은 입력 타일링, 점진적 softmax 계산, HBM에 어텐션 행렬을 저장하는 대신 역전파 중 재계산하는 방식으로 선형 메모리를 사용해 정확한 어텐션을 계산한다.저장한 softmax 정규화 계수로 역전파 시 온칩 재계산이 가능하며, 융합 CUDA 커널이 추가 FLOPs에도 불구하고 메모리 접근을 제어한다. 어텐션 행렬 전송을 피함으로써 GPT-2 에서 PyTorch 대비 어텐션 계산 속도가 최대 7.6× 빨라진다.출처: §1 · p. 2, Figure 1 · p. 2
IO 복잡도
- 일반적인 헤드 차원과 SRAM 크기에서 표준 어텐션보다 최대 9× 적은 HBM 접근 횟수가 FlashAttention의 IO 효율 우위를 뒷받침한다.FlashAttention에 필요한 HBM 접근 횟수는 O(N^2 d^2 M^-1)이며, 표준 어텐션은 Ω(Nd + N^2)이다. 여기서 d는 헤드 차원, M은 SRAM 크기다. 하한 분석에 따르면 모든 SRAM 크기에 걸쳐 점근적으로 더 나은 정확한 어텐션 알고리즘은 존재할 수 없다.출처: §1 · p. 2
블록 희소 확장
- 블록 희소 FlashAttention은 FlashAttention보다 2–4× 빠르고 길이 64K까지 확장되며, 저자들이 파악한 모든 기존 근사 어텐션 방법을 능가한다.IO 복잡도는 희소 비율에 비례하는 배수만큼 FlashAttention보다 개선된다. 이는 이 기본 연산으로 근사 어텐션의 메모리 접근 오버헤드를 줄일 수 있음을 보여준다.출처: §1 · pp. 2–3
모델 학습 가속
모델 품질 향상
어텐션 성능 평가
- FlashAttention은 길이 128–2K에서 표준 어텐션보다 최대 3× 빠르며, 길이 512까지는 모든 기존 어텐션 방법보다 빠르고 메모리 효율적이다.FlashAttention은 길이 64K까지 확장되지만, 1K를 넘어서면 Linformer와 같은 일부 근사 방법이 더 빨라지기 시작한다.출처: §1 · p. 3
2 배경
GPU의 어텐션 성능은 연산뿐 아니라 메모리 전송량에도 좌우된다. 빠른 온칩 SRAM의 용량은 제한적인 반면, 표준 어텐션은 시퀀스 길이의 제곱에 비례하는 크기의 중간값을 HBM에 저장한다. 커널 융합은 반복적인 읽기를 줄이지만, 학습용 중간값을 저장해야 하므로 효과가 제한된다.
2.1 하드웨어 성능
- 온칩 SRAM은 HBM보다 열 배 빠르지만 용량은 몇 자릿수나 작으므로, 이 한정된 메모리를 효율적으로 활용하는 것이 중요하다.A100에는 대역폭이 1.5–2.0 TB/s인 HBM이 40–80 GB 탑재되어 있으며, 108개의 스트리밍 멀티프로세서 각각에 192 KB의 SRAM이 있다. SRAM 대역폭은 약 19 TB/s로 추정된다 [45].출처: §2.1 · p. 3
- 산술 집약도 는 접근한 바이트당 산술 연산 수로, 연산 성능에 제약받는 연산과 메모리 접근 성능에 제약받는 연산을 구분하는 기준이다.내부 차원이 큰 행렬 곱셈과 채널 수가 많은 합성곱은 대체로 연산 성능에 제약받는다. 반면 원소별 연산과 softmax를 비롯한 축약 연산은 대체로 메모리 접근 성능에 제약받는다.출처: §2.1 · p. 3
- 커널 융합은 공유 입력을 한 번만 불러와 메모리 접근 성능에 제약받는 연산을 가속하지만, 학습 시에는 여전히 역전파를 위해 중간값을 HBM에 기록해야 한다.이렇게 저장하는 중간값 때문에 단순한 커널 융합의 효과가 제한된다.출처: §2.1 · pp. 3–4
2.2 표준 어텐션 구현
- 표준 어텐션은 S와 P를 HBM에 실제로 저장하고 softmax처럼 메모리 접근 성능에 제약받는 연산을 포함하므로, O(N^2) 메모리와 시퀀스 길이의 제곱에 비례하는 HBM 접근이 부담이 된다.S = QK^T, P = softmax(S), O = PV를 계산하고 각 결과를 HBM에 기록한다. 마스킹과 드롭아웃은 메모리 접근 문제를 더욱 악화시킨다.출처: §2.2 · p. 4
3 FlashAttention: 알고리즘, 분석 및 확장
FlashAttention은 타일링과 재계산으로 HBM 접근을 줄이고 이차 규모의 중간 저장 공간 없이 정확한 어텐션을 계산한다. IO 분석으로 이러한 절감 효과를 설명하며, 블록 희소 확장으로 메모리 전송량을 더욱 줄인다.
3.1 타일링과 재계산을 활용한 효율적인 어텐션 알고리즘
- 재계산은 역전파 시 저장된 출력과 softmax 통계량으로 어텐션 행렬을 복원하여 O(N^2)개의 중간값을 저장하지 않도록 한다.행렬은 SRAM의 Q, K, V 블록으로부터 복원된다. FLOPs가 추가되지만 HBM 접근이 줄어 역방향 연산이 빨라진다.출처: §3 · p. 4, §3.1 · p. 5
- FlashAttention은 O(N)의 추가 메모리와 O(N^2 d) FLOPs만으로 정확한 어텐션 softmax(QK^T)V를 계산한다.타일링은 Q, K, V 블록을 SRAM에 불러오고 softmax 정규화 통계량으로 각 블록의 출력을 결합한다. 하나의 융합 CUDA 커널이 선택적인 마스킹과 드롭아웃을 포함한 어텐션 연산을 수행하여 반복적인 HBM 전송을 피한다.출처: §3.1 · pp. 4–5
3.3 확장: 블록 희소 FlashAttention
- 블록 희소 FlashAttention은 표준 어텐션과 동등한 성능을 유지하면서 LRA에서 2.8× 속도 향상을 달성한다.Figure 2는 희소성이 증가할수록 실행 시간도 비례하여 줄어듦을 보여준다.출처: Figure 2 · p. 6, §3.3 · p. 7
3.2 분석: FlashAttention의 IO 복잡도
- HBM 전송량 감소로 FLOPs가 추가되어도 FlashAttention은 더 빠르지만, 블록 크기가 256을 넘기면 다른 실행 시간 병목이 드러난다.블록이 커질수록 입력을 반복해서 읽는 횟수가 줄어들다가 산술 연산 등의 요인이 지배적이 된다. SRAM 용량도 블록 크기를 제한한다.출처: Figure 2 · p. 6, §3.2 · p. 6
- 시퀀스 길이 N, 헤드 차원 d, SRAM 크기 d ≤ M ≤ Nd에서 HBM 접근 횟수는 표준 어텐션의 Θ(Nd + N^2)에서 Θ(N^2 d^2/M)으로 줄어든다.일반적인 헤드 차원 64–128과 약 100KB의 SRAM에서는 d^2이 M보다 훨씬 작아 HBM 접근 횟수가 몇 배나 적다.출처: §3.2 · p. 6
- [d, Nd] 범위의 모든 SRAM 크기 M에서 o(N^2 d^2/M)의 HBM 접근 횟수를 달성하는 정확한 어텐션 알고리즘은 없다.증명에는 M = Θ(Nd)를 사용한다. 매개변수화 복잡도 를 통한 M에 대한 하한 분석은 향후 과제로 남는다.출처: §3.2 · p. 6
3.3 확장: 블록 희소 FlashAttention
- 블록 희소 FlashAttention에는 Θ(Nd + N^2 d^2 s/M)번의 HBM 접근이면 충분하며, s는 비영 블록 비율이고 d ≤ M ≤ Nd다.이 확장은 사전 정의된 블록 희소성 마스크에서 영 블록을 건너뛰어 더 큰 IO 항을 s에 비례해 줄인다.출처: §3.3 · pp. 6–7
- 긴 시퀀스에서 흔히 선택하는 비영 블록 비율 s는 N^-1/2 [11] 및 N^-1 log N [3, 17, 92]이다.후속 실험에서는 고정된 butterfly 희소 패턴 [17]을 사용하며, 이 패턴은 임의의 희소성을 근사할 수 있다 [16].출처: §3.3 · p. 7
4 실험
FlashAttention은 GPT-2의 perplexity를 유지하면서 Transformer 학습을 가속하고, 더 긴 문맥을 활용해 모델 품질을 높인다. Attention 벤치마크에서는 실행 속도가 더 빠르고 메모리 사용량이 선형으로 증가하며, block-sparse FlashAttention은 최대 64K 길이의 시퀀스를 지원한다.
BERT.
- FlashAttention을 사용한 BERT-large [22] 학습은 Nvidia의 MLPerf 1.1 [58] 속도 기록보다 15% 빠르다.동일한 초기화에서 학습을 시작해 마스크 언어 모델링 정확도 72.0%를 목표로 한다. 결과는 8×A100 GPU에서 10회 실행한 평균이다.출처: Table 1 · p. 7, BERT · p. 7
GPT-2.
- GPT-2 학습에서 perplexity 변화 없이 HuggingFace 대비 최대 3×, Megatron-LM [77] 대비 최대 1.7×의 속도 향상을 달성한다.8×A100 GPU에서 GPT-2 small과 medium을 평가한다. 기준 모델과 일치하는 학습 및 검증 곡선은 수치적 안정성을 뒷받침한다.출처: GPT-2 · pp. 7–8, Table 2 · p. 8
- LRA 에서 표준 attention 대비 최대 2.4×의 속도 향상을 달성하며, block-sparse FlashAttention은 평가한 모든 근사 attention 방법보다 빠르다.과제의 시퀀스 길이는 1024–4096이다. 정확도는 튜닝에 크게 좌우되며, 재현한 기준 모델은 원래 비교 에서 보고된 성능을 웃돈다.출처: Table 3 · p. 8, GPT-2 · p. 8, §4.2 · p. 8
4.2 더 긴 시퀀스로 모델 품질 개선
- 4K 문맥의 FlashAttention은 1K 문맥의 Megatron-LM보다 GPT-2 학습이 30% 빠르고 perplexity도 0.7 낮다.GPT-2 small을 비교하며, 8×A100 GPU에서 측정한 학습 시간을 보고한다.출처: Table 4 · p. 8, §4.2 · p. 8
4.3 Attention 벤치마크
- FlashAttention은 attention 순전파와 역전파를 합쳐 PyTorch보다 최대 3× 빠르지만, 실행 시간은 여전히 이차적으로 증가한다. Block-sparse FlashAttention은 비교한 모든 정확·희소·근사 attention 구현보다 빠르다.근사 attention의 실행 시간은 시퀀스 길이 512와 1024 사이에서 FlashAttention보다 짧아지기 시작한다. Block-sparse FlashAttention의 실행 시간은 시퀀스 길이에 따라 선형으로 증가한다.출처: §4 · p. 7, Figure 3 · p. 9, §4.3 · p. 10
- FlashAttention과 block-sparse FlashAttention은 메모리 사용량이 같고 시퀀스 길이에 따라 선형으로 증가하며, 정확 attention 기준 방법보다 메모리 효율이 최대 20× 높다.FlashAttention은 근사 attention 기준 방법보다 메모리 효율이 높고, Linformer보다 2× 효율적이다. Linformer를 제외한 모든 비교 대상은 시퀀스 길이 64K에 도달하기 전에 A100 메모리가 소진된다.출처: Figure 3 · p. 9, §4.3 · p. 10
4.2 더 긴 시퀀스로 모델 품질 개선
- 512토큰 시퀀스 대비 micro F1이 MIMIC-III 에서는 16K 토큰에서 4.3점, ECtHR [6] [7]에서는 8K 토큰에서 8.5점 향상된다.Beltagy et al. [3]을 따라 위치 임베딩을 반복해 사전 학습된 RoBERTa [56]를 확장한다. 저자들은 문서 길이 분포 변화에 대한 민감도 차이가 성능 향상 폭의 차이를 설명할 수 있다고 제안한다.출처: §4.2 · pp. 8–9, Table 5 · p. 9
- FlashAttention은 Path-X에서 정확도 61.4, block-sparse FlashAttention은 Path-256에서 정확도 63.1을 달성해, 두 과제에서 무작위 추측을 웃도는 최초의 Transformer 결과를 제시한다.Path-X의 시퀀스 길이는 16K이며, block-sparse FlashAttention은 Path-256에서 64K를 지원한다. Path-X로 전이할 때는 Path-64 사전 학습과 위치 임베딩의 공간 보간을 사용한다.출처: §4 · p. 7, Table 6 · p. 9, §4.2 · p. 9
5 한계 및 향후 연구 방향 … B.3 FlashAttention: 순전파
부록에서는 추가 메모리가 선형 크기인 어텐션의 순전파·역전파를 유도하고 FlashAttention의 타일 기반 GPU 구현을 설명하며, 메모리 사용량 감소와 HBM 전송량 감소를 구분한다. CUDA 커널을 직접 작성해야 한다는 점과 IO 인지 설계를 단일 GPU 어텐션 너머로 확장해야 한다는 점이 한계로 남는다.
5 한계 및 향후 연구 방향
- CUDA 커널을 직접 작성하면 개발 및 이식 비용이 발생하므로, 고수준 컴파일, 어텐션 외의 IO 인지 모듈, GPU 간 전송을 고려한 다중 GPU 기법이 필요하다.새로운 어텐션 구현마다 새 커널이 필요하며, 제안된 고수준 컴파일 접근법은 Halide 와 유사하다. 단일 GPU 어텐션은 상수 배 이내에서 최적이지만, GPU 간 병렬화 는 또 다른 IO 계층을 도입한다.출처: §5 · p. 10
A 관련 연구
- Butterfly 행렬 [15, 64]의 표현 효율성 [16]은 블록 희소 패턴의 근거가 되지만, 이론적 연산량 절감이 실제 실행 시간 단축으로 이어지지 않을 수 있다.고도로 최적화된 밀집 행렬 곱셈이 이러한 하드웨어 복권 장벽 [41]을 형성하며, butterfly 확장 기법 [17, 18]은 하드웨어 호환성 개선을 목표로 한다.출처: A Related Work · p. 17
- 블록 희소 FlashAttention은 학습 내내 butterfly 희소 패턴을 고정하며, Long-range Arena 과제에서 밀집 FlashAttention과 거의 동등한 성능을 낸다.저자들은 이 고정 패턴을 어텐션에 특화된 고정 복권 티켓으로 해석하고, 복권 티켓 가설 [28] [29] [30]과 연결한다.출처: A Related Work · p. 17
B 알고리즘 상세
- FlashAttention은 어텐션의 순전파와 역전파 모두에서 HBM 접근을 줄여, HBM 전송량이 이차로 유지되는 단순한 선형 추가 메모리 방식보다 실행 시간과 메모리 사용량을 개선한다.따라서 중간 저장 공간만 줄인다고 실행 속도 향상이 보장되지는 않는다.출처: B Algorithm Details · pp. 17–18
B.1 메모리 효율적인 순전파
- softmax 정규화 상수를 별도로 계산한 뒤 반복 합산으로 출력을 누적하면, 순전파에 O(n) 추가 메모리만으로 충분하다.이는 앞서 어텐션에 적용된 [51] [66] 기법 [60]으로 K/V 열을 분리하지만, HBM 접근 횟수는 여전히 이차로 증가한다. 정규화 상수에는 O(n) 추가 메모리가 필요하고, 출력 누적에는 O(d)가 필요하다.출처: §B.1 · p. 18
B.2 메모리 효율적인 역전파
- Rabe and Staats [66]가 제안한 gradient checkpointing을 적용하는 대신 역전파를 명시적으로 유도하면, 선형 크기의 추가 메모리만으로 충분하다.저장된 softmax 정규화 상수를 이용하면 추가 메모리 없이 반복 합산으로 dV를 누적할 수 있다.출처: §B.2 · p. 18
B.3 FlashAttention: 순전파
- 전체 순전파는 마스킹과 원소별 dropout을 지원하며, 역전파에 사용할 출력, softmax 통계량, 난수 생성기 상태를 저장한다.마스킹은 제외할 원소의 값을 음의 무한대로 설정한다. 드롭아웃은 확률 p로 원소의 값을 영으로 설정하고, 남은 원소에 1/(1-p)를 곱해 재조정한다.출처: §B.3 · p. 19
- FlashAttention은 입력, 출력, softmax 통계량을 블록으로 나누고, K/V 블록에 이어 Q/출력/통계량 블록을 SRAM에 적재해 온칩 점수 계산을 수행한다.바깥쪽 루프는 각 K/V 블록을 적재하고, 안쪽 루프는 이에 대응하는 Q, 출력, 통계량 블록을 처리한다.출처: §B.3 · p. 20
B.4 FlashAttention: 역방향 패스 · B.5 Rabe and Staats [66]와의 비교
FlashAttention의 역방향 패스는 O(N) 추가 메모리를 사용해 O(N^2) FLOPs의 연산을 수행한다. Rabe and Staats [66]와 달리 메모리 전송량을 줄이는 데 초점을 맞추며, 여러 임시 블록 출력을 보관하거나 역전파 중 이를 재계산하지 않는다.
B.4 FlashAttention: 역방향 패스
- 저장된 의사난수 생성기 상태로 역전파 중 드롭아웃 마스크를 재생성하면, 순방향 패스의 O(N^2) 마스크를 저장할 필요가 없어 O(N) 추가 메모리로 충분하다.생성기 상태는 순방향 패스 중에 저장한다.출처: §B.4 · p. 20
- 소프트맥스 기울기의 리덕션은 D_i = rowsum(dO_i ◦ O_i)를 사용해, SRAM에 담기 어려울 수 있는 길이 N의 확률 및 기울기 행에 대한 리덕션을 피한다.Algorithm 4는 역방향 패스의 유도식을 블록 단위로 구현한다.출처: §B.4 · pp. 20–21
- FlashAttention의 역방향 패스는 입력, 출력, 출력 기울기, 입력 기울기의 저장 공간 외에 O(N^2) FLOPs와 O(N) 추가 메모리만으로 수행할 수 있다.이 연산 복잡도와 추가 메모리 복잡도는 순방향 패스와 동일하다.출처: §B.4 · p. 21
- d ≤ M ≤ Nd일 때 FlashAttention의 역방향 패스에는 Θ(N^2 d^2 M^-1)번의 HBM 접근이 필요하며, 표준 어텐션에는 Θ(Nd + N^2)번이 필요하다.N은 시퀀스 길이, d는 헤드 차원, M은 SRAM 크기다.출처: §B.4 · p. 21
B.5 Rabe and Staats [66]와의 비교
- FlashAttention과 Rabe and Staats [66]는 모두 어텐션 블록을 타일링하고, 순방향 패스에서 어텐션 행렬을 저장하지 않고 역전파 중 재계산한다.두 방법이 공유하는 이 전략은 메모리 사용량을 줄인다.출처: §B.5 · p. 22
- FlashAttention은 표준 어텐션보다 2-4× 빠른 반면, Rabe and Staats [66]는 속도가 거의 같거나 약간 느리다.FlashAttention은 메모리 접근을 줄이는 데, Rabe and Staats [66]는 최대 GPU 메모리 사용량을 줄이는 데 초점을 맞춘다. 두 방법 모두 메모리 요구량을 크게 줄인다.출처: §B.5 · p. 22
- FlashAttention은 역전파를 해석적으로 단순화해 어텐션 행렬만 재계산하는 반면, Rabe and Staats [66]는 기울기 체크포인팅으로 임시 블록 출력도 재계산한다.이는 역방향 패스의 메모리 요구량을 줄이고 속도를 높인다. 또한 FlashAttention은 출력을 점진적으로 갱신해 출력 사본 하나만 유지하지만, Rabe and Staats [66]는 K개 블록에 대해 K개의 임시 출력 사본을 유지한다.출처: §B.5 · p. 22
C 증명 · D 확장 세부 사항 · D.1 Block-sparse FlashAttention
증명을 통해 FlashAttention의 정확성을 보이고 순전파와 역전파의 HBM 접근 횟수를 분석한다. 블록 희소 확장은 원소가 모두 0인 블록을 건너뛰어 블록에 의존하는 IO를 줄이지만, 출력 쓰기 비용은 그대로 발생한다.
C 증명
- O(N)의 추가 메모리에 정규화 통계량 ℓ과 m을 저장한다.이 통계량은 블록 단위 계산 중 정규화 합과 행별 최댓값을 추적한다.출처: C Proofs · p. 22
- 누적된 행별 최댓값, 정규화 합, 부분 어텐션 출력으로 정확한 최종 결과 O = softmax(QK^T)V를 얻음을 귀납법으로 보인다.외부 루프의 매 반복이 끝나면 이 값들은 그때까지 처리한 키와 값 블록에 대한 어텐션에 해당한다.출처: C Proofs · pp. 22–23
- FlashAttention의 순전파에는 Θ(NdT_c)의 HBM 접근이면 충분하며, 표준 어텐션에는 Θ(Nd + N^2)의 접근이 필요하다.K와 V는 각각 한 번만 읽어 오고, Q와 O는 T_c번 순회한다.출처: C Proofs · p. 23
- B_c×d 크기의 K/V 블록, B_r×d 크기의 Q/O 블록, B_r×B_c 크기의 점수 블록이 온칩 메모리에 들어가도록 타일 크기를 정해야 한다.이 저장 공간 제약이 IO 분석에 쓰이는 블록 크기의 허용 범위를 결정한다.출처: C Proofs · p. 23
- 정확한 어텐션에서는 입력 행렬과 출력의 크기가 Nd이고 HBM에 저장되므로 Ω(Nd)의 HBM 접근이 불가피하다.이 입출력 요구 조건을 이용해 하한 증명에서 모순을 도출한다.출처: C Proofs · p. 24
- FlashAttention의 역전파에는 Θ(NdT_c)의 HBM 접근이면 충분하며, 표준 어텐션의 역전파에는 Θ(Nd + N^2)의 접근이 필요하다.K와 V는 한 번씩 읽어 오고 dK와 dV는 한 번씩 기록한다. Q, O, dO, dQ는 T_c번 순회해야 한다.출처: C Proofs · p. 24
D.1 Block-sparse FlashAttention
- Block-sparse FlashAttention은 원소가 모두 0인 블록을 건너뛰어 블록에 의존하는 HBM 접근 횟수를 비영 블록 비율 s만큼으로 줄이지만, 출력 쓰기 비용은 그대로 발생한다.이 점을 제외하면 Algorithm 5는 Algorithm 2와 동일하다. s가 작더라도 N×d 크기의 출력 O는 반드시 기록해야 한다.출처: §D.1 · p. 25
D.2 확장 가능성
IO를 고려한 접근법은 메모리 계층 간 비대칭성과 메모리 접근 병목을 겨냥해 다중 GPU 어텐션, 희소 MLP 층, 커널 방법 등으로 확장할 수 있다.
다중 GPU 어텐션
- 다중 GPU 어텐션은 SRAM, 로컬 HBM, 다른 GPU의 HBM 사이에 있는 메모리 계층 간 비대칭성을 활용해 매우 긴 시퀀스를 공동으로 처리할 수 있다.대규모 언어 모델은 수백 또는 수천 개의 GPU에서 학습하며, 일반적으로 노드 내 4-8개의 GPU에 어텐션 계산을 분할한다 [77].출처: §D.2 · pp. 25–26
희소 MLP 층
- IO를 고려한 희소 MLP 구현은 희소성에 비례한 속도 향상을 가로막는 메모리 병목을 완화할 수 있다.일반적인 밀집 MLP 층은 연산 성능에 제약을 받는다. 희소 가중치 행렬은 효율을 높일 수 있지만 [17], 많은 희소 MLP 층은 메모리 성능에 제약을 받게 된다.출처: §D.2 · p. 26
커널 기반 기계학습
- 커널 방법은 각 입력 쌍의 커널 행렬 원소를 결정하는 저차원 입력을 활용해, FLOPs만 줄이기보다 IO 감소에 우선순위를 둘 수 있다.FlashAttention은 Q와 K를 다시 불러오고, 랭크 d가 N보다 훨씬 작은 QK^T로부터 어텐션 블록을 재계산해 HBM 접근을 줄인다. KeOps 라이브러리 [8]는 메모리 읽기와 쓰기를 줄이면 커널 연산을 가속할 수 있음을 보여준다.출처: §D.2 · p. 26
E 전체 실험 결과 · E.1 BERT
BERT-large는 MLPerf 1.1 기준 절차에 따라 학습하며, 마스크 언어 모델링 검증 정확도 72.0%에 도달하는 데 걸리는 실제 시간을 측정한다. 동일한 데이터 분할과 검증 샘플을 사용해 Nvidia가 보고한 MLPerf 1.1 학습 속도와 비교한다.
E.1 BERT
- Nvidia가 보고한 MLPerf 1.1 학습 속도와 실제 학습 소요 시간을 비교할 때, 마스크 언어 모델링 검증 정확도 72.0%를 학습 종료 목표로 삼는다.제공된 본문에는 비교 절차가 기술되어 있으나 속도 비교 결과는 제시되어 있지 않다.출처: §E.1 · p. 26
- LAMB 옵티마이저의 학습률은 3.75e-3이며, BERT-large의 MLPerf 1.1 기준 학습 절차와 하이퍼파라미터를 따른다.출처: §E.1 · p. 26
- 학습 배치 크기는 448이며, 학습은 최대 7100단계로 제한한다.출처: §E.1 · p. 26
- FP16 학습에는 O2 최적화 수준의 Apex AMP를 사용한다.출처: §E.1 · p. 26
- 검증 샘플 10000개와 MLPerf 1.1 기준 학습/검증 데이터 분할은 Nvidia 기준 모델에서 사용한 것과 동일하다.출처: §E.1 · p. 26
- 목표 검증 정확도에 도달하기까지의 실제 학습 소요 시간은 10회 실행의 평균으로 측정한다.학습에는 8×A100-80GB GPU를 사용하며, 각 실행에는 16에서 19분이 걸린다.출처: §E.1 · p. 26
E.2 GPT-2 · E.3 LRA 세부 사항
FlashAttention의 검증 퍼플렉서티 곡선은 HuggingFace GPT-2와 일치하며, 하이퍼파라미터를 조정한 거의 모든 어텐션 방법은 다섯 LRA 과제에서 비슷한 정확도를 보인다. 이 절들은 Path-X와 Path-256의 사전 학습 및 미세 조정을 포함한 학습·비교 절차를 기술한다.
E.2 GPT-2
- GPT-2 실험은 표준 Huggingface transformers 및 Nvidia Megatron-LM 구현을 사용하고, Megatron-LM 학습 절차를 따른다.MIMIC-III와 ECtHR의 긴 문서 분류에는 Dai et al. [13]의 하이퍼파라미터를 따른다.출처: §E.2 · p. 26
- GPT-2 학습의 유효 배치 크기는 512이며, 그래디언트 누적, AdamW, PyTorch AMP 혼합 정밀도를 사용해 400K 스텝 동안 학습한다.AdamW 학습률은 GPT-2 small에서 6e-4, GPT-2 medium에서 1.5e-4이며, 가중치 감쇠는 0.1이다. 모든 구현은 동일한 하이퍼파라미터를 사용한다.출처: §E.2 · p. 26
- Openwebtext의 0.5%를 한 번 무작위로 추출해 모든 GPT-2 모델의 공통 검증 데이터로 사용하고, 나머지는 학습에 사용한다.실험에는 GPT-2 BPE 토크나이저를 사용한다.출처: §E.2 · p. 26
- A100-40GB GPU 8개에서의 학습 시간은 GPT-2 small이 2.7-9.5일, GPT-2 medium이 6.9-21.0일로 보고된다.보고된 측정값은 실제 경과 학습 시간이다.출처: §E.2 · p. 26
- FlashAttention은 GPT-2 small과 medium에서 HuggingFace 기준 모델과 거의 동일한 검증 퍼플렉서티 곡선을 보인다.두 구현의 검증 퍼플렉서티 곡선은 학습 전반에 걸쳐 거의 겹친다.출처: §E.2 · p. 26, Figure 4 · p. 27
E.3 LRA 세부 사항
- 하이퍼파라미터 조정 후 거의 모든 어텐션 방법은 다섯 LRA 과제 모두에서 비슷한 정확도를 달성한다.하이퍼파라미터는 Long-range arena, 해당 저장소, Nyströmformer 재현 연구 를 따르며, 재현하지 않은 기준 방법에는 Tay et al. 과 Xiong et al. 이 보고한 성능 중 더 좋은 값을 사용한다. Performer는 불안정성 때문에, Local Attention은 FP16을 지원하지 않아 혼합 정밀도를 적용하지 않는다. 전체 실제 경과 시간 기준 속도 향상은 다섯 과제의 기하평균이다.출처: §E.3 · p. 27
- 200에포크의 추가 미세 조정으로 FlashAttention의 Path-X 정확도가 약 4점 향상되며, 이후에는 과적합이 발생한다.long-range arena 논문 [80]의 PathFinder-32 하이퍼파라미터를 따라, Path-X와 Path-256은 Path-64에서 200에포크 동안 사전 학습한 뒤 위치 임베딩을 격자 단위로 복제하고, 한 에포크의 워밍업과 코사인 학습률 감쇠를 적용해 200에포크 동안 미세 조정한다. Path-X의 추가 미세 조정 단계는 검증 정확도가 가장 높은 체크포인트에서 시작하며, 동일한 워밍업과 학습률을 사용한다.출처: §E.3 · p. 27
E.4 Apex FMHA와의 비교
FlashAttention은 Apex FMHA에 타일링과 재계산을 적용해 메모리를 절약하고 최대 길이 64K의 시퀀스를 지원한다. 짧은 시퀀스에서는 FMHA보다 순전파가 약간 빠르지만 역전파는 약간 느리다.
E.4 Apex FMHA와의 비교
- Apex FMHA 대비 FlashAttention의 전체 실행 시간은 시퀀스 길이 128에서 4% 더 느리고, 256에서 8% 더 빠르며, 512에서 5% 더 빠르다.Table 7은 A100-SXM4-40GB GPU에서 배치 크기 64, 헤드 수 16, 헤드 차원 64로 마스킹과 드롭아웃을 적용한 어텐션을 측정한 결과다.출처: Table 7 · p. 28, §E.4 · p. 28
- Apex FMHA는 BERT를 대상으로 하며, 시퀀스 길이는 최대 512, 헤드 차원은 64만 지원하고 GPU는 A100만 지원한다.프로젝트 시작 당시 저자들이 파악한 어텐션 구현 중 가장 빨랐으며, MLPerf 1.1 기준 Nvidia GPU를 사용한 MLPerf BERT 학습 제출 결과의 거의 전부가 FMHA를 사용했다 [58].출처: §E.4 · pp. 27–28
- FMHA 코드에 타일링과 재계산을 적용해 길이 64K의 시퀀스를 지원하며, 지원하는 헤드 차원과 GPU의 범위도 넓혔다.지원하는 헤드 차원은 16, 32, 64, 128이며, 작성 시점의 모든 Turing 및 Ampere GPU를 지원한다.출처: §E.4 · p. 28
- FlashAttention은 어텐션 행렬을 저장하지 않고 역전파 중에 재계산하므로, FMHA보다 순전파는 약간 빠르고 역전파는 약간 느리다.FMHA는 어텐션 연산을 하나의 CUDA 커널로 융합하지만 기울기 계산을 위해 어텐션 행렬을 HBM에 저장하므로, 메모리를 크게 절약하지는 못한다.출처: §E.4 · p. 28
E.5 하드웨어 및 구성에 따른 속도 향상
표준 PyTorch 어텐션 대비 FlashAttention의 속도 향상 폭은 GPU와 어텐션 구성에 따라 달라진다. 메모리 대역폭, SRAM 용량, 헤드 차원, 마스킹이 실제 향상 폭에 영향을 준다.
A100
- A100에서는 표준 PyTorch 어텐션 대비 대체로 2-4× 속도 향상이 관찰되며, 드롭아웃과 마스킹을 사용하면 커널 융합 덕분에 향상 폭이 더 커진다.배치 크기 8, 헤드 차원 64, 어텐션 헤드 12개로 다양한 시퀀스 길이에서 측정했다.출처: Figure 5 · p. 28, §E.5 · p. 28
A100, 헤드 차원 128
- A100에서 헤드 차원 128과 인과 마스크를 사용하면 전반적인 향상 폭은 작아지지만, 여전히 표준 PyTorch 어텐션 대비 최대 3× 속도 향상이 가능하다.헤드가 커지면 SRAM에 맞추기 위해 블록을 줄여야 하지만, 인과 마스킹으로 블록의 절반을 건너뛴다. 배치 크기 16, 헤드 12개로 측정했다.출처: Figure 6 · p. 29, §E.5 · p. 29
RTX 3090
- RTX 3090에서는 표준 PyTorch attention 대비 2.5-4.5×의 속도 향상을 보여 A100의 향상 폭을 약간 웃도는데, 이는 RTX 3090의 메모리 대역폭이 더 낮기 때문이다.메모리 대역폭은 RTX 3090이 약 900 GB/s, A100이 1.5 TB/s이며, 측정에는 배치 크기 12와 attention head 12개를 사용했다.출처: Figure 7 · p. 29, §E.5 · p. 29
T4
- T4는 더 작은 SRAM 때문에 FlashAttention 블록을 더 작게 구성해야 하므로 속도 향상 폭이 작으며, 이는 IO 복잡도 분석과 일치한다.T4가 추론에 주로 쓰인다는 점을 반영해, 순전파와 역전파를 합친 실행 및 순전파만 수행한 실행의 결과를 모두 포함한다.출처: §E.5 · p. 29, Figure 8 · p. 30
E.6 전체 벤치마크 결과
이 절에서는 단일 A100에서 시퀀스 길이에 따른 어텐션 실행 시간과 메모리 사용량을 측정하고, 여러 드롭아웃 및 마스킹 설정에서 정확한 어텐션, 근사 어텐션, 희소 어텐션 구현을 비교한다.
E.6 전체 벤치마크 결과
- 벤치마크에서는 PyTorch/HuggingFace와 Megatron의 정확한 어텐션을 근사 어텐션 구현 5종 및 희소 어텐션 구현 3종과 비교한다.근사 어텐션 비교 기법은 Reformer [51], Local Attention, Linformer Attention [84], Smyrf, LongShortFormer 이며, 희소 어텐션 비교 기법은 OpenAI Block-Sparse Attention [11], Longformer [3], BigBird Attention 이다. 근사 및 희소 기법에는 압축률 1/8 또는 압축 시퀀스 길이 256을 적용하며, 압축 후 길이가 더 짧은 설정을 택한다.출처: §E.6 · p. 30
- 40 GB HBM을 갖춘 A100 GPU 한 대에서 차원이 64인 헤드 8개와 배치 크기 16으로 어텐션 연산 부하를 구성한다.무작위 Q, K, V 입력을 사용하며 은닉층 투영 연산은 제외한다. 실행 시간은 100회 측정값의 평균이며, 메모리는 한 번 측정한다. 드롭아웃은 0.1이고, 패딩 마스크 길이는 시퀀스 길이에서 20을 뺀 값부터 전체 시퀀스 길이까지 균등 무작위로 정한다.출처: §E.6 · p. 30
- 실행 시간 벤치마크는 드롭아웃 및 마스킹 설정별로 순전파, 역전파, 두 과정을 합친 실행을 측정한다. 메모리 벤치마크는 드롭아웃과 마스킹 없이 두 과정을 합친 실행을 측정한다.실행 시간 표의 단위는 밀리초이며, 메모리 표의 단위는 MB이다.출처: §E.6 · p. 31, Table 11 · p. 32, Table 21 · p. 34
- Block-Sparse, Longformer, BigBird는 외부 라이브러리의 버그로 마스크를 적용한 역전파가 불가능해 마스킹 없이 측정한다.이 예외는 해당 비교 기법에 유리한 조건을 제공하려는 취지였다.출처: §E.6 · p. 31
- FP32만 지원하는 Local Attention 구현을 제외하고 모든 측정에 FP16을 사용한다.출처: §E.6 · p. 31
- Megatron, OpenAI Block-Sparse, Longformer/BigBird가 지원하는 최대 시퀀스 길이는 각각 2048, 4096, 8092이다.다른 비교 기법은 GPU 메모리가 소진될 때까지 시퀀스 길이를 늘려가며 테스트한다.출처: §E.6 · p. 31
Related papers
This paper cites
- Attention Is All You Need2017
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding2018
- Language Models are Few-Shot Learners2020
- An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale2020
- PyTorch: An Imperative Style, High-Performance Deep Learning Library2019
- Longformer: The Long-Document Transformer2020
Cited by
- AB-Attention: Accurate Block Attention for Accelerating Video Diffusion Transformers2026
- Learning to Formulate: Agentic Hardware-Software Co-Design of AI Infrastructure through Progressive Optimization and Verification2026
- Youtu-Parsing-Omni: One Encoder, One Schema, All Modalities2026
- Why Speculative Decoding Works Better Than Predicted on Sparse MoE Models2026
- GAAC: Lossless KV Compression for Bandwidth-Efficient LLM Inference on Personal Devices2026
- Merge and Branch: Efficient Tree-Structured Supervised Fine-Tuning of LLMs for Recommendation2026