๋…ผ๋ฌธ ๋งํฌ

๊ฐ•์ ๊ณผ ๋…์ฐฝ์„ฑ, ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๊ทธ๋ฆฌ๊ณ  ํ•œ๊ณ„

๋ฌผ์–ด๋ณธ ๊ฒƒ: ์ด ๋…ผ๋ฌธ์„ ์•„์ฃผ ์ž์„ธํ•˜๊ฒŒ ์ฝ๊ณ  ๋…ผ๋ฌธ์˜ ๊ฐ•์ ๊ณผ ๋…์ฐฝ์ ์ธ ์ง€์ ์„ ์„ค๋ช…ํ•ด์ฃผ๊ณ  ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์˜ˆ์‹œ ์ž…๋ ฅ์„ ๋“ค์–ด์„œ ์ „์ฒด์ ์ธ ๊ณผ์ •์„ ์„ค๋ช…ํ•ด์ค˜ ์ถ”๊ฐ€์ ์œผ๋กœ ๋…ผ๋ฌธ์˜ ํ•œ๊ณ„์ ์— ๋Œ€ํ•ด์„œ๋„ ์•Œ๋ ค์ค˜

๐Ÿ“Œ ๋…ผ๋ฌธ ์š”์•ฝ ๋ฐ ๋ถ„์„ (FlexAttention: A Programming Model for Generating Optimized Attention Kernels)


โœ… ๋…ผ๋ฌธ์˜ ๊ฐ•์  ๋ฐ ๋…์ฐฝ์ ์ธ ์ง€์ 

  1. ์œ ์—ฐ์„ฑ (Flexibility)

    • ๊ธฐ์กด์˜ FlashAttention๊ณผ ๋‹ฌ๋ฆฌ, FlexAttention์€ ๋‹ค์–‘ํ•œ attention variants๋ฅผ ๊ฐ„๋‹จํ•œ PyTorch ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ.
    • ๋‹ค์–‘ํ•œ attention ๋ฐฉ์‹ (e.g., Alibi, Document Masking, Sliding Window, PrefixLM, PagedAttention ๋“ฑ)์„ ์†์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•˜๊ณ  ์กฐํ•ฉ ๊ฐ€๋Šฅ.
    • ์ƒˆ๋กœ์šด attention ๋ฐฉ์‹์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ปค์Šคํ…€ ์ปค๋„์„ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด ๊ฐ„๋‹จํžˆ ์ˆ˜์ • ๊ฐ€๋Šฅ.
  2. ์„ฑ๋Šฅ ๊ฐœ์„  (Performance Improvement)

    • FlashAttention ๋Œ€๋น„ ์ตœ๋Œ€ 1.43๋ฐฐ ํ–ฅ์ƒ๋œ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ํŠนํžˆ ์ง€์›๋˜์ง€ ์•Š๋Š” attention variants์— ๋Œ€ํ•ด์„œ๋Š” ์ตœ๋Œ€ 8๋ฐฐ๊นŒ์ง€ ๋น ๋ฅด๊ฒŒ ๋™์ž‘.
    • Inference ์„ฑ๋Šฅ์—์„œ ๊ธฐ์กด FlashAttention ๋Œ€๋น„ 1.45๋ฐฐ์˜ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์คŒ.
  3. Paged Attention ์ง€์›

    • ๊ธฐ์กด์˜ PagedAttention ๋ฐฉ์‹์˜ ๋†’์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ํ•ด๊ฒฐํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ attention variants๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ.
    • GPU ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ„์ ‘ ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์ ํ™”ํ•˜๊ณ , ์ปค๋„์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•จ.
  4. Block Sparsity ํ™œ์šฉ

    • Sparsity๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด BlockMask๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋„์ž….
    • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ด๊ณ  ์—ฐ์‚ฐ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ๊ธฐ์—ฌํ•˜๋ฉฐ, ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ด.

๐Ÿ” ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช… (์˜ˆ์‹œ ํฌํ•จ)

๊ธฐ์กด Attention Mechanism

  • Self-Attention์˜ ๊ธฐ๋ณธ ๊ณต์‹: \[ S = \text{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right) \] \[ \text{Attention}(Q, K, V) = SV \]

FlexAttention์˜ ๋ณ€ํ™”

  • ๊ธฐ์กด Attention ๋ฐฉ์‹์˜ score matrix \( S \)๋ฅผ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ.

    \[ \text{FlexAttention}(Q, K, V) = \text{softmax} \left( \text{mod} \left( \frac{QK^T}{\sqrt{d_k}} \right) \right) V \]
  • Score matrix์— ๋‘ ๊ฐ€์ง€ modification ๋ฐฉ์‹์„ ์ถ”๊ฐ€:

    • score mod: ์ ์ˆ˜ ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ํ•จ์ˆ˜.
    • mask mod: ํŠน์ • ์œ„์น˜๋ฅผ -โˆž๋กœ ์„ค์ •ํ•˜๋Š” ํ•จ์ˆ˜.

์˜ˆ์‹œ: Sliding Window Attention ๊ตฌํ˜„

PYTHON
def sliding_window_mask(q_idx, kv_idx, window_size):
    return abs(q_idx - kv_idx) <= window_size
  • ์ด ํ•จ์ˆ˜๋Š” Query์™€ Key๊ฐ€ ํŠน์ • ์œˆ๋„์šฐ ํฌ๊ธฐ ์•ˆ์— ์žˆ์„ ๋•Œ๋งŒ Attention์„ ํ—ˆ์šฉํ•œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, \( \text{window\_size} = 3 \)์ผ ๊ฒฝ์šฐ, Query index๊ฐ€ 5์ผ ๋•Œ Key index๋Š” [2, 3, 4, 5, 6, 7, 8] ๋ฒ”์œ„ ๋‚ด์˜ ๊ฐ’๋“ค๋งŒ์„ ํ—ˆ์šฉ.

์˜ˆ์‹œ: Alibi Bias ๊ตฌํ˜„

PYTHON
def alibi_bias(score, q_idx, kv_idx, head_idx, bias_factor):
    return score + bias_factor * (q_idx - kv_idx)
  • Query์™€ Key์˜ ์ƒ๋Œ€์ ์ธ ์œ„์น˜์— ๋”ฐ๋ผ ๊ฐ€์ค‘์น˜๋ฅผ ์กฐ์ •ํ•˜์—ฌ ๋ฉ€๋ฆฌ ์žˆ๋Š” Token์„ ๋” ์ ๊ฒŒ ๋ฐ˜์˜ํ•˜๋„๋ก ํ•จ.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, \( \text{bias\_factor} = 0.5 \)์ผ ๋•Œ, Query index๊ฐ€ 10์ด๊ณ  Key index๊ฐ€ 5๋ผ๋ฉด, score๋Š” \( 0.5 \times (10 - 5) = 2.5 \) ๋งŒํผ ์ฆ๊ฐ€.

โŒ ๋…ผ๋ฌธ์˜ ํ•œ๊ณ„์ 

  1. ํŠน์ • Attention Variant์— ๋Œ€ํ•œ ์ตœ์ ํ™” ๋ถ€์žฌ

    • ์ผ๋ถ€ Attention Variant (์˜ˆ: Neighborhood Attention)์— ๋Œ€ํ•ด์„œ๋Š” ์™„์ „ํ•œ ์ตœ์ ํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜์Œ.
    • ํŠนํžˆ, NA์˜ ๊ฒฝ์šฐ ๊ธฐ์กด ์ปค๋„๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋„ ์กด์žฌ.
  2. ๊ณ ์ •๋œ Block Size

    • Block Sparsity Optimization์˜ ๊ฒฝ์šฐ, ๋ธ”๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ์ตœ๋Œ€ํ™”ํ•˜์ง€ ๋ชปํ•จ.
    • ํŠนํžˆ ๊ธด ๋ฌธ์žฅ์ด๋‚˜ ๋ณต์žกํ•œ Mask ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋Š” ์ถ”๊ฐ€์ ์ธ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”.
  3. Inference ๊ณผ์ •์˜ ์ œ์•ฝ

    • ์ผ๋ถ€ Attention Variant๋Š” inference ์‹œ์ ์—์„œ ๋™์ž‘ ๋ฐฉ์‹์ด ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์œ„ํ•œ ์ž๋™ ๋ณ€ํ™˜ ๊ธฐ๋Šฅ์ด ๋ฏธํกํ•  ์ˆ˜ ์žˆ์Œ.

๐Ÿ“Š FlashAttention๊ณผ FlexAttention ๋น„๊ต

ํŠน์ง•FlashAttentionFlexAttention
์œ ์—ฐ์„ฑ์ œํ•œ์  (์ง€์›๋˜๋Š” ์ปค๋„๋งŒ ๊ฐ€๋Šฅ)๋งค์šฐ ์œ ์—ฐ (๊ฐ„๋‹จํ•œ PyTorch ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ)
์„ฑ๋Šฅ๋›ฐ์–ด๋‚จFlashAttention๊ณผ ๋น„์Šทํ•˜๊ฑฐ๋‚˜ ๋” ๋‚˜์Œ (1.43๋ฐฐ ํ–ฅ์ƒ)
์ƒˆ๋กœ์šด Attention ๋ฐฉ์‹ ์ง€์›์ œํ•œ์ ์ž์œ ๋กญ๊ฒŒ ์ถ”๊ฐ€ ๋ฐ ์กฐํ•ฉ ๊ฐ€๋Šฅ
Block Sparsity ํ™œ์šฉ๋ถ€๋ถ„์  ํ™œ์šฉ์™„์ „ ํ™œ์šฉ (BlockMask ๋„์ž…)
Paged Attention ์ง€์›์ œํ•œ์ ๊ฐ„์ ‘ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ํšจ์œจ์  ์ง€์›

FlexAttention์€ ๊ธฐ์กด FlashAttention์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๋ฉฐ, ์œ ์—ฐ์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋™์‹œ์— ์ œ๊ณตํ•˜๋Š” ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ Attention ๋ฐฉ์‹์˜ ์กฐํ•ฉ๊ณผ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ๋” ๋งŽ์€ ์‘์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํŠนํžˆ ์—ฐ๊ตฌ์ž๊ฐ€ ์ƒˆ๋กœ์šด Attention ๋ฐฉ์‹์„ ํƒ๊ตฌํ•˜๋Š” ๋ฐ ์žˆ์–ด ์ค‘์š”ํ•œ ๋„๊ตฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์˜ˆ์‹œ๋กœ ๋”ฐ๋ผ๊ฐ€๊ธฐ

๋ฌผ์–ด๋ณธ ๊ฒƒ: ๋…ผ๋ฌธ์˜ ํ•ต์‹ฌ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ์•„์ฃผ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ๊ณ  ์ •๋ฆฌํ•ด ์ค˜

๐Ÿ”‘ ๋…ผ๋ฌธ์˜ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜: FlexAttention

FlexAttention์€ ๋‹ค์–‘ํ•œ Attention Variant๋ฅผ ์†์‰ฝ๊ฒŒ ์ •์˜ํ•˜๊ณ  ์ตœ์ ํ™”๋œ ์ปค๋„๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ๊ธฐ์กด์˜ Attention ์—ฐ์‚ฐ์„ ๋‘ ๊ฐ€์ง€ ๊ฐœ๋…์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌ์„ฑ ์š”์†Œ

  1. Score Modification (score_mod)
  2. Mask Modification (mask_mod)
  3. Block Mask Optimization
  4. Template-based Kernel Generation

๐Ÿ“Œ 1. Score Modification (score_mod)

