Skip to content

Commit c3088bb

Browse files
committed
post : fused kernel
1 parent a59cd85 commit c3088bb

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

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

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ context를 전체 input이 아닌 부분으로 한정하는 Window Attention 이
3333
하지만, 이러한 efficient attention은 computation Complexity의 장점을 얻는 대신에 정확도에서 단점을 얻게 됩니다.
3434
따라서, Memory Efficient한 Attention이 주목을 받고 있습니다. Gpu Programming을 활용하여 정확도를 유지한채 연산속도와 메모리 사용량을 상당부분 향상시키기 때문입니다.
3535

36-
## Online-Softmax
36+
## Softmax
37+
38+
### Safe-Softmax
3739

3840
$$ y_i = \frac{e^{x_i}}{\sum_{j=1}^V e^{x_j}} $$
3941
기존의 softmax는 exponential 함수를 사용하기에 overflow나 underflow 문제가 발생할 수 있다.
@@ -46,12 +48,16 @@ $$ y_i = \frac{e^{x_i - \max_{k=1}^V x_k}}{\sum_{j=1}^V e^{x_j - \max_{k=1}^V x_
4648

4749

4850

51+
### Online-Softmax
4952
하지만,softmax는 전체 row를 봐야한다.
5053
전체 row를 메모리에 매번 적재를 하는 것은 부담이 됩니다.
5154
따라서, input의 일부만을 확인하고 매번 분모와 분자를 update한다.
5255

5356
![online-softmax](\assets\images\DeepLearning\KernelFusion\online-softmax.png)
5457

58+
59+
#### Proof
60+
5561
**Base case**: \(V = 1\)
5662

5763
1. $$m_1 \leftarrow x_1$$
@@ -75,6 +81,7 @@ $$d_S \leftarrow d_{S-1} \, e^{\,m_{S-1} - m_S} + e^{\,x_S - m_S} $$
7581
$$= \left(\sum_{j=1}^{S-1} e^{\,x_j - m_{S-1}}\right) e^{\,m_{S-1} - m_S} + e^{\,x_S - m_S} $$
7682
$$ = \sum_{j=1}^{S} e^{\,x_j - m_S} $$
7783

84+
#### SafeNess
7885

7986
**SafeNess** :
8087
- $$m_j \in \Bigl[\min_{k=1}^V m_k,\; \max_{k=1}^V m_k\Bigr], \quad \forall j \in \{1, \dots, V\}$$
@@ -89,6 +96,28 @@ $$ = \sum_{j=1}^{S} e^{\,x_j - m_S} $$
8996
32-bit floating point의 range보다 적은 값까지 표현이 가능하다 하는 이유는 안전수치를 보수적으로 잡은거 같습니다.
9097
만약에, 더 많은 벡터를 처리한다면 64-bit floating point 를 사용해야 할 것입니다.
9198

99+
#### Block-Update Proof
100+
위에서 증명한 것들은 Online-Softmax를 1개의 data를 차례대로 계산하여 update하는 과정을 증명한 것입니다.
101+
실제로, data를 여러개 받아서 $$d_j $$ , $$m_j $$ 등을 계산하기 때문에 이를 기존에 구한 $$d_i $$ , $$m_i $$ 에 반영할 수 있어야 합니다.
102+
103+
$$
104+
\begin{bmatrix}
105+
m_i \\
106+
d_i
107+
\end{bmatrix}
108+
\;\oplus\;
109+
\begin{bmatrix}
110+
m_j \\
111+
d_j
112+
\end{bmatrix}
113+
=
114+
\begin{bmatrix}
115+
\max(m_i, m_j) \\
116+
d_i \, e^{\,m_i - \max(m_i, m_j)} \;+\; d_j \, e^{\,m_j - \max(m_i, m_j)}
117+
\end{bmatrix}
118+
$$
119+
120+
92121
## Online-Self Attention
93122
attention에는 softmax 때문에 input 전체를 봐야한다.
94123

0 commit comments

Comments
 (0)