맞아. 네 표현을 정리하면 이렇게 말할 수 있음.
일반 Attention은 중간 결과를 완성된 데이터 객체로 물질화하며 계산하고,
FlashAttention은 중간 결과를 저장 가능한 객체로 만들지 않고 계산 과정 속에서 계속 갱신되는 상태 변수로 다룬다.
조금 더 풀면 이거야.
Attention과 FlashAttention의 핵심 차이
일반 Attention은 보통 다음처럼 생각함.
S = QKᵀ
P = softmax(S)
O = PV
여기서 S, P는 각각 명확한 중간 텐서임.
S: attention score matrix
P: attention probability matrix
O: output
즉 일반 attention에서는 계산 중간에 이런 객체들이 실제로 존재한다고 보는 구조임.
Q와 K를 곱해서 S를 만든다.
S를 저장한다.
S에 softmax를 적용해서 P를 만든다.
P를 저장한다.
P와 V를 곱해서 O를 만든다.
이 방식은 수학적으로는 직관적이지만, 실행 관점에서는 비효율적임.
왜냐하면 S와 P가 매우 큰 행렬이고, 이걸 global memory에 쓰고 다시 읽는 과정이 생기기 때문임.
일반 Attention은 “결과 객체 중심” 구조
일반 Attention의 사고방식은 이런 식임.
먼저 score 행렬을 완성한다.
그다음 probability 행렬을 완성한다.
그다음 output 행렬을 완성한다.
즉 계산이 단계별로 나뉘어 있음.
QKᵀ 전체 생성
↓
softmax 전체 생성
↓
PV 전체 생성
이때 각 단계의 결과가 다음 단계의 입력이 됨.
그래서 SASS나 GPU 실행 관점에서는 다음 특징이 생김.
중간 행렬 저장
중간 행렬 재로딩
kernel launch 분리 가능성
global memory traffic 증가
즉 일반 Attention은 S, P 같은 중간 데이터를 물질화된 텐서로 다룸.
FlashAttention은 “상태 갱신 중심” 구조
반면 FlashAttention은 다음처럼 생각함.
S 전체를 만들지 않는다.
P 전체를 만들지 않는다.
필요한 block의 score만 잠깐 계산한다.
그 score를 이용해 softmax 통계량을 갱신한다.
그 즉시 output accumulator를 갱신한다.
즉 중간 결과가 완성된 객체로 존재하지 않음.
대신 다음 상태들이 계속 갱신됨.
m: 현재까지 본 score의 row-wise max
l: 현재까지의 softmax normalization sum
O: 현재까지 누적된 output
구조는 대략 이럼.
Q block 고정
K/V block 순회
현재 score block 계산
현재 block의 max 계산
기존 max와 비교해 m 갱신
softmax denominator l 갱신
output accumulator O 갱신
다음 K/V block으로 이동
여기서 중요한 점은 attention probability matrix P가 완성된 형태로 존재하지 않는다는 것임.
네 표현으로 말하면
네가 말한
물질화가 아닌, 변화하는 객체로 다루는 느낌
이 표현은 상당히 정확함.
다만 더 엄밀하게 말하면, FlashAttention은 중간 attention matrix를 객체로 생성하지 않고, 그 효과만을 상태 변수의 변화로 흡수함.
즉:
일반 Attention:
S와 P라는 중간 객체를 만든 뒤 사용한다.
FlashAttention:
S와 P를 만들지 않고,
그들이 최종 O에 미칠 영향을 즉시 반영한다.
조금 더 개념적으로 쓰면:
일반 Attention은 intermediate tensor materialization 방식이고,
FlashAttention은 streaming state update 방식이다.
한국어로는:
일반 Attention은 중간 텐서를 물질화하는 방식이고,
FlashAttention은 중간 텐서를 명시적으로 만들지 않은 채
블록 단위 계산 결과를 상태 변수에 온라인으로 누적하는 방식이다.
예시 비유
일반 Attention은 장부를 이렇게 쓰는 방식임.
1. 모든 거래 내역을 표로 만든다.
2. 각 거래의 비율을 다시 표로 만든다.
3. 그 비율표를 보고 최종 정산액을 계산한다.
FlashAttention은 이렇게 함.
1. 거래를 한 묶음씩 본다.
2. 현재까지의 최대값, 합계, 정산액을 갱신한다.
3. 전체 표를 만들지 않고 최종 정산액만 남긴다.
둘 다 최종 결과는 같음.
하지만 두 번째 방식은 중간 표를 만들지 않음.
SASS 분석 관점에서의 표현
이걸 SASS 분석 언어로 바꾸면 이렇게 됨.
일반 Attention
QKᵀ 결과가 global memory에 저장됨
softmax가 그 결과를 다시 읽음
softmax 결과 P가 다시 global memory에 저장됨
PV 계산이 P를 다시 읽음
즉 중간 값들이 메모리에 물질화됨.
STG S
LDG S
STG P
LDG P
FlashAttention
QKᵀ score block은 register/shared memory 안에서 즉시 소비됨
softmax의 max/sum은 online 상태로 갱신됨
P 전체는 저장되지 않음
O accumulator만 계속 갱신됨
최종 O만 global memory에 저장됨
즉 핵심 패턴은:
중간 행렬 저장 제거
register/shared 중심의 임시 계산
online max/sum 갱신
output accumulator 갱신
최종 output만 store
한 문장으로 압축하면
가장 깔끔하게는 이렇게 말할 수 있음.
일반 Attention은 QKᵀ, softmax(QKᵀ)라는 중간 행렬을 실제 텐서로 물질화한 뒤 다음 연산에 넘기는 방식이고, FlashAttention은 이 중간 행렬들을 만들지 않은 채 block 단위 score를 즉시 소비하여 max, sum, output accumulator를 온라인으로 갱신하는 방식이다.
조금 더 연구 문서식으로 쓰면:
FlashAttention의 본질은 attention 연산의 수학식을 바꾸는 것이 아니라, 중간 attention score/probability matrix의 materialization을 제거하고, softmax normalization과 value aggregation을 block-wise streaming update로 재배치하는 실행 스케줄 최적화이다.
이 표현이 제일 정확함.
'명징직조' 카테고리의 다른 글
| 엔트로피의 새로운 해석 - 추적 가능한 정보가 미시적 자유도로 분산되는 과정 (0) | 2026.06.23 |
|---|---|
| 벤포드 법칙 : 숫자의 첫 자리는 왜 균등하지 않은가 - 로그 스케일, 진법 불변성, 소득 부노, 그리고 정규분포에 대한 오해 (0) | 2026.06.18 |
| 자유의지라는 끊임없는 질문 (0) | 2026.05.29 |
| 근본적인 설명이 항상 가장 좋은 설명은 아니다 - 원자를 안다고 비행기를 설계할 수는 없는 이유 (0) | 2026.05.18 |
| 인간의 인식 방법 : 추상화 (0) | 2026.05.14 |