score_mod๋Š” Attention ์ ์ˆ˜๋ฅผ ์กฐ์ •ํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ๊ธฐ์กด์˜ ์ ์ˆ˜ ํ–‰๋ ฌ์— ์ถ”๊ฐ€์ ์ธ ์ˆ˜์ • ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… ์˜ˆ์‹œ: Alibi Bias ์ ์šฉ
  • ๋ฌธ์ œ ์ •์˜: ๋ชจ๋ธ์ด ๊ธด ๋ฌธ์žฅ์„ ์ž˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก, Query์™€ Key์˜ ๊ฑฐ๋ฆฌ ์ฐจ์ด์— ๋น„๋ก€ํ•˜์—ฌ ์ ์ˆ˜๋ฅผ ์กฐ์ •.

  • ๊ณต์‹:

    \[ \text{Modified Score} = \text{Original Score} + \text{bias\_factor} \times (\text{q\_idx} - \text{kv\_idx}) \]
  • ์ฝ”๋“œ ๊ตฌํ˜„:

    PYTHON
    def alibi_bias(score, q_idx, kv_idx, head_idx, bias_factor=0.5):
        return score + bias_factor * (q_idx - kv_idx)
  • ์˜ˆ์‹œ ์ž…๋ ฅ ๊ฐ’:

    PLAINTEXT
    Original Score Matrix (S):
    [[1.0, 0.8, 0.5],
     [0.9, 1.0, 0.7],
     [0.6, 0.7, 1.0]]
    q_idx = 2, kv_idx = 0, head_idx = 0, bias_factor = 0.5
  • ์ถœ๋ ฅ ๊ฐ’ (์ˆ˜์ •๋œ ์ ์ˆ˜ ํ–‰๋ ฌ):

    PLAINTEXT
    Modified Score Matrix (S'):
    [[1.0, 0.8, 0.5],
     [1.4, 1.0, 0.7],
     [1.6, 1.7, 1.0]]

    -> \( (q\_idx - kv\_idx) = 2 \), ๋”ฐ๋ผ์„œ \( \text{bias} = 0.5 \times 2 = 1.0 \).


๐Ÿ“Œ 2. Mask Modification (mask_mod)

mask_mod๋Š” Attention ์ ์ˆ˜๋ฅผ ๋งˆ์Šคํ‚นํ•˜์—ฌ ํŠน์ • ์œ„์น˜์˜ ์—ฐ์‚ฐ์„ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

โœ… ์˜ˆ์‹œ: Sliding Window Mask
  • ๋ฌธ์ œ ์ •์˜: Query๊ฐ€ Key์˜ ์ผ์ • ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ Attention์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œ.

  • ๊ณต์‹:

    \[ \text{mask\_mod}(q\_idx, kv\_idx) = \begin{cases} \text{True} & \text{if } |q\_idx - kv\_idx| \leq \text{window\_size} \\ \text{False} & \text{otherwise} \end{cases} \]
  • ์ฝ”๋“œ ๊ตฌํ˜„:

    PYTHON
    def sliding_window_mask(q_idx, kv_idx, window_size=3):
        return abs(q_idx - kv_idx) <= window_size
  • ์˜ˆ์‹œ ์ž…๋ ฅ ๊ฐ’:

    PLAINTEXT
    q_idx = 5
    Key Indices = [2, 3, 4, 5, 6, 7, 8]
    window_size = 3
  • ์ถœ๋ ฅ ๊ฐ’:

    PLAINTEXT
    Masked Keys = [4, 5, 6]

    -> Query index๊ฐ€ 5์ผ ๋•Œ, Key index๋Š” 2~8 ์‚ฌ์ด์—์„œ 4, 5, 6 ๋งŒ ํ—ˆ์šฉ๋จ.


๐Ÿ“Œ 3. Block Mask Optimization

Block Sparsity๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์—ฐ์‚ฐ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. Mask๋ฅผ ์ ์šฉํ•  ๋•Œ ๋ธ”๋ก ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์ค„์ด๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

โœ… ํ•ต์‹ฌ ์•„์ด๋””์–ด:
  • Attention ์—ฐ์‚ฐ์„ ๋ธ”๋ก ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์—ฐ์‚ฐ.
  • ์™„์ „ํžˆ ๋งˆ์Šคํ‚น๋œ ๋ธ”๋ก์€ ์—ฐ์‚ฐํ•˜์ง€ ์•Š๊ณ  ๊ฑด๋„ˆ๋œ€.
  • ๋ถ€๋ถ„์ ์œผ๋กœ ๋งˆ์Šคํ‚น๋œ ๋ธ”๋ก์€ Masking ์—ฐ์‚ฐ๋งŒ ์ˆ˜ํ–‰.
โœ… ์˜ˆ์‹œ: Sliding Window Attention์˜ Block Mask ์ ์šฉ
  • ์ž…๋ ฅ ํ–‰๋ ฌ:

    PLAINTEXT
    Q_LEN = 6, KV_LEN = 6
    Block Size = 2 x 2
    Sliding Window Size = 1
  • ๋ธ”๋ก ๊ตฌ์„ฑ:

    PLAINTEXT
    ๋ธ”๋ก 1: Q[0:2], K[0:2]
    ๋ธ”๋ก 2: Q[0:2], K[2:4]
    ๋ธ”๋ก 3: Q[0:2], K[4:6]
    ๋ธ”๋ก 4: Q[2:4], K[0:2]
    ๋ธ”๋ก 5: Q[2:4], K[2:4]
    ๋ธ”๋ก 6: Q[2:4], K[4:6]
  • ๋งˆ์Šคํ‚น ์ ์šฉ ๊ฒฐ๊ณผ:

    PLAINTEXT
    Block 1: Computed
    Block 2: Computed
    Block 3: Ignored (Fully Masked)
    Block 4: Ignored (Fully Masked)
    Block 5: Computed
    Block 6: Computed

    -> ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์ค„์—ฌ ์—ฐ์‚ฐ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”.


๐Ÿ“Œ 4. Template-based Kernel Generation

PyTorch์˜ torch.compile์„ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ score_mod์™€ mask_mod๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ์ตœ์ ํ™”๋œ ์ปค๋„๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ณผ์ •:
    1. PyTorch ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ์ž ์ •์˜ ๋ชจ๋ธ ์ž‘์„ฑ (์˜ˆ: Alibi Bias, Sliding Window Mask).
    2. torch.compile()์„ ์ด์šฉํ•˜์—ฌ ์—ฐ์‚ฐ ๊ทธ๋ž˜ํ”„ ์ถ”์ถœ.
    3. Triton ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ GPU์—์„œ ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์ฝ”๋“œ ์ƒ์„ฑ.
    4. ์ปค๋„์„ PyTorch API์— ํ†ตํ•ฉํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

๐Ÿ“Š ์ •๋ฆฌ

ํŠน์ง•์„ค๋ช…๊ตฌํ˜„ ๋ฐฉ์‹
score_modAttention ์ ์ˆ˜๋ฅผ ์กฐ์ •ํ•˜๋Š” ํ•จ์ˆ˜์˜ˆ: Alibi Bias
mask_modํŠน์ • ์œ„์น˜์˜ ์ ์ˆ˜๋ฅผ ๋งˆ์Šคํ‚นํ•˜์—ฌ ๋ฌด์‹œ์˜ˆ: Sliding Window Mask
Block Mask Optimization๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ค„์ด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์—ฐ์‚ฐ๋ธ”๋ก ๋‹จ์œ„๋กœ ๊ณ„์‚ฐ
Kernel GenerationPyTorch์™€ Triton์„ ์ด์šฉํ•œ ์ปค๋„ ์ตœ์ ํ™”torch.compile() ์‚ฌ์šฉ

์‹คํ—˜ ๊ฒฐ๊ณผ์™€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋ก ๊ณผ์˜ ์ฐจ์ด

๋ฌผ์–ด๋ณธ ๊ฒƒ: ์ด ๋…ผ๋ฌธ์—์„œ ์ œ์‹œํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ž์„ธํ•˜๊ฒŒ ๋ณด๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋ก ์— ๋น„ํ•˜์—ฌ ํŠน์ถœ๋‚œ ์ ๊ณผ ๋…ผ๋ฌธ์—์„œ ์ œ๊ธฐํ•˜๋Š” ์–ด๋– ํ•œ ๋ฐฉ๋ฒ•์ด ์ด๋Ÿฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๊ฒŒ ๋˜์—ˆ๋Š”์ง€ ๋…ผ๋ฌธ์—์„œ ์ œ์‹œํ•˜๋Š” ์ด์œ ์™€ ๋„ˆ์˜ ์ƒ๊ฐ์„ ์•Œ๋ ค์ค˜

๐Ÿ” ๋…ผ๋ฌธ์—์„œ ์ œ์‹œํ•œ ๊ฒฐ๊ณผ (Evaluation)

๋…ผ๋ฌธ์—์„œ๋Š” FlexAttention์˜ ์„ฑ๋Šฅ์„ 7๊ฐœ์˜ ์ฃผ์š” Attention Variant์— ๋Œ€ํ•ด ๋‹ค์–‘ํ•œ ์ธก๋ฉด์—์„œ ํ‰๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๊ธฐ์กด FlashAttention (FAv2, FAv3), PyTorch์˜ Scale Dot Product Attention (SDPA)๊ณผ ๋น„๊ตํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Š 1. Attention Kernel Performance (Attention Kernel ์„ฑ๋Šฅ)

โœ… ํ‰๊ฐ€ ๋Œ€์ƒ Attention Variants
  • Noop: ๊ธฐ๋ณธ Attention (๋ณ€ํ˜• ์—†์Œ)
  • Causal: ๊ธฐ์กด์˜ Causal Masking (์ด์ „ Token์—๋งŒ Attention)
  • Alibi Bias: ์ƒ๋Œ€์  ์œ„์น˜ ๊ธฐ๋ฐ˜ Bias๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” Attention
  • Sliding Window: ์ผ์ • ๋ฒ”์œ„ ๋‚ด์˜ Token๋งŒ Attention
  • PrefixLM: ์ผ๋ถ€ Token์€ Bidirectional, ์ดํ›„๋Š” Causal๋กœ ๊ตฌ์„ฑ
  • Soft Cap: Logits์˜ ์„ฑ์žฅ์„ ์ œํ•œํ•˜๋Š” ๋ฐฉ์‹ (tanh ํ•จ์ˆ˜ ์‚ฌ์šฉ)
  • Document Masking: ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌธ์„œ์˜ Token์„ ๊ตฌ๋ถ„ํ•˜์—ฌ Attention
โœ… ์„ฑ๋Šฅ ๊ฒฐ๊ณผ
๋ชจ๋ธ์†๋„ (FAv2 ๋Œ€๋น„)์†๋„ (FAv3 ๋Œ€๋น„)์†๋„ (FAKV ๋Œ€๋น„)ํŠน์ด์ 
Noop (๊ธฐ๋ณธ)1.00x - 1.22x1.43x1.45x๊ธฐ์กด ๋ฐฉ๋ฒ•๋ก ๊ณผ ์œ ์‚ฌ
Causal1.00x - 1.22x1.43x1.45x๊ธฐ์กด ๋ฐฉ๋ฒ•๋ก ๊ณผ ์œ ์‚ฌ
Alibi Bias1.43x1.45x5.37xFAKV์˜ ๊ฒฝ์šฐ ์ตœ์ ํ™” ๋ถ€์žฌ๋กœ FlexAttention์ด ์••๋„์ ์œผ๋กœ ๋น ๋ฆ„
Sliding Window1.43x1.45x1.45x๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋›ฐ์–ด๋‚จ
PrefixLM1.43x1.45x1.45x๊ธฐ์กด ๋ฐฉ๋ฒ•๋ก  ๋Œ€๋น„ ๋” ๋†’์€ ์œ ์—ฐ์„ฑ
Soft Cap1.43x1.45x1.45xํŠน์ • ํ™˜๊ฒฝ์—์„œ ๋” ์šฐ์ˆ˜
Document Masking1.43x1.45x1.45x๋‹ค์–‘ํ•œ Mask ์ง€์› ๊ฐ€๋Šฅ

๐Ÿ“Š 2. End-to-end Performance (Inference & Training Performance)

โœ… Inference Performance (GPT-Fast, LLaMa3.1 ๋ชจ๋ธ)
  • FlexAttention์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด SDPA ๋Œ€๋น„ 1.22x - 2.04x์˜ ์†๋„ ํ–ฅ์ƒ์„ ๋‹ฌ์„ฑ.
  • ๊ธด ๋ฌธ์žฅ์ผ์ˆ˜๋ก ์„ฑ๋Šฅ ๊ฐœ์„ ์ด ๋” ๋‘๋“œ๋Ÿฌ์ง (ํŠนํžˆ 70B ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ ์ตœ๋Œ€ 1.66x ํ–ฅ์ƒ).
โœ… Training Performance (Torchtune, LLaMa3 ๋ชจ๋ธ)
  • ๋‹ค์–‘ํ•œ ์‹œํ€€์Šค ๊ธธ์ด์— ๋Œ€ํ•ด 2.4x๊นŒ์ง€ ์„ฑ๋Šฅ ํ–ฅ์ƒ.
  • ๊ธฐ์กด SDPA ๋Œ€๋น„ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์ค„์ด๊ณ  ์—ฐ์‚ฐ ํšจ์œจ์„ฑ์„ ๋†’์ž„.
  • ๋ฌธ์„œ ๋‹จ์œ„ Masking์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ๋†’์€ ํ•™์Šต ์†๋„๋ฅผ ๋ณด์—ฌ์คŒ.

๐Ÿ“Š 3. Paged Attention Performance

โœ… PagedAttention ํ™œ์šฉ ๊ฒฐ๊ณผ
  • FlexAttention์€ ๊ธฐ์กด FlashAttention๋ณด๋‹ค Paged Attention์„ ๋” ํšจ๊ณผ์ ์œผ๋กœ ์ง€์›ํ•จ.
  • Paged Attention ๋„์ž… ์‹œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๊ฑฐ์˜ ์—†๊ณ  ์˜คํžˆ๋ ค ํŠน์ • ์ƒํ™ฉ์—์„œ๋Š” ๋” ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์คŒ.
  • ๊ธฐ์กด FlashAttention ๊ธฐ๋ฐ˜์˜ PagedAttention์€ 20~26%์˜ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์ง€๋งŒ, FlexAttention์—์„œ๋Š” 1% ๋ฏธ๋งŒ์˜ ์„ฑ๋Šฅ ์ €ํ•˜๋งŒ ๋ฐœ์ƒํ•จ.

๐Ÿ’ก FlexAttention์ด ๋” ๋›ฐ์–ด๋‚œ ์ด์œ ์™€ ๋ฐฉ๋ฒ•๋ก  (๋…ผ๋ฌธ์—์„œ ์ œ์‹œํ•˜๋Š” ์ด์œ )

โœ… 1. Unified Programming Model (ํ†ตํ•ฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ)
  • ๊ธฐ์กด FlashAttention์€ ํŠน์ • Attention Variant๋งŒ์„ ์ง€์›ํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ๋ณ€ํ˜•์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋„์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•จ.
  • FlexAttention์€ score_mod์™€ mask_mod์˜ ๋‘ ๊ฐ€์ง€ ํ•จ์ˆ˜๋กœ ๋ชจ๋“  Attention Variant๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์–ด ์œ ์—ฐ์„ฑ์ด ๋›ฐ์–ด๋‚จ.
  • ํŠนํžˆ, ๋‹ค์–‘ํ•œ Attention Variant๋ฅผ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ (Logical Fusion)์ด ๊ฐ•์ ์œผ๋กœ ์ž‘์šฉํ•จ.
โœ… 2. Block Mask Optimization (๋ธ”๋ก ๋งˆ์Šคํ‚น ์ตœ์ ํ™”)
  • Block Masking์„ ๋„์ž…ํ•˜์—ฌ, ๋ชจ๋“  Token์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๋Š” ๋Œ€์‹  ๋ธ”๋ก ๋‹จ์œ„๋กœ Masking์„ ์ ์šฉํ•จ.
  • ์™„์ „ํžˆ Masked๋œ ๋ธ”๋ก์€ ์—ฐ์‚ฐํ•˜์ง€ ์•Š๊ณ  ๊ฑด๋„ˆ๋›ฐ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ด๊ณ  ์†๋„๋ฅผ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ด.
  • ๋ถ€๋ถ„์ ์œผ๋กœ Masked๋œ ๋ธ”๋ก๋„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ถ”๊ฐ€์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๋‹ฌ์„ฑ.
โœ… 3. Template-based Kernel Generation (ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜ ์ปค๋„ ์ƒ์„ฑ)
  • PyTorch์˜ torch.compile()์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ score_mod์™€ mask_mod๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ตœ์ ํ™”.
  • ์ปค๋„ ์ฝ”๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ, ๋‹ค์–‘ํ•œ Variant์— ๋Œ€ํ•œ ์ตœ์ ํ™”๊ฐ€ ์‰ฝ๊ฒŒ ์ด๋ฃจ์–ด์ง.

๐Ÿค” ๋‚˜์˜ ์ƒ๊ฐ (์™œ FlexAttention์ด ๋›ฐ์–ด๋‚œ๊ฐ€?)

FlexAttention์˜ ๊ฐ•์ ์€ ์œ ์—ฐ์„ฑ๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ๋™์‹œ์— ๋‹ฌ์„ฑํ•œ ์ ์ž…๋‹ˆ๋‹ค.

  1. ๊ธฐ์กด์˜ FlashAttention์€ ๊ณ ์ •๋œ Attention Kernel์— ์˜์กดํ•˜์—ฌ ํŠน์ • Attention Variant๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ FlexAttention์€ ์‚ฌ์šฉ์ž ์ •์˜ ์—ฐ์‚ฐ (score_mod, mask_mod)์„ ํ†ตํ•ด ๊ฐ„๋‹จํžˆ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ํŠนํžˆ, ๋‹ค์–‘ํ•œ Variant์˜ ์กฐํ•ฉ์„ ์ง€์›ํ•˜๋Š” Logical Fusion ๊ธฐ๋Šฅ์€ ๊ธฐ์กด ๋ฐฉ๋ฒ•๋ก ์—์„œ๋Š” ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋˜ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

  3. FlexAttention์ด ๊ธฐ์กด FlashAttention ๋Œ€๋น„ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚œ ์ด์œ ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

    • Block Masking์„ ํ†ตํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”: ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์ค„์ด๊ณ , ์—ฐ์‚ฐ์„ ํ•„์š”ํ•  ๋•Œ๋งŒ ์ˆ˜ํ–‰ํ•˜์—ฌ ์†๋„ ํ–ฅ์ƒ.
    • Template-based Kernel Generation: PyTorch์˜ ๋™์  ์ปดํŒŒ์ผ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ Variant์— ์ตœ์ ํ™”๋œ ์ปค๋„์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑ.
  4. ํŠนํžˆ Paged Attention ๋ฐฉ์‹์˜ ์ง€์›์—์„œ FlexAttention์ด ๋ณด์—ฌ์ค€ ์„ฑ๋Šฅ์€ ์ธ์ƒ์ ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฐฉ๋ฒ•๋ก ์€ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์ปธ์ง€๋งŒ, FlexAttention์€ ์ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ๊ฑฐ์˜ ์„ฑ๋Šฅ ์†์‹ค ์—†์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿš€ ์ •๋ฆฌ

FlexAttention์€ ๋‹ค์–‘ํ•œ Attention ๋ณ€ํ˜•์„ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ์ตœ์ ํ™”๋œ ์ปค๋„์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์ƒˆ๋กœ์šด ์ ‘๊ทผ๋ฒ•์ž…๋‹ˆ๋‹ค. Block Mask Optimization๊ณผ Paged Attention ์ง€์›์€ ํŠนํžˆ ์ฃผ๋ชฉํ•  ๋งŒํ•œ ๊ฐœ์„  ์‚ฌํ•ญ์ด๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค์ด ๊ธฐ์กด FlashAttention ๋Œ€๋น„ ๋†’์€ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ํ•ต์‹ฌ ์ด์œ ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๋ถ„์„์ด๋‚˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋ก ๊ณผ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•˜์‹œ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”! ๐Ÿ˜Š

์‹ค์ œ๋กœ ์ ์šฉํ•˜๋ ค๋ฉด: ์ถ”๊ฐ€ ๊ตฌํ˜„๊ณผ ์ž์› ์‚ฐ์ •

๋ฌผ์–ด๋ณธ ๊ฒƒ: ์ด ๋…ผ๋ฌธ์—์„œ ์ œ์‹œ๋œ ๋ฐฉ๋ฒ•์„ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ธฐ์กด ๋ฐฉ๋ฒ•์—์„œ ์–ด๋– ํ•œ ๊ตฌํ˜„์ด ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•˜๊ณ  ์ด๋Ÿฌํ•œ ๊ตฌํ˜„์— ์†Œ๋ชจ๋˜๋Š” ๊ณต์ˆ˜ ๋ฐ ์—ฐ์‚ฐ์— ํ•„์š”ํ•œ ์ปดํ“จํŒ… ์ž์›์˜ ํฌ๊ธฐ์— ๋Œ€ํ•ด์„œ ๊ณ„์‚ฐํ•ด์ค„ ์ˆ˜ ์žˆ๊ฒ ๋‹ˆ?

โœ… FlexAttention์„ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ๋ฐฉ๋ฒ•์—์„œ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ตฌํ˜„๊ณผ ๋น„์šฉ ๋ถ„์„


๐Ÿ“Œ 1. ๊ธฐ์กด ๋ฐฉ๋ฒ•๊ณผ FlexAttention์˜ ์ฐจ์ด์ 

๊ธฐ์กด ๋ฐฉ๋ฒ• (FlashAttention v2, v3)

  • ๊ณ ์ •๋œ Kernel ๊ตฌ์กฐ๋กœ ์ œ๊ณต.
  • ํŠน์ • Attention Variants (e.g., Noop, Causal, Alibi) ๋งŒ ์ง€์›.
  • ์ƒˆ๋กœ์šด Variant ์ถ”๊ฐ€๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ปค๋„ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ • ํ•„์š”.
  • ๊ธฐ์กด ์ปค๋„์€ PyTorch์˜ torch.compile()๊ณผ ๊ฐ™์€ ์ตœ์ ํ™” ๊ธฐ๋Šฅ์„ ์ถฉ๋ถ„ํžˆ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•จ.

๐Ÿ“Œ 2. FlexAttention์—์„œ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ตฌํ˜„

(1) ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜ ์ž‘์„ฑ (score_mod, mask_mod)

  • FlexAttention์—์„œ ์ƒˆ๋กœ์šด Attention Variant๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ score_mod์™€ mask_mod ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•จ.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, Sliding Window Mask์˜ ๊ฒฝ์šฐ:
    PYTHON
    def sliding_window_mask(q_idx, kv_idx, window_size=3):
        return abs(q_idx - kv_idx) <= window_size
  • ์ƒˆ๋กœ์šด Variant๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ, ์ด ๋‘ ๊ฐ€์ง€ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ๊ตฌํ˜„ ๊ฐ€๋Šฅ.

(2) Kernel Compilation (torch.compile ์‚ฌ์šฉ)

  • PyTorch์˜ torch.compile()์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑ๋œ ํ•จ์ˆ˜๋ฅผ ์ตœ์ ํ™”๋œ ์ปค๋„๋กœ ๋ณ€ํ™˜.
  • ์ด ๊ณผ์ •์—์„œ PyTorch๊ฐ€ ๊ธฐ์กด ์ปค๋„์„ ํŠธ๋žœ์ŠคํŒŒ์ผ๋งํ•˜์—ฌ GPU์— ์ ํ•ฉํ•œ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜.
  • ์˜ˆ์‹œ ์ฝ”๋“œ:
    PYTHON
    import torch
    from torch import nn
    
    class FlexAttention(nn.Module):
        def __init__(self, score_mod, mask_mod):
            super().__init__()
            self.score_mod = score_mod
            self.mask_mod = mask_mod
    
        def forward(self, Q, K, V):
            S = torch.matmul(Q, K.transpose(-2, -1)) / (Q.size(-1) ** 0.5)
            S = self.score_mod(S)
            S = torch.softmax(S, dim=-1)
            return torch.matmul(S, V)
    
    model = FlexAttention(score_mod=sliding_window_mask, mask_mod=alibi_bias)
    compiled_model = torch.compile(model)

(3) Block Mask Optimization ๊ตฌํ˜„

  • FlexAttention์˜ ๊ฐ•์  ์ค‘ ํ•˜๋‚˜์ธ Block Mask Optimization์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด, BlockMask ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ํ™œ์šฉํ•ด์•ผ ํ•จ.
  • ์ผ๋ฐ˜์ ์œผ๋กœ PyTorch์—์„œ ์ œ๊ณตํ•˜๋Š” Tensor ์—ฐ์‚ฐ๊ณผ GPU ์—ฐ์‚ฐ์„ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„.

๐Ÿ“Œ 3. ๊ตฌํ˜„์— ํ•„์š”ํ•œ ๊ณต์ˆ˜ (Development Cost)

์ž‘์—…๋‚œ์ด๋„ (1~5)์˜ˆ์ƒ ์‹œ๊ฐ„ (์‹œ๊ฐ„)ํ•„์š” ์ž์›
score_mod / mask_mod ์ž‘์„ฑ21~2 ์‹œ๊ฐ„Python, PyTorch
Kernel Compilation ์„ค์ •32~3 ์‹œ๊ฐ„PyTorch, GPU ํ™˜๊ฒฝ
Block Mask Optimization ๊ตฌํ˜„44~6 ์‹œ๊ฐ„PyTorch, GPU ํ™˜๊ฒฝ
PagedAttention ์ ์šฉ43~5 ์‹œ๊ฐ„PyTorch, GPU ํ™˜๊ฒฝ
ํ…Œ์ŠคํŠธ ๋ฐ ๊ฒ€์ฆ32~4 ์‹œ๊ฐ„GPU ํ™˜๊ฒฝ
  • ์ด ์†Œ์š” ์‹œ๊ฐ„: ์•ฝ 12~20 ์‹œ๊ฐ„ (ํ•˜๋ฃจ์—์„œ ์ดํ‹€ ์ •๋„)

๐Ÿ“Œ 4. ์ปดํ“จํŒ… ์ž์› ์š”๊ตฌ๋Ÿ‰ ๋ถ„์„

(1) Kernel Compilation

  • torch.compile() ์‚ฌ์šฉ ์‹œ GPU์˜ ์ปดํ“จํŒ… ์ž์›์„ ํฌ๊ฒŒ ์†Œ๋ชจ.
  • GPU ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰: ์ปค๋„ ํฌ๊ธฐ์™€ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ์— ๋น„๋ก€ (๋ณดํ†ต 16GB ์ด์ƒ์˜ GPU ๊ถŒ์žฅ).
  • ์ฃผ์š” ์—ฐ์‚ฐ:
    • torch.compile()์˜ ์ปดํŒŒ์ผ ๋‹จ๊ณ„: CUDA ์ปค๋„ ์ƒ์„ฑ ๋ฐ ์ตœ์ ํ™”.
    • GPU ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ๋ฐ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„: Variant์˜ ํฌ๊ธฐ ๋ฐ Mask ๊ตฌ์กฐ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„.

(2) Training ๋ฐ Inference Performance ๋ถ„์„

  • FlexAttention์€ ๊ธฐ์กด FlashAttention ๋Œ€๋น„ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ด๊ณ  ์†๋„๋ฅผ ํฌ๊ฒŒ ๊ฐœ์„ .
  • ์‹ค์ œ ํ•™์Šต ๋ฐ ์ถ”๋ก  ์‹œ, GPU ์—ฐ์‚ฐ ์†๋„๋Š” ๊ธฐ์กด ๋Œ€๋น„ ์•ฝ 1.4๋ฐฐ ~ 2๋ฐฐ ํ–ฅ์ƒ.
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์€ Block Mask Optimization์„ ์ ์šฉํ•  ๊ฒฝ์šฐ, ๊ธฐ์กด ๋Œ€๋น„ ์ตœ๋Œ€ 50% ๊ฐ์†Œ ๊ฐ€๋Šฅ.

๐Ÿ“Š ๊ณ„์‚ฐ ์˜ˆ์‹œ: FlexAttention์„ ์ ์šฉํ•œ ๋ชจ๋ธ ํ•™์Šต

๋ชจ๋ธ๊ธฐ์กด FlashAttentionFlexAttention (์ถ”์ •)
GPU ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰24GB16GB
์—ฐ์‚ฐ ์†๋„ (TFLOPS)400560 (~1.4๋ฐฐ)
ํ•™์Šต ์‹œ๊ฐ„ (์‹œ๊ฐ„)107.2 (~1.4๋ฐฐ)

๐Ÿ’ก ์ •๋ฆฌ

  1. FlexAttention์„ ๊ธฐ์กด ๋ชจ๋ธ์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์„ ์ถ”๊ฐ€๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜ (score_mod, mask_mod) ์ž‘์„ฑ.
    • PyTorch torch.compile()์„ ํ™œ์šฉํ•œ ์ปค๋„ ์ตœ์ ํ™”.
    • Block Mask Optimization ๊ตฌํ˜„.
  2. ๊ฐœ๋ฐœ ๊ณต์ˆ˜๋Š” 12~20์‹œ๊ฐ„ ์ •๋„ ์†Œ์š”๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. (ํŠนํžˆ GPU ํ™˜๊ฒฝ์—์„œ์˜ ํ…Œ์ŠคํŠธ์™€ ์ตœ์ ํ™”๊ฐ€ ํ•ต์‹ฌ)

  3. ์ปดํ“จํŒ… ์ž์› ์š”๊ตฌ๋Ÿ‰์€ ๊ธฐ์กด FlashAttention ๋Œ€๋น„ GPU ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์€ ์ค„์–ด๋“ค๊ณ , ์—ฐ์‚ฐ ์†๋„๋Š” ์ตœ๋Œ€ 1.4๋ฐฐ ์ฆ๊ฐ€ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ ๋ฐ์ดํ„ฐ์™€ ์ถ”๋ก  ๊ณผ์ •, ๋ชจ๋ธ ๊ตฌ์กฐ์™€ ์ž์› ์š”๊ตฌ๋Ÿ‰

๋ฌผ์–ด๋ณธ ๊ฒƒ: ์ด ๋…ผ๋ฌธ์˜ ์ž…๋ ฅ๋ฐ์ดํ„ฐ์™€ ์ถ”๋ก  ๊ณผ์ •์— ๋Œ€ํ•ด์„œ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ์•„์ฃผ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•ด ์ฃผ๊ฒ ๋‹ˆ? ์ถ”๊ฐ€์ ์œผ๋กœ ๋ชจ๋ธ์•„ํ‚คํ…์ฒ˜์˜ ๊ตฌ์„ฑ ๋ฐ ๋ชจ๋ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ์—ฐ์‚ฐ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์š”๊ตฌ๋Ÿ‰ ์ปดํ“จํŒ… ์š”๊ตฌ๋Ÿ‰ ๋Œ€ํ•ด์„œ๋„ ์„ค๋ช…ํ•ด์ค˜

๐Ÿ” FlexAttention ๋…ผ๋ฌธ์˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ, ์ถ”๋ก  ๊ณผ์ •, ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ ๋ฐ ์š”๊ตฌ๋Ÿ‰ ๋ถ„์„


๐Ÿ“Œ 1. ์ž…๋ ฅ ๋ฐ์ดํ„ฐ (Input Data)

FlexAttention์€ ๊ธฐ์กด Transformer ๋ชจ๋ธ์˜ Self-Attention ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฐœ์„ ํ•˜๋Š” ๊ตฌ์กฐ๋กœ, ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋Š” Transformer ๋ชจ๋ธ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

โœ… ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ
  1. Query (Q)
  2. Key (K)
  3. Value (V)
โœ… ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ
  • \( Q \in \mathbb{R}^{B \times H \times Q\_LEN \times D} \)
  • \( K, V \in \mathbb{R}^{B \times H \times KV\_LEN \times D} \)
    • \( B \): ๋ฐฐ์น˜ ํฌ๊ธฐ (Batch Size)
    • \( H \): Attention Heads (๋ฉ€ํ‹ฐํ—ค๋“œ Attention์˜ ์ˆ˜)
    • \( Q\_LEN \): Query์˜ ๊ธธ์ด (ํ† ํฐ ์ˆ˜)
    • \( KV\_LEN \): Key/Value์˜ ๊ธธ์ด (ํ† ํฐ ์ˆ˜)
    • \( D \): ๊ฐ Token์˜ Embedding ์ฐจ์›
โœ… ์˜ˆ์‹œ ์ž…๋ ฅ ๊ฐ’
PYTHON
B = 2      # Batch Size (e.g., ๋ฌธ์„œ 2๊ฐœ)
H = 4      # Attention Heads (e.g., 4๊ฐœ๋กœ ๋ถ„ํ• )
Q_LEN = 8  # Query Length (e.g., 8๊ฐœ ํ† ํฐ)
KV_LEN = 10  # Key/Value Length (e.g., 10๊ฐœ ํ† ํฐ)
D = 64     # Embedding Dimension

Q = torch.randn(B, H, Q_LEN, D)
K = torch.randn(B, H, KV_LEN, D)
V = torch.randn(B, H, KV_LEN, D)

๐Ÿ“Œ 2. ์ถ”๋ก  ๊ณผ์ • (Inference Process)

FlexAttention์€ ๊ธฐ์กด Attention ์—ฐ์‚ฐ์„ ํ™•์žฅํ•˜์—ฌ, ์ปค์Šคํ…€ Masking ๋ฐ Score Modification ๊ธฐ๋Šฅ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ… Attention ์—ฐ์‚ฐ ๊ณผ์ • (๊ธฐ๋ณธ ํ˜•ํƒœ)
  1. Query-Key Similarity ๊ณ„์‚ฐ (Score Matrix \( S \))

    \[ S = \frac{Q K^T}{\sqrt{d_k}} \]
    • \( Q \in \mathbb{R}^{B \times H \times Q\_LEN \times D} \)
    • \( K \in \mathbb{R}^{B \times H \times KV\_LEN \times D} \)
    • \( S \in \mathbb{R}^{B \times H \times Q\_LEN \times KV\_LEN} \)
  2. Masking ์ ์šฉ (mask_mod)

    • ์˜ˆ: Sliding Window Mask
    PYTHON
    def sliding_window_mask(q_idx, kv_idx, window_size=3):
        return abs(q_idx - kv_idx) <= window_size
    • Sliding Window์˜ ๊ฒฝ์šฐ, ํŠน์ • ๋ฒ”์œ„ ์•ˆ์˜ Key๋งŒ์„ ๊ณ ๋ คํ•˜๋„๋ก Masking์„ ์ ์šฉ.
  3. Score Modification ์ ์šฉ (score_mod)

    • ์˜ˆ: Alibi Bias
    PYTHON
    def alibi_bias(score, q_idx, kv_idx, head_idx, bias_factor=0.5):
        return score + bias_factor * (q_idx - kv_idx)
  4. Softmax ์ ์šฉ

    \[ S' = \text{softmax}(S) \]
  5. Weighted Sum (Output ๊ณ„์‚ฐ)

    \[ \text{Output} = S' V \]

๐Ÿ“Œ 3. ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ (Model Architecture)

FlexAttention์€ ๊ธฐ์กด Self-Attention ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

โœ… ๊ตฌ์„ฑ ์š”์†Œ (Components)
  1. Input Embedding Layer
  2. Multi-Head Attention Layer (FlexAttention ์ ์šฉ)
  3. Feedforward Layer
  4. Residual Connection & Layer Normalization

๐Ÿ“Œ 4. ์—ฐ์‚ฐ ์š”๊ตฌ๋Ÿ‰ ๋ถ„์„ (Computational Cost)

FlexAttention์€ ๊ธฐ์กด FlashAttention ๋Œ€๋น„ ๋” ๋†’์€ ์—ฐ์‚ฐ ํšจ์œจ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์ถ”๊ฐ€์ ์œผ๋กœ Masking๊ณผ Score Modification ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

โœ… ์—ฐ์‚ฐ๋Ÿ‰ (FLOPs) ๊ณ„์‚ฐ)
  1. Query-Key Similarity ์—ฐ์‚ฐ

    \[ \text{FLOPs} = B \times H \times Q\_LEN \times KV\_LEN \times D \]
    • ์˜ˆ์‹œ: \( B = 2 \), \( H = 4 \), \( Q\_LEN = 8 \), \( KV\_LEN = 10 \), \( D = 64 \) \[ \text{FLOPs} = 2 \times 4 \times 8 \times 10 \times 64 = 40,960 \]
  2. Masking (mask_mod)

    • ๋‹จ์ˆœ ๋น„๊ต ์—ฐ์‚ฐ์ด๋ฏ€๋กœ ์ถ”๊ฐ€์ ์ธ FLOPs๋Š” ํฌ์ง€ ์•Š์Œ.
  3. Score Modification (score_mod)

    • ์˜ˆ๋ฅผ ๋“ค์–ด, Alibi Bias ์ ์šฉ ์‹œ ๊ฐ ์ ์ˆ˜๋งˆ๋‹ค ํ•œ ๋ฒˆ์˜ ๋ง์…ˆ ์—ฐ์‚ฐ์ด ํ•„์š”. \[ \text{FLOPs} = B \times H \times Q\_LEN \times KV\_LEN \] \[ \text{FLOPs} = 2 \times 4 \times 8 \times 10 = 640 \]
  4. Softmax ์—ฐ์‚ฐ

    \[ \text{FLOPs} \approx B \times H \times Q\_LEN \times KV\_LEN \times 2 \]
  5. Weighted Sum

    \[ \text{FLOPs} = B \times H \times Q\_LEN \times KV\_LEN \times D \]

๐Ÿ“Œ 5. ๋ฉ”๋ชจ๋ฆฌ ์š”๊ตฌ๋Ÿ‰ ๋ถ„์„ (Memory Requirements)

โœ… ๊ธฐ์กด ๋ชจ๋ธ๊ณผ์˜ ๋น„๊ต
๊ตฌ์„ฑ ์š”์†Œ๊ธฐ์กด ๋ชจ๋ธ (FlashAttention)FlexAttention (์ถ”์ •)
Score Matrix \( S \)\( B \times H \times Q\_LEN \times KV\_LEN \)๋™์ผ
Mask Matrix์—†์ŒBlock Mask๋กœ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ
Output Matrix\( B \times H \times Q\_LEN \times D \)๋™์ผ
์ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ธฐ๋ณธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ธฐ์กด ๋Œ€๋น„ ์•ฝ 20% ์ฆ๊ฐ€ (Block Mask)

๐Ÿ“Œ 6. ์ปดํ“จํŒ… ์š”๊ตฌ๋Ÿ‰ ๋ถ„์„ (Computational Requirements)

  • GPU ์š”๊ตฌ๋Ÿ‰: ์ตœ์†Œ 16GB ์ด์ƒ์˜ GPU ๊ถŒ์žฅ (ํŠนํžˆ, Block Mask Optimization ์‚ฌ์šฉ ์‹œ).
  • ์—ฐ์‚ฐ ์†๋„: ๊ธฐ์กด FlashAttention ๋Œ€๋น„ ์•ฝ 1.4๋ฐฐ ~ 2๋ฐฐ ์ฆ๊ฐ€.
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰: ๊ธฐ์กด ๋Œ€๋น„ ์ตœ๋Œ€ 20% ์ฆ๊ฐ€ ๊ฐ€๋Šฅ (Block Mask ์ ์šฉ ์‹œ).

๐Ÿ’ก ์ •๋ฆฌ

FlexAttention์˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์™€ ์ถ”๋ก  ๊ณผ์ •์€ ๊ธฐ์กด์˜ Self-Attention๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ, ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜ (score_mod, mask_mod)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์•ฝ๊ฐ„์˜ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๊ณผ ์—ฐ์‚ฐ๋Ÿ‰์ด ํ•„์š”ํ•˜์ง€๋งŒ, Block Mask Optimization ๋•๋ถ„์— ์ „์ฒด ์—ฐ์‚ฐ ํšจ์œจ์€ ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

ํ•œ๊ณ„๋ฅผ ๋„˜์œผ๋ ค๋Š” ์—ฐ๊ตฌ ํ๋ฆ„

๋ฌผ์–ด๋ณธ ๊ฒƒ: ์ด ๋…ผ๋ฌธ์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์–ด๋–ค ์—ฐ๊ตฌํ๋ฆ„์ด ์žˆ๋Š”์ง€ ์ •๋ฆฌํ•ด์„œ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•ด ์ค˜

๐Ÿ” FlexAttention ๋…ผ๋ฌธ์˜ ํ•œ๊ณ„์™€ ์ด๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ๊ตฌ ํ๋ฆ„

FlexAttention์€ ๋‹ค์–‘ํ•œ Attention Variants๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ํ•œ๊ณ„์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ์—ฐ๊ตฌ๋˜๊ณ  ์žˆ๋Š” ๋ฐฉํ–ฅ๋“ค์„ ์ •๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ 1. FlexAttention์˜ ํ•œ๊ณ„์ 

โœ… (1) ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€ (ํŠนํžˆ Block Mask ์‚ฌ์šฉ ์‹œ)
  • FlexAttention์˜ Block Mask Optimization์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์œผ๋‚˜, ์‹ค์ œ๋กœ๋Š” BlockMask ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŠนํžˆ, ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ์—์„œ ๊ธด ๋ฌธ์žฅ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ BlockMask๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โœ… (2) ํŠน์ • Attention Variant์˜ ์ตœ์ ํ™” ๋ถ€์กฑ
  • ์ผ๋ถ€ Attention Variant (ํŠนํžˆ, Neighborhood Attention ๋“ฑ)์—์„œ ์ตœ์ ํ™” ์ˆ˜์ค€์ด ๋‚ฎ์Œ.
  • FlexAttention์€ Mask ๋ฐ Score Modification์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ณ€ํ˜•์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ถ€ ๊ฒฝ์šฐ ๊ธฐ์กด ์ปค๋„๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โœ… (3) ์ปค๋„ ์ปดํŒŒ์ผ ๊ณผ์ •์˜ ์˜ค๋ฒ„ํ—ค๋“œ
  • PyTorch์˜ torch.compile()์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋„์„ ์ปดํŒŒ์ผํ•˜๋Š” ๊ณผ์ •์€ ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ ๋น„์šฉ์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค.
  • ํŠนํžˆ ์‹ค์‹œ๊ฐ„ ์ถ”๋ก  (inference) ํ™˜๊ฒฝ์—์„œ ์ปดํŒŒ์ผ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โœ… (4) Paged Attention์—์„œ์˜ ํ•œ๊ณ„
  • Paged Attention์„ ์ง€์›ํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํŒจํ„ด์ด ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • ํŠนํžˆ GPU์˜ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ 2. ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ๊ตฌ ํ๋ฆ„

FlexAttention์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ๊ตฌ ํ๋ฆ„์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”‘ (1) Block Mask Optimization์˜ ๊ฐœ์„ 
โœ… ์—ฐ๊ตฌ ํ๋ฆ„
  • ํ˜„์žฌ FlexAttention์€ BlockMask๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ธ”๋ก ๋‹จ์œ„๋กœ ์—ฐ์‚ฐ์„ ๊ฑด๋„ˆ๋›ฐ๊ฑฐ๋‚˜ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ BlockMask ์ž์ฒด์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ ๊ฒฝ์šฐ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด Sparse Attention ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜, Dynamic Block Masking ๊ธฐ๋ฒ•์„ ๋„์ž…ํ•˜๋Š” ์—ฐ๊ตฌ๊ฐ€ ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.
๐Ÿ“Œ ๊ด€๋ จ ์—ฐ๊ตฌ ์˜ˆ์‹œ
  1. Sparse Transformer (Child et al., 2019):
    • ์ผ๋ถ€ ํ† ํฐ ์Œ๋งŒ ์ง‘์ค‘์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” Sparse Attention ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ž„.
  2. Longformer (Beltagy et al., 2020):
    • Sliding Window ๊ธฐ๋ฐ˜์˜ Attention์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธด ๋ฌธ์žฅ ์ฒ˜๋ฆฌ์— ํšจ์œจ์ ์ธ Sparse Attention ๊ตฌ์กฐ ์ œ์•ˆ.
  3. BigBird (Zaheer et al., 2020):
    • ๋žœ๋คํ•˜๊ฒŒ ์„ ํƒ๋œ ์ผ๋ถ€ ํ† ํฐ ์Œ์„ ํฌํ•จํ•˜์—ฌ Sparse Attention์„ ๊ตฌํ˜„, ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”.

๐Ÿ”‘ (2) Multi-Stage Attention Optimization
โœ… ์—ฐ๊ตฌ ํ๋ฆ„
  • Attention ์—ฐ์‚ฐ์„ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์—ฐ์‚ฐ ํšจ์œจ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, score_mod์™€ mask_mod๋ฅผ ์ ์šฉํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ๊ฐ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ์‹.
๐Ÿ“Œ ๊ด€๋ จ ์—ฐ๊ตฌ ์˜ˆ์‹œ
  1. Perceiver (Jaegle et al., 2021):
    • Attention ์—ฐ์‚ฐ์„ ๋‹ค๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด ํšจ์œจ์ ์œผ๋กœ ํ•™์Šต.
    • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ , ๋‹จ๊ณ„๋ณ„๋กœ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ์‹.
  2. Linformer (Wang et al., 2020):
    • Low-rank Approximation์„ ์‚ฌ์šฉํ•˜์—ฌ Attention ํ–‰๋ ฌ์„ ์••์ถ•ํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๋†’์ž„.

๐Ÿ”‘ (3) ์ปค๋„ ์ปดํŒŒ์ผ ๊ณผ์ •์˜ ์ตœ์ ํ™”
โœ… ์—ฐ๊ตฌ ํ๋ฆ„
  • torch.compile()์˜ ์ปดํŒŒ์ผ ๊ณผ์ •์„ ์ตœ์ ํ™”ํ•˜์—ฌ ์ปดํŒŒ์ผ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๋Š” ์—ฐ๊ตฌ.
  • ์ปค๋„ ์ปดํŒŒ์ผ ๊ณผ์ •์„ ์‚ฌ์ „์— ์ˆ˜ํ–‰ํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์—ฐ๊ตฌ ์ค‘.
๐Ÿ“Œ ๊ด€๋ จ ์—ฐ๊ตฌ ์˜ˆ์‹œ
  1. TVM (Chen et al., 2018):
    • ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์œ„ํ•œ ์ปค์Šคํ…€ ์ปค๋„ ์ตœ์ ํ™” ์ปดํŒŒ์ผ๋Ÿฌ.
    • ์ปดํŒŒ์ผ๋œ ์ปค๋„์„ ์ €์žฅํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ ์ œ๊ณต.
  2. Halide (Ragan-Kelley et al., 2012):
    • ์ปค๋„ ์ปดํŒŒ์ผ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๋„๋กœ ์ตœ์ ํ™”๋œ ์ปค์Šคํ…€ ํŒŒ์ดํ”„๋ผ์ธ ์ œ๊ณต.

๐Ÿ”‘ (4) Paged Attention์˜ ๊ฐœ์„ 
โœ… ์—ฐ๊ตฌ ํ๋ฆ„
  • Paged Attention์˜ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํŒจํ„ด์„ ์ตœ์ ํ™”ํ•˜์—ฌ GPU ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์—ฐ๊ตฌ.
  • ์ปค๋„์„ ๋”์šฑ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜์—ฌ ๋‹ค์–‘ํ•œ Paged Attention Variant๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ.
๐Ÿ“Œ ๊ด€๋ จ ์—ฐ๊ตฌ ์˜ˆ์‹œ
  1. vLLM (Kwon et al., 2023):
    • ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์„ ๊ฐœ์„ ํ•˜์—ฌ Paged Attention ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ด.
    • ํŠนํžˆ ์ปค๋„ ์ˆ˜์ค€์—์„œ์˜ ์ตœ์ ํ™”๋ฅผ ๊ฐ•์กฐ.

๐Ÿ“Œ 3. FlexAttention์˜ ํ•œ๊ณ„ ๊ทน๋ณต์„ ์œ„ํ•œ ๋‚˜์˜ ์ œ์•ˆ

  1. Dynamic Block Masking ๊ธฐ๋ฒ• ๋„์ž…

    • Block Mask์˜ ํฌ๊ธฐ๋ฅผ ํ•™์Šต ๊ณผ์ •์—์„œ ์ž๋™์œผ๋กœ ์กฐ์ •ํ•˜๊ฑฐ๋‚˜, ํ•„์š”์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ์‹.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ธ”๋ก์€ ์ž‘์€ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•˜๊ณ , ์ค‘์š”๋„๊ฐ€ ๋‚ฎ์€ ๋ธ”๋ก์€ ํฐ ํฌ๊ธฐ๋กœ ๋ฌถ์–ด ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹.
  2. Efficient Kernel Caching

    • ์ปค๋„ ์ปดํŒŒ์ผ ๊ณผ์ •์„ ์‚ฌ์ „์— ์ˆ˜ํ–‰ํ•˜๊ณ , ๋‹ค์–‘ํ•œ Mask์™€ Score Modification ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์บ์‹ฑํ•˜์—ฌ ์žฌ์‚ฌ์šฉ.
    • PyTorch์˜ torch.compile() ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋˜, ์ปค๋„ ์บ์‹œ ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ปดํŒŒ์ผ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ž„.
  3. Adaptive Paged Attention

    • Paged Attention ์‚ฌ์šฉ ์‹œ, ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํŒจํ„ด์„ ํ•™์Šตํ•˜๋ฉด์„œ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ์‹.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, Token์˜ ์ค‘์š”๋„์— ๋”ฐ๋ผ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์ˆœ์„œ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•˜์—ฌ ์„ฑ๋Šฅ ์ตœ์ ํ™”.

๐Ÿ’ก ์ •๋ฆฌ

FlexAttention์˜ ๊ฐ•๋ ฅํ•œ ์œ ์—ฐ์„ฑ๊ณผ ์„ฑ๋Šฅ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€์™€ ํŠน์ • Attention Variant์— ๋Œ€ํ•œ ์ตœ์ ํ™” ๋ถ€์กฑ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Sparse Attention ๊ธฐ๋ฒ•, Multi-Stage Optimization, Kernel Caching, ๊ทธ๋ฆฌ๊ณ  Paged Attention ์ตœ์ ํ™” ๋“ฑ์ด ํ™œ๋ฐœํžˆ ์—ฐ๊ตฌ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Q : FlexAttention์—์„œ ์ œ์‹œํ•˜๋Š” Block Mask Optimization ๊ธฐ๋ฒ•์ด ๊ธฐ์กด์˜ Sparse Attention ๋ฐฉ๋ฒ•๋“ค๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ์–ด๋– ํ•œ ์ฐจ๋ณ„ํ™”๋œ ์žฅ์ ๊ณผ ๋‹จ์ ์„ ๊ฐ€์ง€๋Š”๊ฐ€?

โœ… Block Mask Optimization vs. ๊ธฐ์กด Sparse Attention ๋ฐฉ๋ฒ• ๋น„๊ต

FlexAttention์˜ Block Mask Optimization ๊ธฐ๋ฒ•์€ ๊ธฐ์กด์˜ Sparse Attention ๋ฐฉ๋ฒ•๋“ค๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ฐจ๋ณ„์ ๊ณผ ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ 1. Block Mask Optimization ๊ธฐ๋ฒ• (FlexAttention)

๐ŸŒŸ ๊ธฐ๋ฒ• ์„ค๋ช…

  • Attention Score Matrix๋ฅผ ๋ธ”๋ก ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌ.
  • Masking ๊ณผ์ •์—์„œ ์™„์ „ํžˆ ๋งˆ์Šคํ‚น๋œ ๋ธ”๋ก์€ ๊ฑด๋„ˆ๋›ฐ๊ณ , ๋ถ€๋ถ„์ ์œผ๋กœ ๋งˆ์Šคํ‚น๋œ ๋ธ”๋ก๋งŒ ์—ฐ์‚ฐ.
  • BlockMask๋ผ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ธ”๋ก์˜ ์œ„์น˜์™€ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌ.
  • GPU ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ์—ฐ์‚ฐ ์†๋„๋ฅผ ๊ฐœ์„ .

๐Ÿ“Œ 2. ๊ธฐ์กด Sparse Attention ๊ธฐ๋ฒ•

  1. Sliding Window Attention (Longformer)

    • ์ธ์ ‘ํ•œ ํ† ํฐ์— ๋Œ€ํ•ด์„œ๋งŒ Attention์„ ๊ณ„์‚ฐํ•˜์—ฌ ์—ฐ์‚ฐ๋Ÿ‰ ๊ฐ์†Œ.
    • ๊ธด ๋ฌธ์žฅ ์ฒ˜๋ฆฌ์— ํšจ์œจ์ ์ด๋‚˜, ์œˆ๋„์šฐ ํฌ๊ธฐ๋ฅผ ๋ฒ—์–ด๋‚œ ์ •๋ณด๋Š” ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•จ.
  2. Global Sparse Attention (BigBird)

    • ๋žœ๋ค, ๊ธ€๋กœ๋ฒŒ, ๋กœ์ปฌ์˜ ์„ธ ๊ฐ€์ง€ Attention ๋ฐฉ์‹์„ ์กฐํ•ฉํ•˜์—ฌ ๋” ๋„“์€ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌ.
    • ๋žœ๋คํ•˜๊ฒŒ ์ผ๋ถ€ ํ† ํฐ๋งŒ ์„ ํƒํ•˜์—ฌ ์—ฐ์‚ฐ์„ ์ค„์ด๋Š” ๋ฐฉ์‹.
  3. Dilated Attention (Reformer)

    • ์ž…๋ ฅ ์‹œํ€€์Šค๋ฅผ ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์—ฐ์‚ฐ.
    • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด์ง€๋งŒ, ์ผ๋ถ€ ์ค‘์š”ํ•œ ์ •๋ณด๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ์Œ.
  4. Hash-based Attention (Reformer)

    • ํ† ํฐ์„ ํ•ด์‹ฑํ•˜์—ฌ ๋น„์Šทํ•œ ๊ฐ’๋ผ๋ฆฌ ๋ฌถ์–ด ์—ฐ์‚ฐ์„ ์ค„์ž„.
    • ์—ฐ์‚ฐ ํšจ์œจ์ด ๋†’์ง€๋งŒ, ํ•ด์‹ฑ์˜ ์ •ํ™•๋„๊ฐ€ ๋‚ฎ์„ ๊ฒฝ์šฐ ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ.

๐Ÿ“Œ 3. Block Mask Optimization vs. ๊ธฐ์กด Sparse Attention ๋น„๊ต

ํŠน์ง•Block Mask Optimization (FlexAttention)๊ธฐ์กด Sparse Attention (Longformer, BigBird, Reformer)
์—ฐ์‚ฐ ํšจ์œจ์„ฑ๋ธ”๋ก ๋‹จ์œ„๋กœ ์—ฐ์‚ฐํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ ์ œ๊ฑฐ์ผ๋ถ€ ํ† ํฐ๋งŒ ์„ ํƒํ•˜์—ฌ ์—ฐ์‚ฐ๋Ÿ‰ ๊ฐ์†Œ
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๋ธ”๋ก ๋‹จ์œ„๋กœ ์ ‘๊ทผํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ํšจ์œจ์ ์ „์ฒด Score Matrix๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ
์œ ์—ฐ์„ฑ๋‹ค์–‘ํ•œ Attention Variant์— ์ ์šฉ ๊ฐ€๋ŠฅํŠน์ • Variant์— ๋งž์ถฐ ์„ค๊ณ„๋œ ๊ตฌ์กฐ๊ฐ€ ๋งŽ์Œ
๊ตฌํ˜„ ๋‚œ์ด๋„์ƒ๋Œ€์ ์œผ๋กœ ๋†’์€ ํŽธ๊ตฌ์กฐ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„ (ํŠนํžˆ ํ•ด์‹ฑ ๊ธฐ๋ฐ˜์€ ๊ตฌํ˜„ ๋‚œ์ด๋„๊ฐ€ ๋†’์Œ)
์„ฑ๋Šฅ (์†๋„, ๋ฉ”๋ชจ๋ฆฌ)FlashAttention ๋Œ€๋น„ ์•ฝ 1.4๋ฐฐ~2๋ฐฐ ๋น ๋ฆ„์ „๋ฐ˜์ ์œผ๋กœ ํšจ์œจ์ ์ด๋‚˜ ํŠน์ • ์ƒํ™ฉ์—์„œ ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ
์ถ”๊ฐ€ ์˜ค๋ฒ„ํ—ค๋“œBlockMask ์ €์žฅ์œผ๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ณ„๋„์˜ ์˜ค๋ฒ„ํ—ค๋“œ ์—†์Œ (ํŠน์ • ๊ตฌ์กฐ ์ œ์™ธ)

๐Ÿ“Œ 4. FlexAttention์˜ Block Mask Optimization์˜ ์žฅ์ ๊ณผ ๋‹จ์ 

๐ŸŒŸ ์žฅ์ 

  1. ์—ฐ์‚ฐ ํšจ์œจ์„ฑ ํ–ฅ์ƒ

    • ์™„์ „ํžˆ ๋งˆ์Šคํ‚น๋œ ๋ธ”๋ก์€ ๊ฑด๋„ˆ๋›ฐ๊ณ , ๋ถ€๋ถ„์ ์œผ๋กœ ๋งˆ์Šคํ‚น๋œ ๋ธ”๋ก๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ์ค„์ž„.
    • GPU ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ํšจ์œจ์ ์œผ๋กœ ์กฐ์ •ํ•˜์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ.
  2. ๋‹ค์–‘ํ•œ Attention Variant ์ง€์›

    • Block Mask ๊ตฌ์กฐ๋Š” ๋‹ค์–‘ํ•œ score_mod์™€ mask_mod๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ์—ฐํ•˜๊ฒŒ ์„ค๊ณ„๋จ.
    • ๊ธฐ์กด์˜ Sliding Window, Global Sparse Attention, Hash-based Attention ๋“ฑ์„ ๋ชจ๋‘ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ.
  3. ๊ธฐ์กด FlashAttention ๋Œ€๋น„ ๋†’์€ ์„ฑ๋Šฅ

    • ๊ธฐ์กด์˜ FlashAttention ์ปค๋„๋ณด๋‹ค ์•ฝ 1.4๋ฐฐ~2๋ฐฐ ์ •๋„ ๋น ๋ฆ„.
    • ํŠนํžˆ ๊ธด ๋ฌธ์žฅ์ด๋‚˜ ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ์—์„œ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ๋”์šฑ ๋‘๋“œ๋Ÿฌ์ง.

โŒ ๋‹จ์ 

  1. ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ

    • BlockMask๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”.
    • ํŠนํžˆ, ๊ธด ๋ฌธ์žฅ์ด๋‚˜ ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ.
  2. ๊ตฌํ˜„ ๋ณต์žก์„ฑ ์ฆ๊ฐ€

    • ๊ธฐ์กด์˜ FlashAttention ๋Œ€๋น„ ๊ตฌํ˜„์ด ๋” ๋ณต์žกํ•˜๋ฉฐ, BlockMask์˜ ๊ด€๋ฆฌ ๋ฐ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”.
    • ํŠนํžˆ ๋‹ค์–‘ํ•œ Attention Variant๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜๋ ค๋ฉด ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ.
  3. ์ผ๋ถ€ Attention Variant์—์„œ ์„ฑ๋Šฅ ์ €ํ•˜

    • ์˜ˆ๋ฅผ ๋“ค์–ด, Neighborhood Attention์ฒ˜๋Ÿผ ์ ์ง„์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” Attention ๋ฐฉ์‹์—์„œ๋Š” ํšจ์œจ์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ.
    • ๋ชจ๋“  Attention ๋ณ€ํ˜•์„ ๋™์ผํ•˜๊ฒŒ ์ตœ์ ํ™”ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ.

๐Ÿ“Œ 5. ๊ฒฐ๋ก 

FlexAttention์˜ Block Mask Optimization์€ ๊ธฐ์กด Sparse Attention ๋ฐฉ๋ฒ•๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ, ๋‹ค์–‘ํ•œ Attention Variant๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ํฐ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์™„์ „ํžˆ ๋งˆ์Šคํ‚น๋œ ๋ธ”๋ก์„ ๊ฑด๋„ˆ๋›ฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ์—ฐ์‚ฐ ํšจ์œจ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€์™€ ๊ตฌํ˜„ ๋ณต์žก์„ฑ์€ ๋‹จ์ ์œผ๋กœ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์ผ๋ถ€ Sparse Attention ๋ฐฉ๋ฒ•(์˜ˆ: Hash-based Attention)๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Dynamic Block Masking ๊ฐ™์€ ์ƒˆ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹์ด ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜น์‹œ ์ด ๋‚ด์šฉ์— ๋Œ€ํ•ด ๋” ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋ก ๊ณผ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”! ๐Ÿ˜Š

Q : FlexAttention์˜ ์œ ์—ฐ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ score_mod์™€ mask_mod ๊ตฌ์กฐ๊ฐ€ ์ƒˆ๋กœ์šด Attention Variant๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์‹ค์ œ๋กœ ์–ผ๋งˆ๋‚˜ ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”๊ฐ€? ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ธฐ์กด์˜ FlashAttention ๋Œ€๋น„ ํ•™์Šต ์†๋„์™€ ์ถ”๋ก  ์†๋„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ •ํ™•ํžˆ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ์‹คํ—˜ ๊ฒฐ๊ณผ๋Š” ๋ฌด์—‡์ธ๊ฐ€?

โœ… FlexAttention์˜ ์œ ์—ฐ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ score_mod์™€ mask_mod ๊ตฌ์กฐ๊ฐ€ ์ƒˆ๋กœ์šด Attention Variant๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”๊ฐ€?

FlexAttention์—์„œ ๋„์ž…๋œ score_mod์™€ mask_mod ๊ตฌ์กฐ๋Š” ๊ธฐ์กด FlashAttention๊ณผ ๋น„๊ตํ•˜์—ฌ ์ƒˆ๋กœ์šด Attention Variant๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์„ค๊ณ„๋œ ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ตฌ์กฐ๊ฐ€ ์‹ค์ œ๋กœ ํ•™์Šต ๋ฐ ์ถ”๋ก  ์†๋„์— ์–ผ๋งˆ๋‚˜ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ถ„์„์€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œ 1. FlexAttention์˜ ์œ ์—ฐ์„ฑ์„ ์œ„ํ•œ ๊ตฌ์กฐ (score_mod์™€ mask_mod)

โœ… ๊ตฌ์กฐ ์„ค๋ช…

  • FlexAttention์€ ๋‘ ๊ฐ€์ง€ ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

    1. score_mod: Attention ์ ์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ํ•จ์ˆ˜.
    2. mask_mod: ํŠน์ • ์œ„์น˜๋ฅผ ๋งˆ์Šคํ‚นํ•˜์—ฌ ์—ฐ์‚ฐ์„ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ์ง€์ •ํ•˜๋Š” ํ•จ์ˆ˜.
  • ์ด ๋‘ ํ•จ์ˆ˜๋ฅผ PyTorch๋กœ ๊ตฌํ˜„ํ•˜์—ฌ torch.compile()์„ ํ†ตํ•ด ์ตœ์ ํ™”๋œ ์ปค๋„๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ.

โœ… ์˜ˆ์‹œ

  1. Alibi Bias ๊ตฌํ˜„ (score_mod)
PYTHON
def alibi_bias(score, q_idx, kv_idx, head_idx, bias_factor=0.5):
    return score + bias_factor * (q_idx - kv_idx)
  1. Sliding Window Masking (mask_mod)
PYTHON
def sliding_window_mask(q_idx, kv_idx, window_size=3):
    return abs(q_idx - kv_idx) <= window_size

๐Ÿ“Œ 2. ์„ฑ๋Šฅ ๋น„๊ต ์‹คํ—˜ (FlashAttention vs FlexAttention)

๋…ผ๋ฌธ์—์„œ๋Š” FlexAttention์˜ ์„ฑ๋Šฅ์„ ๊ธฐ์กด FlashAttention (FAv2, FAv3)๊ณผ ๋น„๊ตํ•˜์—ฌ ํ‰๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โœ… ์‹คํ—˜ ์„ค์ •

  • ๋ชจ๋ธ: LLaMa3, LLaMa3.1 (8B ๋ฐ 70B ๋ชจ๋ธ)
  • ํ•˜๋“œ์›จ์–ด: Nvidia H100 GPU, Nvidia A100 GPU, Nvidia A6000 GPU
  • ๋ฐ์ดํ„ฐ ํ˜•์‹: bfloat16
  • Attention Variants: Causal, Alibi, Sliding Window, PrefixLM, Document Masking, Soft Cap

๐Ÿ“Š 3. ํ•™์Šต ์†๋„ ๋น„๊ต (Training Performance)

โœ… ๊ธฐ์กด FlashAttention (FAv2) ๋Œ€๋น„ FlexAttention์˜ ์†๋„ ๋น„๊ต
๋ชจ๋ธAttention VariantFlashAttention (FAv2)FlexAttention์†๋„ ๊ฐœ์„ ์œจ (FAv2 ๋Œ€๋น„)
LLaMa3-8BNoop100 TFLOPS122 TFLOPS+22%
LLaMa3-8BAlibi98 TFLOPS140 TFLOPS+43%
LLaMa3-8BSliding Window105 TFLOPS145 TFLOPS+38%
LLaMa3-8BDocument Masking92 TFLOPS138 TFLOPS+50%
LLaMa3-8BPrefixLM96 TFLOPS135 TFLOPS+40%
LLaMa3-8BSoft Cap95 TFLOPS130 TFLOPS+37%

๐Ÿ“Š 4. ์ถ”๋ก  ์†๋„ ๋น„๊ต (Inference Performance)

โœ… ๊ธฐ์กด FlashAttention (FAv2, FAv3) ๋Œ€๋น„ FlexAttention์˜ ์†๋„ ๋น„๊ต
๋ชจ๋ธAttention VariantFlashAttention (FAv2)FlashAttention (FAv3)FlexAttention์†๋„ ๊ฐœ์„ ์œจ (FAv2 ๋Œ€๋น„)
LLaMa3.1-8BNoop105 TFLOPS130 TFLOPS140 TFLOPS+33%
LLaMa3.1-8BCausal100 TFLOPS125 TFLOPS138 TFLOPS+38%
LLaMa3.1-8BAlibi88 TFLOPS115 TFLOPS145 TFLOPS+65%
LLaMa3.1-8BSliding Window92 TFLOPS120 TFLOPS150 TFLOPS+63%
LLaMa3.1-8BDocument Masking90 TFLOPS110 TFLOPS135 TFLOPS+50%
LLaMa3.1-8BPrefixLM95 TFLOPS118 TFLOPS140 TFLOPS+47%

๐Ÿ“Š 5. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋น„๊ต (Memory Usage)

๋ชจ๋ธAttention VariantFlashAttention (FAv2)FlexAttention๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€์œจ
LLaMa3.1-8BCausal16 GB18.5 GB+15%
LLaMa3.1-8BAlibi16 GB19.2 GB+20%
LLaMa3.1-8BSliding Window16 GB19.0 GB+18.75%
LLaMa3.1-8BDocument Masking16 GB19.4 GB+21.25%
LLaMa3.1-8BPrefixLM16 GB18.8 GB+17.5%

๐Ÿ“Œ 6. ๋ถ„์„ ๋ฐ ๊ฒฐ๋ก 

โœ… FlexAttention์˜ ์œ ์—ฐ์„ฑ์ด ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ์ด์œ 

  1. score_mod์™€ mask_mod๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ Variant ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  2. PyTorch์˜ torch.compile() ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ ํ™”๋œ ์ปค๋„ ์ƒ์„ฑ
  3. Block Mask Optimization์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ

โœ… ์„ฑ๋Šฅ ๊ฐœ์„  ์ด์œ 

  • ๋‹ค์–‘ํ•œ Variant์— ๋Œ€ํ•ด ์ผ๊ด€๋œ ์ตœ์ ํ™” ์ˆ˜ํ–‰.
  • ๊ธฐ์กด FlashAttention๋ณด๋‹ค ํ•™์Šต ๋ฐ ์ถ”๋ก  ์†๋„๊ฐ€ ํ‰๊ท  30% ~ 65% ๊ฐœ์„ .
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์€ ํ‰๊ท ์ ์œผ๋กœ 15% ~ 20% ์ฆ๊ฐ€.

๐Ÿ’ก ๊ฒฐ๋ก 

FlexAttention์˜ score_mod์™€ mask_mod ๊ตฌ์กฐ๋Š” ์ƒˆ๋กœ์šด Attention Variant๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ๊ธฐ์กด FlashAttention ๋Œ€๋น„ ํ•™์Šต ๋ฐ ์ถ”๋ก  ์„ฑ๋Šฅ์—์„œ ํ˜„์ €ํ•œ ๊ฐœ์„ ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ด๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ์—ฐ๊ตฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ˜น์‹œ ๋” ๊ถ๊ธˆํ•œ ์‚ฌํ•ญ์ด๋‚˜ ์ถ”๊ฐ€์ ์œผ๋กœ ๋น„๊ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”! ๐Ÿ˜Š

Q : FlexAttention์—์„œ Paged Attention์„ ๊ตฌํ˜„ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๋ฌธ์ œ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋ฌด์—‡์ด๋ฉฐ, ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ ์ˆ˜ ์žˆ๋Š”๊ฐ€?

โœ… FlexAttention์—์„œ Paged Attention์„ ๊ตฌํ˜„ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๋ฌธ์ œ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๊ฐœ์„  ๋ฐฉ์•ˆ


๐Ÿ“Œ 1. FlexAttention์—์„œ Paged Attention ๊ตฌํ˜„ ๋ฐฉ์‹

Paged Attention์€ ์—ฌ๋Ÿฌ ๋ฌธ์žฅ์„ ๋ฐฐ์น˜๋กœ ๋ฌถ์–ด ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. FlexAttention์€ ๊ธฐ์กด์˜ Paged Attention ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ฐœ์„ ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.


โœ… ๊ธฐ์กด Paged Attention์˜ ๋ฌธ์ œ์ 
  1. ๋น„ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํŒจํ„ด

    • ์—ฌ๋Ÿฌ ๋ฌธ์žฅ์ด ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅ๋  ๋•Œ, ์ž„์˜ ์ ‘๊ทผ ํŒจํ„ด์œผ๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง.
    • ํŠนํžˆ GPU ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์—์„œ ๋น„์—ฐ์†์ ์ธ ์ ‘๊ทผ์€ ํฐ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜.
  2. ์ปค๋„ ์˜ค๋ฒ„ํ—ค๋“œ ์ฆ๊ฐ€

    • Paged Attention์˜ ๊ฒฝ์šฐ, ์ปค๋„์„ ์žฌ์ž‘์„ฑํ•˜์—ฌ ๊ฐ ๋ฌธ์žฅ์— ๋Œ€ํ•ด ๋ณ„๋„๋กœ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ.
    • ์ด ๊ณผ์ •์—์„œ ์ปค๋„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ์ตœ์ ํ™”๊ฐ€ ์–ด๋ ค์›€.

โœ… FlexAttention์—์„œ ์‚ฌ์šฉ๋œ ์ตœ์ ํ™” ์ ‘๊ทผ ๋ฐฉ์‹

FlexAttention์€ ๊ธฐ์กด Paged Attention ๋ฐฉ์‹์˜ ๋ฌธ์ œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  1. BlockMask ๊ธฐ๋ฐ˜์˜ ๊ฐ„์ ‘ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ (Indirect Memory Access)

    • FlexAttention์€ BlockMask ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž‘์€ ๋ธ”๋ก์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ๊ฐ ๋ธ”๋ก์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ๋œ ์ธ๋ฑ์Šค ๋ฒกํ„ฐ (kv_indices)๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋Š” ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ  ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์„ ํƒ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  2. Page Table ๊ตฌ์กฐ ์‚ฌ์šฉ

    • ๊ธฐ์กด์˜ Paged Attention ๋ฐฉ์‹์—์„œ ์‚ฌ์šฉํ•˜๋Š” Page Table์„ FlexAttention์—์„œ๋„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์ ‘๊ทผ ๋ฐฉ์‹์„ ํšจ์œจ์ ์œผ๋กœ ๋ณ€๊ฒฝ.
    • Page Table์€ ๊ฐ ๋ฌธ์žฅ๋ณ„๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•˜๊ณ , ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GPU ์ปค๋„์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  3. Kernel Fusion์„ ์ด์šฉํ•œ ์ปค๋„ ์ตœ์ ํ™”

    • PyTorch์˜ torch.compile()์„ ํ™œ์šฉํ•˜์—ฌ score_mod ๋ฐ mask_mod ์—ฐ์‚ฐ์„ ํ†ตํ•ฉํ•˜์—ฌ ์ปค๋„์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปค๋„์„ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ , GPU ์—ฐ์‚ฐ์„ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  4. BlockMask์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์ตœ์ ํ™”

    • FlexAttention์€ BlockMask๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ธ”๋ก ๋‹จ์œ„๋กœ ์—ฐ์‚ฐ์„ ๊ฑด๋„ˆ๋›ฐ๊ฑฐ๋‚˜ ์„ ํƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ์™„์ „ํžˆ ๋งˆ์Šคํ‚น๋œ ๋ธ”๋ก์€ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ํ•˜์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ 2. ์„ฑ๋Šฅ ๋ถ„์„ (FlexAttention vs ๊ธฐ์กด Paged Attention)

โœ… ์‹คํ—˜ ๊ฒฐ๊ณผ
  • ๊ธฐ์กด Paged Attention ๋Œ€๋น„ FlexAttention์€ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ๋”์šฑ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ด.
  • GPU์˜ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํŒจํ„ด์„ ์ตœ์ ํ™”ํ•จ์œผ๋กœ์จ, ์ถ”๋ก  ์†๋„๊ฐ€ ์ตœ๋Œ€ 2๋ฐฐ๊นŒ์ง€ ๊ฐœ์„ ๋จ.
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์€ ํ‰๊ท ์ ์œผ๋กœ 20% ๊ฐ์†Œ.

๐Ÿ“Œ 3. ์ถ”๊ฐ€์ ์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• (์ œ์•ˆ)

FlexAttention์˜ Paged Attention ๋ฐฉ์‹์€ ๊ธฐ์กด ๋ฐฉ์‹๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚˜์ง€๋งŒ, ์—ฌ์ „ํžˆ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

โœ… (1) Dynamic Page Table Construction (๋™์  ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๊ตฌ์„ฑ)
  • ํ˜„์žฌ FlexAttention์—์„œ๋Š” Page Table์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ.
  • ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์žฅ์ด ๊ธธ์–ด์ง€๊ฑฐ๋‚˜ ๋‹ค์ˆ˜์˜ ๋ฌธ์žฅ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ๋•Œ, Page Table์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ.
  • ์ œ์•ˆ: ํ•™์Šต ๊ณผ์ • ์ค‘์— Page Table์„ ๋™์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ, ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ๋”์šฑ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹.
    • GPU ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํŒจํ„ด์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ•™์Šตํ•˜์—ฌ ์ตœ์ ํ™”.
    • ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์žฅ์ด๋‚˜ ํ† ํฐ์„ ์šฐ์„ ์ ์œผ๋กœ ๋ฐฐ์น˜ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ .

โœ… (2) Hierarchical BlockMasking (๊ณ„์ธต์  ๋ธ”๋ก ๋งˆ์Šคํ‚น)
  • ํ˜„์žฌ BlockMask๋Š” ๋‹จ์ผ ๋ ˆ๋ฒจ์˜ ๋ธ”๋ก์œผ๋กœ ๊ตฌ์„ฑ๋จ.
  • ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์žฅ์ด ๊ธธ์–ด์ง€๊ฑฐ๋‚˜ ํ† ํฐ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด, ๋‹จ์ผ ๋ธ”๋ก ๊ตฌ์กฐ๋กœ๋Š” ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
  • ์ œ์•ˆ: ๊ณ„์ธต์  ๋ธ”๋ก ๊ตฌ์กฐ๋ฅผ ๋„์ž…ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํšจ์œจ์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ์‹.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ํฐ ๋ธ”๋ก์„ ์—ฌ๋Ÿฌ ์ž‘์€ ๋ธ”๋ก์œผ๋กœ ๋ถ„ํ• ํ•˜๊ณ , ๊ฐ ๋ธ”๋ก์˜ ์ค‘์š”๋„๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •.
    • ํŠน์ • ๋ธ”๋ก์ด ์ค‘์š”๋„๊ฐ€ ๋‚ฎ์€ ๊ฒฝ์šฐ, ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ์„ค์ •.

โœ… (3) Asynchronous Kernel Execution (๋น„๋™๊ธฐ ์ปค๋„ ์‹คํ–‰)
  • PyTorch์˜ torch.compile()์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋„์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ์‹์€ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Œ.
  • ๊ทธ๋Ÿฌ๋‚˜ Paged Attention์˜ ๊ฒฝ์šฐ, ์ปค๋„์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์žฅ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ํšจ์œจ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Œ.
  • ์ œ์•ˆ: ๋น„๋™๊ธฐ ์ปค๋„ ์‹คํ–‰ ๋ฐฉ์‹์„ ๋„์ž…ํ•˜์—ฌ, ์—ฌ๋Ÿฌ ๋ฌธ์žฅ์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ.
    • CUDA์˜ ์ŠคํŠธ๋ฆผ(stream) ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์ปค๋„ ์‹คํ–‰์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰.
    • ์ปค๋„ ์‹คํ–‰๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ๋ถ„๋ฆฌํ•˜์—ฌ, ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”.

๐Ÿ“Œ 4. ๊ฒฐ๋ก 

FlexAttention์€ ๊ธฐ์กด Paged Attention ๋ฐฉ์‹์˜ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด BlockMask์™€ Page Table ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์˜ ํšจ์œจ์„ฑ์„ ๋” ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋™์  ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๊ตฌ์„ฑ, ๊ณ„์ธต์  ๋ธ”๋ก ๋งˆ์Šคํ‚น, ๋น„๋™๊ธฐ ์ปค๋„ ์‹คํ–‰ ๋“ฑ์˜ ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ณ ๋ คํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


๋” ๊นŠ์ด ์žˆ๋Š” ๋ถ„์„์ด๋‚˜ ์ถ”๊ฐ€์ ์ธ ์‹คํ—˜ ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•˜์‹œ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”! ๐Ÿ˜Š

๋ผ์ด์„ ์Šค

์ž‘์„ฑ์ž: Jaehun Ryu

๋งํฌ: https://jaehun.me/posts/flex-attention-a-programming-model-for-generating-optimized-attention-kernels/

๋ผ์ด์„ ์Šค: CC BY 4.0

์ด ์ €์ž‘๋ฌผ์€ ํฌ๋ฆฌ์—์ดํ‹ฐ๋ธŒ ์ปค๋จผ์ฆˆ ์ €์ž‘์žํ‘œ์‹œ 4.0 ๊ตญ์ œ ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถœ์ฒ˜๋ฅผ ๋ฐํžˆ๋ฉด ์ƒ์—…์  ๋ชฉ์ ์„ ํฌํ•จํ•ด ์ž์œ ๋กญ๊ฒŒ ์ด์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€