Skip to content

Commit cae6316

Browse files
committed
post : Efficient Attention
FlashAttention forward
1 parent 339ab1a commit cae6316

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

_posts/DeepLearning/Kernel Fusion/2025-03-07-fused.md

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -227,18 +227,27 @@ FlashAttention은 Tri Dao라는 사람이 제안을 하였습니다.FlashAttenti
227227

228228
FlashAttention의 forward는 이와 같습니다. algorithm의 line별로 설명을 하도록 하겠습니다.
229229

230-
1.
230+
1. $$B_r$$$$Query$$의 block size를 의미하고 , $$B_c$$$$Key,Value$$의 block size를 의미합니다.
231231

232-
2. 위의 online-self attention 에서 보았듯이 $$ v^* \in \mathbb{R}^d $$ ,$$ s^* \in \mathbb{R} $$ 를 0으로 초기화 했는데, FlashAttention에서는 이를 $$ O , \ell $$ 로 각각 표기법을 바꾸었습니다. Batch dimension으로 확장했기에 $$ O = \mathbf{0}_{N\times d} \in \mathbb{R}^{N \times d} $$ ,$$ \ell = \mathbf{0}_N \in \mathbb{R}^N $$ ,$$m = (-\infty)_N \in \mathbb{R}^N $$ 로 초기화합니다.
232+
2. 위의 online-self attention 에서는 $$ v^* \in \mathbb{R}^d $$ ,$$ s^* \in \mathbb{R} $$ 를 0으로 초기화 했는데, FlashAttention에서는 이를 $$ O , \ell $$ 로 각각 표기법을 바꾸었습니다. Batch dimension으로 확장했기에 $$ O = \mathbf{0}_{N\times d} \in \mathbb{R}^{N \times d} $$ ,$$ \ell = \mathbf{0}_N \in \mathbb{R}^N $$ ,$$m = (-\infty)_N \in \mathbb{R}^N $$ 로 초기화합니다.
233233

234+
3. $$Query ,key , value$$ 를 여러 block으로 쪼갭니다.
234235

236+
4. $$O$$$$Query$$ 의 weighted sum이므로 $$Query$$ 와 같은 Block size인 $$B_r$$ 으로 쪼개고, $$ \ell , m $$는 softmax를 계산할 때 사용되는 중간계산결과 이므로 $$Key,Value$$와 같은 Block size인 $$B_c$$ 를 사용합니다.
235237

238+
5. 모든 $$Key,Value$$ Block에 대해서 반복합니다.
236239

237-
#### Backward
240+
6. $Key,Value$의 block을 먼저 Cache에 load합니다.
238241

242+
7. 모든 $$Query $$ Block에 대해서 반복합니다.
239243

240-
## Conclusion
244+
8. $$ Query,O, \ell , m $$의 block을 Cache에 load합니다.
245+
246+
### Backward
241247

242248

249+
## Conclusion
250+
243251

252+
$$ \mathbf{S}_{ij} = \mathbf{Q}_i \mathbf{K}_j^{T} \in \mathbb{R}^{B_r \times B_c} $$
244253
## References

0 commit comments

Comments
 (0)