๐Ÿค– LLM

LLM Basics

LLM ๊ธฐ์ดˆ - ๋Œ€ํ˜• ์–ธ์–ด ๋ชจ๋ธ์˜ ์›๋ฆฌ์™€ ์‹œ์Šคํ…œ ๊ด€์ 

Tokenization ยท Transformer ยท Next-token Prediction ยท Training/Post-training ยท Inference ยท KV Cache ยท Serving

๊ฐœ์š”

LLM(Large Language Model, ๋Œ€ํ˜• ์–ธ์–ด ๋ชจ๋ธ)์€ ์•ž์„  ํ† ํฐ๋“ค์˜ ๋ฌธ๋งฅ์„ ์กฐ๊ฑด์œผ๋กœ ๋‹ค์Œ ํ† ํฐ์˜ ํ™•๋ฅ ๋ถ„ํฌ๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ํ•™์Šต ๋ชฉํ‘œ ์ž์ฒด๋Š” ๋‹จ์ˆœํ•˜์ง€๋งŒ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ, ์ถฉ๋ถ„ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ, Transformer์˜ ๋ฌธ๋งฅ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์ด ๊ฒฐํ•ฉ๋˜๋ฉด ๋ฒˆ์—ญ, ์š”์•ฝ, ์งˆ์˜์‘๋‹ต, ์ฝ”๋“œ ์ƒ์„ฑ์ฒ˜๋Ÿผ ๋‹ค์–‘ํ•œ ๊ณผ์ œ๋ฅผ ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค, ์ฆ‰ ํ…์ŠคํŠธ ์ž…๋ ฅ๊ณผ ์ƒ์„ฑ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ์ œํ’ˆ์˜ LLM์€ ๋ชจ๋ธ ํ•˜๋‚˜๋งŒ์„ ๋œปํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ† ํฌ๋‚˜์ด์ €, ๋ชจ๋ธ ๊ฐ€์ค‘์น˜, ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ, ์ƒ˜ํ”Œ๋Ÿฌ, ์•ˆ์ „ ์ •์ฑ…, ๊ฒ€์ƒ‰ ๋˜๋Š” ๋„๊ตฌ ํ˜ธ์ถœ, ์ถ”๋ก  ์—”์ง„๊ณผ GPU ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž๊ฐ€ ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "๋ชจ๋ธ์ด ๋‹ต์„ ์ƒ์„ฑํ•œ๋‹ค"๋Š” ์„ค๋ช…์€ ๋งž์ง€๋งŒ, ์ง€์—ฐ ์‹œ๊ฐ„๊ณผ ๋น„์šฉ, ํ’ˆ์งˆ์€ ์ด ์ „์ฒด ๊ฒฝ๋กœ์—์„œ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ๊ด€์ ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ตฌ๋ถ„์€ ์ถ”๋ก ์˜ ๋‘ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ํ”„๋กฌํ”„ํŠธ ์ „์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” prefill์€ ํฐ ํ–‰๋ ฌ๊ณฑ์„ ๋งŽ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๊ณ , ์ดํ›„ ํ•œ ํ† ํฐ์”ฉ ์ƒ์„ฑํ•˜๋Š” decode๋Š” ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์™€ ๊ณผ๊ฑฐ KV cache๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์ฝ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ ์ œ์•ฝ์ด ํฝ๋‹ˆ๋‹ค. ์ด ์ฐจ์ด๊ฐ€ FlashAttention, PagedAttention, continuous batching, speculative decoding, prefill-decode ๋ถ„๋ฆฌ ๊ฐ™์€ ์„œ๋น™ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค.

๋จผ์ € ์šฉ์–ด ์ •๋ฆฌ

๋ฌธํ—Œ๊ณผ ๊ตฌํ˜„์ฒด๋Š” ๊ฐ™์€ ๊ฐœ๋…์— ์„œ๋กœ ๋‹ค๋ฅธ ์ด๋ฆ„์„ ์“ฐ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ d_model, hidden dimension, hidden size๋Š” ๋Œ€์ฒด๋กœ ๊ฐ™์€ ๋ชจ๋ธ ์„ค์ •์„ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ, ํ† ํฐ ํ•˜๋‚˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฒกํ„ฐ์˜ ํญ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด d_model=4096์ด๋ฉด ๊ฐ ๋ ˆ์ด์–ด๋ฅผ ํ†ต๊ณผํ•˜๋Š” ํ† ํฐ ํ‘œํ˜„๊ณผ hidden state์˜ ๋งˆ์ง€๋ง‰ ์ฐจ์›์€ 4096์ž…๋‹ˆ๋‹ค.

์šฉ์–ด ๊ธฐํ˜ธ ๋˜๋Š” ์„ค์ • ์ด๋ฆ„ ์˜๋ฏธ ๊ด€๊ณ„
Hidden dimension d_model, hidden_size ํ† ํฐ ํ‘œํ˜„๊ณผ hidden state์˜ ๋ฒกํ„ฐ ํญ ์›์กฐ Transformer๋Š” d_model, Llama๋ฅ˜ ์„ค์ •์€ ํ”ํžˆ hidden_size๋ฅผ ์“ด๋‹ค
Hidden state h, x ํŠน์ • ๋ ˆ์ด์–ด์—์„œ ํ•œ ํ† ํฐ์ด ๊ฐ€์ง„ d_model ์ฐจ์› ํ‘œํ˜„ ๋ฒกํ„ฐ ์ž…๋ ฅ ์ž„๋ฒ ๋”ฉ๋„ ์ฒซ hidden state๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค
Layer ์ˆ˜ L, num_hidden_layers ๋ฐ˜๋ณต๋˜๋Š” Transformer block์˜ ๊ฐœ์ˆ˜ KV cache๋Š” L์— ๋น„๋ก€ํ•œ๋‹ค
Query head ์ˆ˜ n_heads, num_attention_heads attention์„ ๋ณ‘๋ ฌ๋กœ ๋‚˜๋ˆ„๋Š” Query head ์ˆ˜ ๋ณดํ†ต d_model = n_heads * d_head
Head dimension d_head, head_dim head ํ•˜๋‚˜๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฒกํ„ฐ ํญ attention score์˜ ์Šค์ผ€์ผ๋ง ๊ธฐ์ค€์ด๋‹ค
KV head ์ˆ˜ n_kv_heads, num_key_value_heads Key์™€ Value๋ฅผ ์ €์žฅํ•˜๋Š” head ์ˆ˜ MHA๋Š” n_heads์™€ ๊ฐ™๊ณ , GQA/MQA๋Š” ๋” ์ž‘๋‹ค
FFN dimension d_ff, intermediate_size FFN ๋‚ด๋ถ€์˜ ํ™•์žฅ ์ฐจ์› ๋Œ€๊ฐœ d_model๋ณด๋‹ค ์ปค FFN ํŒŒ๋ผ๋ฏธํ„ฐ ๋น„์ค‘์ด ํฌ๋‹ค
Sequence length S, seq_len ์š”์ฒญ ์•ˆ์˜ ํ† ํฐ ์ˆ˜ attention ๋น„์šฉ๊ณผ KV cache ์šฉ๋Ÿ‰์— ์˜ํ–ฅ์„ ์ค€๋‹ค
Batch size B, batch ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ์š”์ฒญ ๋˜๋Š” ์‹œํ€€์Šค ์ˆ˜ ์ฒ˜๋ฆฌ๋Ÿ‰๊ณผ KV cache ์šฉ๋Ÿ‰์˜ ์ ˆ์ถฉ์ ์ด๋‹ค

๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋Š” ํ•œ ํ† ํฐ์˜ ์ƒ์„ฑ

์•„๋ž˜ ์ฒซ ๋ฒˆ์งธ ๊ทธ๋ฆผ์€ ์‹ค์ œ ์ถ”๋ก ์˜ ์‹œ๊ฐ„์ถ•์ž…๋‹ˆ๋‹ค. ํ”„๋กฌํ”„ํŠธ S๊ฐœ ํ† ํฐ์€ prefill์—์„œ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ, ์ดํ›„ ์ถœ๋ ฅ ํ† ํฐ์€ ํ•˜๋‚˜์”ฉ ์ž…๋ ฅ ๋์— ๋ถ™์—ฌ decodeํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๊ฐ ํ† ํฐ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ชจ๋ธ์ด ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋™์ผํ•œ L๊ฐœ decoder block์˜ ๊ฐ€์ค‘์น˜๋ฅผ ๋ฐ˜๋ณต ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๊ทธ๋ฆผ์€ ๊ทธ์ค‘ ํ•œ decoder block์„ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ MHA ๊ตฌ์กฐ๋กœ ํ™•๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ž…๋ ฅ hidden state X์˜ ํ˜•ํƒœ๋Š” [B, S, d_model]์ด์ง€๋งŒ, ๊ทธ๋ฆผ์€ vector์™€ matrix๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด batch ์ฐจ์›์„ ์ƒ๋žตํ•˜๊ณ  decode token ํ•˜๋‚˜์˜ [1, d_model] vector๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ฐ head์˜ Query๋Š” [1, d_head] vector, ๋ˆ„์  Key/Value๋Š” ๊ฐ๊ฐ [d_head, T], [T, d_head] matrix์ด๋ฉฐ, head๋ณ„ ๊ฒฐ๊ณผ๋ฅผ concatํ•œ ๋’ค output projection์œผ๋กœ ํ•ฉ์นฉ๋‹ˆ๋‹ค. attention ์ถœ๋ ฅ์€ residual connection์œผ๋กœ ์›๋ž˜ ์ž…๋ ฅ๊ณผ ํ•ฉ์ณ์ง€๊ณ , ๊ธฐ๋ณธ 2-layer FFN์„ ๊ฑฐ์ณ ๋‹ค์‹œ residual๋กœ ๋”ํ•ด์ง‘๋‹ˆ๋‹ค.

Prefill and autoregressive decode timeline

๊ทธ๋ฆผ 1a. ๋™์ผํ•œ decoder ๊ฐ€์ค‘์น˜๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” prefill๊ณผ ์ž๊ธฐํšŒ๊ท€ decode ํ๋ฆ„

Basic Transformer decoder block

๊ทธ๋ฆผ 1b. Vector๋Š” ์–‡์€ strip, matrix๋Š” ๋ฉด์ ์ด ์žˆ๋Š” block์œผ๋กœ ๊ตฌ๋ถ„ํ•œ ๊ธฐ๋ณธ MHA์™€ 2-layer FFN์˜ ํ•œ decode step

llm_0000_llm_basics

๊ทธ๋ฆผ 2. ์ž…๋ ฅ -> ํ† ํฐํ™” -> ์ž„๋ฒ ๋”ฉ -> Transformer -> ํ™•๋ฅ ๋ถ„ํฌ -> ์ƒ˜ํ”Œ๋ง์„ ๋ฐ˜๋ณตํ•˜๋Š” ์ž๊ธฐํšŒ๊ท€ ์ƒ์„ฑ

1. ์ „์ฒด ๋™์ž‘ ํ๋ฆ„

์‚ฌ์šฉ์ž๊ฐ€ ํ…์ŠคํŠธ๋ฅผ ๋ณด๋‚ด๊ณ  ํ™”๋ฉด์— ์‘๋‹ต์ด ๋‚˜ํƒ€๋‚  ๋•Œ๊นŒ์ง€์˜ ๊ฒฝ๋กœ๋ฅผ ๋จผ์ € ์žก์œผ๋ฉด ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์—ญํ• ์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

  1. ํ…์ŠคํŠธ ์ •๊ทœํ™”์™€ ํ† ํฐํ™”: ์ž…๋ ฅ ๋ฌธ์ž์—ด์„ ๋ชจ๋ธ ์–ดํœ˜์— ์žˆ๋Š” ์ •์ˆ˜ ํ† ํฐ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  2. ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑ: system, user, assistant ์—ญํ•  ํ‘œ๊ธฐ์™€ ๋Œ€ํ™” ์ด๋ ฅ์„ ๋ชจ๋ธ๋ณ„ chat template์— ๋งž์ถฐ ํ•˜๋‚˜์˜ ํ† ํฐ์—ด๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  3. Prefill: ํ”„๋กฌํ”„ํŠธ ์ „์ฒด๋ฅผ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•ด ๊ฐ ๋ ˆ์ด์–ด์˜ ๊ณผ๊ฑฐ Key/Value์™€ ์ฒซ ์ถœ๋ ฅ ๋ถ„ํฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  4. ์ƒ˜ํ”Œ๋ง: logits๋ฅผ ํ™•๋ฅ ๋กœ ๋ฐ”๊พธ๊ณ  ์ •์ฑ…์— ๋”ฐ๋ผ ๋‹ค์Œ ํ† ํฐ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. Decode: ์„ ํƒํ•œ ํ† ํฐ์„ ์ž…๋ ฅ ๋์— ๋ถ™์ด๊ณ , ์ƒˆ ํ† ํฐ์˜ K/V๋งŒ ๊ณ„์‚ฐํ•œ ๋’ค ์ €์žฅ๋œ KV cache๋ฅผ ์ฐธ์กฐํ•ด ๋‹ค์Œ ๋ถ„ํฌ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  6. ์ข…๋ฃŒ์™€ ํ›„์ฒ˜๋ฆฌ: EOS(end-of-sequence) ํ† ํฐ, ์ตœ๋Œ€ ๊ธธ์ด, stop ๋ฌธ์ž์—ด ๋“ฑ์„ ํ™•์ธํ•˜๊ณ  ํ† ํฐ์„ ๋ฌธ์ž์—ด๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ชจ๋ธ์ด๋ผ๋„ ํ”„๋กฌํ”„ํŠธ ๊ธธ์ด, ์ถœ๋ ฅ ๊ธธ์ด, ๋™์‹œ ์š”์ฒญ ์ˆ˜, ์ƒ˜ํ”Œ๋ง ์„ค์ •, ์บ์‹œ ์ ์ค‘๋ฅ ์— ๋”ฐ๋ผ ๋น„์šฉ์€ ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธด ๋ฌธ์„œ๋Š” prefill๊ณผ KV ์šฉ๋Ÿ‰์„ ํ‚ค์šฐ๊ณ , ๊ธด ๋‹ต๋ณ€์€ decode ์‹œ๊ฐ„๊ณผ ๊ฐ€์ค‘์น˜ ์ฝ๊ธฐ ํšŸ์ˆ˜๋ฅผ ํ‚ค์›๋‹ˆ๋‹ค.

2. ํ† ํฐ, ์ž„๋ฒ ๋”ฉ, ์œ„์น˜ ์ •๋ณด

ํ† ํฐ๊ณผ ํ† ํฐํ™”

ํ† ํฐ(token)์€ LLM์ด ์ง์ ‘ ์ฝ๊ณ  ์ถœ๋ ฅํ•˜๋Š” ์ด์‚ฐ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ž์—ฐ์–ด์˜ ๋‹จ์–ด์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋Œ€๊ฐœ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ๋ฌธ์ž ์กฐ๊ฐ์ด๋‚˜ ์„œ๋ธŒ์›Œ๋“œ(subword)์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด unbelievable์€ ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ, ์ด๋ชจ์ง€๋‚˜ ๋“œ๋ฌธ ๋ฌธ์ž๋„ ํ•˜๋‚˜ ์ด์ƒ ํ† ํฐ์œผ๋กœ ๋‚˜๋‰  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฌธ์žฅ์ด๋ผ๋„ ํ† ํฌ๋‚˜์ด์ €๊ฐ€ ๋‹ค๋ฅด๋ฉด ํ† ํฐ ์ˆ˜์™€ ID์—ด์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

  • BPE(Byte-Pair Encoding): ์ž์ฃผ ํ•จ๊ป˜ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ž ์กฐ๊ฐ์„ ๋ฐ˜๋ณต ๋ณ‘ํ•ฉํ•˜๋Š” ๊ณ„์—ด์ž…๋‹ˆ๋‹ค. GPT ๊ณ„์—ด์— ๋„๋ฆฌ ์“ฐ์ž…๋‹ˆ๋‹ค.
  • WordPiece: ์–ธ์–ด ๋ชจ๋ธ ์ ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์„œ๋ธŒ์›Œ๋“œ๋ฅผ ๊ณ ๋ฅด๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • Unigram/SentencePiece: ์–ธ์–ด์— ๋…๋ฆฝ์ ์ธ ์ •๊ทœํ™”์™€ ์„œ๋ธŒ์›Œ๋“œ ๋ถ„ํ• ์— ์ž์ฃผ ์“ฐ์ž…๋‹ˆ๋‹ค. ๊ณต๋ฐฑ์„ ๋ช…์‹œ์ ์ธ ๊ธฐํ˜ธ๋กœ ๋‹ค๋ฃจ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
  • Special token: BOS, EOS, PAD, ์—ญํ•  ๊ตฌ๋ถ„์ž, ๋„๊ตฌ ํ˜ธ์ถœ ๊ตฌ๋ถ„์ž์ฒ˜๋Ÿผ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ์ œ์–ด ๋ชฉ์ ์˜ ํ† ํฐ์ž…๋‹ˆ๋‹ค. chat template์„ ์ž„์˜๋กœ ๋ฐ”๊พธ๋ฉด ๋ชจ๋ธ์ด ํ•™์Šต ๋•Œ ๋ณด์ง€ ๋ชปํ•œ ํ˜•์‹์ด ๋˜์–ด ํ’ˆ์งˆ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ† ํฐ ์ˆ˜๋Š” LLM์˜ ์‹ค์งˆ์ ์ธ ์ž…๋ ฅ ๊ธธ์ด์ด์ž ๊ณผ๊ธˆ, ์ง€์—ฐ ์‹œ๊ฐ„, KV cache ์‚ฌ์šฉ๋Ÿ‰์˜ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. ๋ฌธ์ž ์ˆ˜๋‚˜ ๋‹จ์–ด ์ˆ˜๋งŒ์œผ๋กœ ๋ฌธ๋งฅ ๊ธธ์ด๋ฅผ ์ถ”์ •ํ•˜๋ฉด ์˜ค์ฐจ๊ฐ€ ํฌ๋ฉฐ, ์ฝ”๋“œ, ์ˆซ์ž์—ด, URL, ํ•œ๊ตญ์–ด์™€ ์˜์–ด๊ฐ€ ์„ž์ธ ํ…์ŠคํŠธ๋Š” ํŠนํžˆ ํ† ํฐํ™” ์ฐจ์ด๊ฐ€ ํฝ๋‹ˆ๋‹ค.

Tokenization and next-token probability flow

๊ทธ๋ฆผ 3. ๋ฌธ์ž์—ด์ด ํ† ํฐ ID์™€ ์ž„๋ฒ ๋”ฉ์„ ๊ฑฐ์ณ ๋‹ค์Œ ํ† ํฐ ํ™•๋ฅ ๋ถ„ํฌ์™€ ์ƒ˜ํ”Œ๋ง ๊ฒฐ๊ณผ๊ฐ€ ๋˜๋Š” ํ๋ฆ„

์ž„๋ฒ ๋”ฉ๊ณผ ํ‘œํ˜„์˜ ํฌ๊ธฐ

ํ† ํฐ ID t๋Š” ์ž„๋ฒ ๋”ฉ ํ…Œ์ด๋ธ” E์—์„œ d_model ์ฐจ์›์˜ ๋ฒกํ„ฐ x = E[t]๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค. d_model์€ hidden dimension ๋˜๋Š” hidden size๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ๋ชจ๋ธ ์ „์ฒด์—์„œ ํ† ํฐ ํ‘œํ˜„์˜ ๊ธฐ๋ณธ ํญ์„ ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์น˜ ํฌ๊ธฐ B, ์‹œํ€€์Šค ๊ธธ์ด S๋ผ๋ฉด ์ฒซ ์ž…๋ ฅ ํ…์„œ์˜ ํ˜•ํƒœ๋Š” ๋ณดํ†ต [B, S, d_model]์ž…๋‹ˆ๋‹ค. ์ด ์—ฐ์† ๋ฒกํ„ฐ๊ฐ€ ๊ฐ Transformer ์ธต์„ ์ง€๋‚˜๋ฉด์„œ, ํ† ํฐ ์ž์ฒด๋ฟ ์•„๋‹ˆ๋ผ ์•ž ๋ฌธ๋งฅ์„ ๋ฐ˜์˜ํ•œ ํ‘œํ˜„์œผ๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ hidden state h๋Š” LM head๋ฅผ ๊ฑฐ์ณ ์–ดํœ˜ ํฌ๊ธฐ V๊ฐœ์˜ ์ ์ˆ˜(logits)๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

logits = h @ W_vocab^T + b
p(next_token = i | context) = softmax(logits)_i

logit์€ ํ™•๋ฅ ์ด ์•„๋‹ˆ๋ผ ์ •๊ทœํ™” ์ „ ์ ์ˆ˜์ž…๋‹ˆ๋‹ค. softmax๊ฐ€ ๋ชจ๋“  ์–ดํœ˜ ํ›„๋ณด์˜ ์ ์ˆ˜๋ฅผ ๋”ํ•ด ํ•ฉ์ด 1์ธ ๋ถ„ํฌ๋กœ ๋ฐ”๊พธ๋ฉฐ, ๋ชจ๋ธ์€ ์ด ๋ถ„ํฌ๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ํ† ํฐ์„ ์˜ˆ์ธกํ•ฉ๋‹ˆ๋‹ค.

์œ„์น˜ ์ •๋ณด์™€ ๋ฌธ๋งฅ ์ฐฝ

Self-attention๋งŒ์œผ๋กœ๋Š” ํ† ํฐ ์ˆœ์„œ๋ฅผ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์œ„์น˜ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ Transformer๋Š” sinusoidal positional encoding์„ ์ž…๋ ฅ์— ๋”ํ–ˆ๊ณ , ํ˜„๋Œ€ decoder-only LLM์€ RoPE(Rotary Position Embedding)๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ALiBi์ฒ˜๋Ÿผ attention score์— ์œ„์น˜ ํŽธํ–ฅ์„ ์ฃผ๋Š” ๋ฐฉ์‹๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ๋งฅ ์ฐฝ(context window)์€ ํ•œ ๋ฒˆ์˜ ์š”์ฒญ์—์„œ ๋ชจ๋ธ์ด ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋œ ์ตœ๋Œ€ ํ† ํฐ ์ˆ˜์ž…๋‹ˆ๋‹ค. ํฐ ๋ฌธ๋งฅ ์ฐฝ์€ ๋” ๋งŽ์€ ์ด๋ ฅ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์ง€๋งŒ, ๋ชจ๋“  ํ† ํฐ์ด ์ž๋™์œผ๋กœ ๋™๋“ฑํ•˜๊ฒŒ ์ž˜ ํ™œ์šฉ๋œ๋‹ค๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ธด ์ž…๋ ฅ์ผ์ˆ˜๋ก attention ๋น„์šฉ๊ณผ KV cache๊ฐ€ ์ปค์ง€๊ณ , ๋ชจ๋ธ์˜ ์žฅ๊ฑฐ๋ฆฌ ๊ฒ€์ƒ‰ ์ •ํ™•๋„๋‚˜ ์œ„์น˜ ํŽธํ–ฅ๋„ ๋ณ„๋„๋กœ ํ‰๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3. Transformer ๋‚ด๋ถ€ ๊ตฌ์กฐ

์˜ค๋Š˜๋‚ ์˜ ์ƒ์„ฑํ˜• LLM์€ ๋Œ€์ฒด๋กœ decoder-only Transformer์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ธ”๋ก์„ L๊ฐœ ๋ฐ˜๋ณตํ•ด ์Œ“๊ณ , ๊ฐ ๋ธ”๋ก์€ ๋ฌธ๋งฅ์„ ์„ž๋Š” attention๊ณผ ํ† ํฐ๋ณ„ ๋ณ€ํ™˜์„ ํ•˜๋Š” FFN(Feed-Forward Network)์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„๋งˆ๋‹ค ์ˆœ์„œ์™€ ์ •๊ทœํ™”๊ฐ€ ๋‹ค๋ฅด์ง€๋งŒ, ํ˜„๋Œ€ LLM์€ ํ”ํžˆ pre-norm ๋˜๋Š” RMSNorm ๊ณ„์—ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

x = x + Attention(Norm(x))
x = x + FFN(Norm(x))

Residual connection์€ ๋ธ”๋ก ์ž…๋ ฅ์„ ์ถœ๋ ฅ์— ๋”ํ•ด ๊นŠ์€ ๋„คํŠธ์›Œํฌ์˜ ํ•™์Šต๊ณผ ์ •๋ณด ์ „๋‹ฌ์„ ์•ˆ์ •ํ™”ํ•ฉ๋‹ˆ๋‹ค. Norm์€ LayerNorm ๋˜๋Š” RMSNorm์ด๋ฉฐ, ๋ถ„ํฌ๋ฅผ ์•ˆ์ •ํ™”ํ•ด ํ•™์Šต์„ ๋•์Šต๋‹ˆ๋‹ค.

Norm, attention, residual, gated FFN๊นŒ์ง€ ์ด์–ด์ง€๋Š” ์ „์ฒด ๋ฐ์ดํ„ฐ ๊ฒฝ๋กœ๋Š” ์•ž์˜ ๊ทธ๋ฆผ 1b์— ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ค‘๋ณต๋œ block ๊ฐœ์š” ๋Œ€์‹  attention๊ณผ FFN์˜ ๊ณ„์‚ฐ ์˜๋ฏธ๋ฅผ ์ด์–ด์„œ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Multi-head self-attention

๊ฐ ํ† ํฐ ํ‘œํ˜„ X์—์„œ ์„ธ ์„ ํ˜• ๋ณ€ํ™˜์œผ๋กœ Query(Q), Key(K), Value(V)๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํ˜„์žฌ ํ† ํฐ์˜ Q๊ฐ€ ๊ณผ๊ฑฐ ํ† ํฐ๋“ค์˜ K์™€ ์–ผ๋งˆ๋‚˜ ๊ด€๋ จ ์žˆ๋Š”์ง€ ์ ์ˆ˜๋กœ ๊ณ„์‚ฐํ•˜๊ณ , ๊ทธ ์ ์ˆ˜๋กœ V๋ฅผ ๊ฐ€์ค‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

Q = XW_Q, K = XW_K, V = XW_V
Attention(Q, K, V) = softmax((QK^T) / sqrt(d_head) + causal_mask) V
  • Causal mask: ์œ„์น˜ i์˜ ํ† ํฐ์ด ๋ฏธ๋ž˜ ์œ„์น˜ j > i๋ฅผ ๋ณด์ง€ ๋ชปํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ํ•™์Šต ์ค‘์—๋Š” ์ „์ฒด ์‹œํ€€์Šค๋ฅผ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ๋„ ๋‹ค์Œ ํ† ํฐ ์˜ˆ์ธก ๊ทœ์น™์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Multi-head attention(MHA): ์—ฌ๋Ÿฌ head๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ํ‘œํ˜„ ๋ถ€๋ถ„๊ณต๊ฐ„์—์„œ ๊ด€๊ณ„๋ฅผ ๊ณ„์‚ฐํ•œ ๋’ค ํ•ฉ์นฉ๋‹ˆ๋‹ค. ๋ฌธ๋ฒ•, ์ฐธ์กฐ, ์žฅ๊ฑฐ๋ฆฌ ์˜์กด์„ฑ ๊ฐ™์€ ํŒจํ„ด์„ ๋ณ‘๋ ฌ๋กœ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • GQA/MQA: Query head๋ณด๋‹ค Key/Value head ์ˆ˜๋ฅผ ์ ๊ฒŒ ๋‘ก๋‹ˆ๋‹ค. GQA(Grouped Query Attention)๋Š” ์—ฌ๋Ÿฌ Q head๊ฐ€ ํ•˜๋‚˜์˜ KV head๋ฅผ ๊ณต์œ ํ•˜๊ณ , MQA(Multi-Query Attention)๋Š” ๋ชจ๋“  Q head๊ฐ€ ํ•˜๋‚˜์˜ KV head๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ํ’ˆ์งˆ-๋ฉ”๋ชจ๋ฆฌ ์ ˆ์ถฉ์„ ํ†ตํ•ด KV cache ํฌ๊ธฐ์™€ decode ๋Œ€์—ญํญ ์š”๊ตฌ๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.

Self-attention์˜ score ํ–‰๋ ฌ์€ ์‹œํ€€์Šค ๊ธธ์ด์— ๋”ฐ๋ผ S x S๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ‘œ์ค€์ ์ธ ์ „์ฒด attention์€ ํ•™์Šต ๋˜๋Š” ๊ธด prefill์—์„œ ์‹œ๊ฐ„๊ณผ ์ค‘๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ O(S^2)๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์‹ค์ œ wall-clock ์‹œ๊ฐ„์€ FLOPs๋งŒ์ด ์•„๋‹ˆ๋ผ GPU HBM๊ณผ SRAM ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ์ด๋™, ๊ตฌํ˜„ ์ปค๋„, ๋ฐฐ์น˜ ํ˜•ํƒœ์— ๋”ฐ๋ผ์„œ๋„ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

FFN๊ณผ ํ™œ์„ฑํ™” ํ•จ์ˆ˜

Attention์ด ํ† ํฐ ๊ฐ„ ์ •๋ณด๋ฅผ ์„ž์€ ๋’ค, FFN์€ ๊ฐ ํ† ํฐ์— ๋…๋ฆฝ์ ์œผ๋กœ ๋น„์„ ํ˜• ๋ณ€ํ™˜์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํ˜•ํƒœ๋Š” ๋‘ ๊ฐœ์˜ ์„ ํ˜•์ธต๊ณผ ํ™œ์„ฑํ™” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

FFN(x) = W_down * activation(W_up * x)

๋งŽ์€ ์ตœ์‹  LLM์€ GELU ๋Œ€์‹  SwiGLU ๊ฐ™์€ gated FFN์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. FFN์˜ ์ค‘๊ฐ„ ์ฐจ์›์€ ๋ณดํ†ต d_model๋ณด๋‹ค ํฌ๋ฏ€๋กœ, dense ๋ชจ๋ธ์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์—ฐ์‚ฐ์˜ ์ƒ๋‹น ๋ถ€๋ถ„์€ FFN์— ์žˆ์Šต๋‹ˆ๋‹ค. MoE Analysis๋Š” ์ด FFN์„ ์—ฌ๋Ÿฌ ์ „๋ฌธ๊ฐ€๋กœ ๋‚˜๋ˆ„๊ณ  ์ผ๋ถ€๋งŒ ํ™œ์„ฑํ™”ํ•˜๋Š” ํฌ์†Œ ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๋Œ€ํ‘œ ๊ตฌ์กฐ์˜ ๊ด€๊ณ„

๊ตฌ์กฐ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ ๊ฐ•์  LLM์—์„œ์˜ ์œ„์น˜
Encoder-only ์ „์ฒด ์ž…๋ ฅ์„ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ธ์ฝ”๋”ฉ ๋ถ„๋ฅ˜, ๊ฒ€์ƒ‰ ์ž„๋ฒ ๋”ฉ BERT ๊ณ„์—ด, retriever
Encoder-decoder ์ž…๋ ฅ์„ ์ธ์ฝ”๋”ฉํ•˜๊ณ  ์ถœ๋ ฅ์€ ์ƒ์„ฑ ๋ฒˆ์—ญ, ์กฐ๊ฑด๋ถ€ ์ƒ์„ฑ T5 ๊ณ„์—ด
Decoder-only ์•ž ๋ฌธ๋งฅ๋งŒ ๋ณด๊ณ  ๋‹ค์Œ ํ† ํฐ ์ƒ์„ฑ ๋ฒ”์šฉ ์ƒ์„ฑ๊ณผ in-context learning GPT, Llama ๋“ฑ ํ˜„๋Œ€ LLM์˜ ์ฃผ๋ฅ˜

4. ํ™•๋ฅ ๋ถ„ํฌ์™€ ์ƒ์„ฑ ์ œ์–ด

๋ชจ๋ธ์€ ๋‹ต์„ ๋ฌธ์ž์—ด๋กœ ์ง์ ‘ ๊ณ ๋ฅด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋งค ๋‹จ๊ณ„ ์–ดํœ˜ ์ „์ฒด์˜ ํ™•๋ฅ ๋ถ„ํฌ๋ฅผ ๋ƒ…๋‹ˆ๋‹ค. ์ƒ˜ํ”Œ๋Ÿฌ๋Š” ์ด ๋ถ„ํฌ์—์„œ ์‹ค์ œ ์ถœ๋ ฅ ํ† ํฐ์„ ๊ณ ๋ฅด๋Š” ์ •์ฑ…์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ชจ๋ธ๊ณผ ํ”„๋กฌํ”„ํŠธ๋„ ์ƒ˜ํ”Œ๋Ÿฌ ์„ค์ •์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌธ์žฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Temperature, top-k, top-p

Temperature T๋Š” logits์˜ ๋‚ ์นด๋กœ์›€์„ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.

p_i = softmax(logits_i / T)

T < 1์ด๋ฉด ๋†’์€ ํ™•๋ฅ  ํ›„๋ณด์— ๋” ์ง‘์ค‘ํ•˜๊ณ , T > 1์ด๋ฉด ๋ถ„ํฌ๊ฐ€ ํ‰ํ‰ํ•ด์ ธ ๋‹ค์–‘์„ฑ์ด ์ปค์ง‘๋‹ˆ๋‹ค. T = 0์€ ์‹ค๋ฌด์—์„œ ๋ณดํ†ต ์ƒ˜ํ”Œ๋ง์„ ๋„๊ณ  greedy ์„ ํƒ์„ ๋œปํ•˜๋Š” ๊ด€๋ก€๋กœ ์“ฐ์ž…๋‹ˆ๋‹ค.

๋ฐฉ์‹ ๋™์ž‘ ์ ํ•ฉํ•œ ๊ฒฝ์šฐ ์ฃผ์˜์ 
Greedy ๊ฐ€์žฅ ๋†’์€ ํ™•๋ฅ ์˜ ํ† ํฐ ์„ ํƒ ์žฌํ˜„์„ฑ, ๊ฐ„๋‹จํ•œ ์ถ”์ถœ ๋ฐ˜๋ณต์ ์ด๊ฑฐ๋‚˜ ๋‹จ์กฐ๋กœ์šธ ์ˆ˜ ์žˆ์Œ
Temperature ๋ถ„ํฌ์˜ ๋‚ ์นด๋กœ์›€ ์กฐ์ ˆ ์ฐฝ์ž‘์„ฑ๊ณผ ์•ˆ์ •์„ฑ์˜ ์กฐ์ ˆ ๋‹จ๋…์œผ๋กœ ๊ทน์ €ํ™•๋ฅ  ํ›„๋ณด๋ฅผ ๋ง‰์ง€๋Š” ๋ชปํ•จ
Top-k ์ƒ์œ„ k๊ฐœ ํ›„๋ณด๋งŒ ๋‚จ๊น€ ํ›„๋ณด ์ˆ˜๋ฅผ ๊ณ ์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๋ฌธ๋งฅ๋ณ„ ํ™•๋ฅ  ์งˆ๋Ÿ‰ ์ฐจ์ด๋ฅผ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•จ
Top-p (nucleus) ๋ˆ„์  ํ™•๋ฅ  p๊นŒ์ง€ ํ›„๋ณด๋ฅผ ๋‚จ๊น€ ์ผ๋ฐ˜ ๋Œ€ํ™” ์ƒ์„ฑ ํ›„๋ณด ์ˆ˜๊ฐ€ ๋ฌธ๋งฅ๋งˆ๋‹ค ๋‹ฌ๋ผ์ง
Repetition penalty ์ด๋ฏธ ๋‚˜์˜จ ํ† ํฐ์˜ ์ ์ˆ˜๋ฅผ ๋‚ฎ์ถค ๋ฐ˜๋ณต ์™„ํ™” ๊ณผํ•˜๋ฉด ๋ฌธ๋ฒ•๊ณผ ์šฉ์–ด ์ผ๊ด€์„ฑ์ด ์†์ƒ๋  ์ˆ˜ ์žˆ์Œ

์ •ํ™•์„ฑ์€ ์ƒ˜ํ”Œ๋ง๋งŒ์œผ๋กœ ๋ณด์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ์ด ํ•™์Šตํ•˜์ง€ ์•Š์€ ์‚ฌ์‹ค์„ ๊ทธ๋Ÿด๋“ฏํ•˜๊ฒŒ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ตœ์‹  ์ •๋ณด๋‚˜ ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ๋‹ต์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ๊ฒ€์ƒ‰, ๋„๊ตฌ ํ˜ธ์ถœ, ์ธ์šฉ ๊ฒ€์ฆ, ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ ๊ฒ€์‚ฌ ๊ฐ™์€ ์™ธ๋ถ€ ๊ฒ€์ฆ ๊ฒฝ๋กœ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. RAG Analysis๋Š” ์™ธ๋ถ€ ์ง€์‹์„ ๋ฌธ๋งฅ์œผ๋กœ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

5. ํ•™์Šต๊ณผ ํฌ์ŠคํŠธํŠธ๋ ˆ์ด๋‹

Pretraining: ๋‹ค์Œ ํ† ํฐ ์˜ˆ์ธก

์‚ฌ์ „ํ•™์Šต์€ ๋Œ€๊ทœ๋ชจ ํ…์ŠคํŠธ ํ† ํฐ์—ด์—์„œ ๋‹ค์Œ ํ† ํฐ์˜ negative log-likelihood, ์ฆ‰ cross-entropy๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ x_1, ..., x_{t-1}๊ฐ€ ์žˆ์„ ๋•Œ ์ •๋‹ต x_t์˜ ํ™•๋ฅ ์„ ๋†’์ด๋„๋ก ๋ชจ๋“  ๊ฐ€์ค‘์น˜๋ฅผ ์—ญ์ „ํŒŒ๋กœ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

loss = -sum_t log p_theta(x_t | x_<t)

ํ•™์Šต ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์€ ์ˆ˜์ง‘๋งŒํผ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ค‘๋ณต ์ œ๊ฑฐ, ํ’ˆ์งˆ ํ•„ํ„ฐ๋ง, ๋ผ์ด์„ ์Šค์™€ ๊ฐœ์ธ์ •๋ณด ๊ฒ€ํ† , ์–ธ์–ด/๋„๋ฉ”์ธ ๋น„์œจ ์กฐ์ •, ์˜ค์—ผ๋œ ํ‰๊ฐ€์…‹ ์ œ๊ฑฐ๊ฐ€ ํ•™์Šต ํ’ˆ์งˆ๊ณผ ์•ˆ์ „์„ฑ์— ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. ๋ชจ๋ธ ํฌ๊ธฐ๋งŒ ํ‚ค์šฐ๊ณ  ๊ณ ํ’ˆ์งˆ ๋ฐ์ดํ„ฐ๋‚˜ ์ถฉ๋ถ„ํ•œ ํ•™์Šต ํ† ํฐ์„ ๋Š˜๋ฆฌ์ง€ ์•Š์œผ๋ฉด compute๋ฅผ ๋น„ํšจ์œจ์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ„์‚ฐ ํ•™์Šต๊ณผ ๋ฉ”๋ชจ๋ฆฌ

๋Œ€ํ˜• ๋ชจ๋ธ ํ•™์Šต์—์„œ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ, gradient, optimizer state, activation์ด ๋ชจ๋‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ GPU์— ์ž‘์—…์„ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.

๋ฐฉ์‹ ๋‚˜๋ˆ„๋Š” ๋Œ€์ƒ ์ฃผ๋œ ๋ชฉ์  ๋Œ€ํ‘œ ๋น„์šฉ
Data Parallelism ์„œ๋กœ ๋‹ค๋ฅธ ๋ฏธ๋‹ˆ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋Ÿ‰ ํ™•์žฅ gradient all-reduce
Tensor Parallelism ๋ ˆ์ด์–ด ์•ˆ์˜ ํฐ ํ–‰๋ ฌ ํ•œ ๋ ˆ์ด์–ด๋ฅผ ์—ฌ๋Ÿฌ GPU์— ์ ์žฌ ๋ ˆ์ด์–ด๋งˆ๋‹ค collective ํ†ต์‹ 
Pipeline Parallelism ์—ฐ์†๋œ ๋ ˆ์ด์–ด ๋ชจ๋ธ ๊นŠ์ด๋ฅผ GPU๋“ค์— ๋ถ„์‚ฐ pipeline bubble, microbatch ๊ด€๋ฆฌ
Expert Parallelism MoE ์ „๋ฌธ๊ฐ€ ๋งŽ์€ expert์˜ ๋ถ„์‚ฐ ์ ์žฌ token all-to-all

Activation checkpointing์€ ์ˆœ์ „ํŒŒ ์ค‘๊ฐ„๊ฐ’์„ ์ „๋ถ€ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์—ญ์ „ํŒŒ ๋•Œ ์ผ๋ถ€๋ฅผ ์žฌ๊ณ„์‚ฐํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•„๋ผ๋Š” ๋Œ€ํ‘œ์  ์‹œ๊ฐ„-๊ณต๊ฐ„ ์ ˆ์ถฉ์ž…๋‹ˆ๋‹ค. ํ•™์Šต์—์„œ๋Š” ์ด์ฒ˜๋Ÿผ ์žฌ๊ณ„์‚ฐ์ด ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‚ฌ์šฉ์ž ์ง€์—ฐ ์‹œ๊ฐ„์ด ์ค‘์š”ํ•œ ์ถ”๋ก ์—์„œ๋Š” ๊ฐ™์€ ์„ ํƒ์ด ํ•ญ์ƒ ์ด๋“์ธ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

Post-training: ์ง€์‹œ ๋”ฐ๋ฅด๊ธฐ์™€ ์„ ํ˜ธ ์ •๋ ฌ

์‚ฌ์ „ํ•™์Šต ๋ชจ๋ธ์€ ๋ฌธ์žฅ์„ ์ด์–ด ์“ฐ๋Š” ๋Šฅ๋ ฅ์€ ์žˆ์ง€๋งŒ, ๋Œ€ํ™” ๊ทœ์น™์ด๋‚˜ ์‚ฌ์šฉ์ž์˜ ์˜๋„๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๋”ฐ๋ฅด๋„๋ก ๋ณด์žฅ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. post-training์€ ์ด ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์„ ์‹ค์ œ assistant๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

  • SFT(Supervised Fine-Tuning): ์‚ฌ๋žŒ์ด ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์ •์ œํ•œ ์ง€์‹œ-์‘๋‹ต ์˜ˆ์‹œ๋กœ ์›ํ•˜๋Š” ํ˜•์‹, ๋Œ€ํ™” ๋ฐฉ์‹, ์ž‘์—… ์ˆ˜ํ–‰ ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.
  • Preference learning: ๊ฐ™์€ ํ”„๋กฌํ”„ํŠธ์˜ ์—ฌ๋Ÿฌ ์‘๋‹ต ์ค‘ ์„ ํ˜ธ๋˜๋Š” ์‘๋‹ต์„ ์ด์šฉํ•ด ๋” ๋„์›€์ด ๋˜๋Š” ๋ฐฉํ–ฅ์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. RLHF๋Š” ๋ณด์ƒ ๋ชจ๋ธ๊ณผ ๊ฐ•ํ™”ํ•™์Šต์„ ์‚ฌ์šฉํ•˜๊ณ , DPO๋Š” ์„ ํ˜ธ ์Œ์—์„œ ์ง์ ‘ ์ •์ฑ…์„ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • Safety tuning๊ณผ ํ‰๊ฐ€: ์œ ํ•ด ์š”์ฒญ ๊ฑฐ์ ˆ, ๊ฐœ์ธ์ •๋ณด ๋…ธ์ถœ, jailbreak ์ €ํ•ญ, ํŽธํ–ฅ, ํ™˜๊ฐ ๋“ฑ์„ ํ‰๊ฐ€ํ•˜๊ณ  ์™„ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ ์ •๋ ฌ์€ ํ•œ ๋ฒˆ์˜ ํ•™์Šต์œผ๋กœ ๋๋‚˜๋Š” ์„ฑ์งˆ์ด ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ, ์ •์ฑ…, ๋ฐฐํฌ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋ฐ˜๋ณต ๊ฒ€์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

6. ์ถ”๋ก ์˜ ๋‘ ๋‹จ๊ณ„: Prefill๊ณผ Decode

Prefill

Prefill์€ ํ”„๋กฌํ”„ํŠธ์˜ ๋ชจ๋“  ํ† ํฐ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. causal mask๊ฐ€ ์žˆ์–ด๋„ ํ”„๋กฌํ”„ํŠธ ๋‚ด๋ถ€ ํ† ํฐ์€ ํ•œ ๋ฒˆ์˜ ํฐ ํ–‰๋ ฌ ์—ฐ์‚ฐ์œผ๋กœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ ˆ์ด์–ด๋Š” ๋ชจ๋“  ์ž…๋ ฅ ์œ„์น˜์˜ K/V๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ KV cache์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ํ”„๋กฌํ”„ํŠธ ๊ธธ์ด์™€ ์ถฉ๋ถ„ํ•œ ๋ฐฐ์น˜์—์„œ๋Š” ํฐ GEMM์ด GPU tensor core๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฏ€๋กœ compute-bound ์„ฑ๊ฒฉ์ด ๊ฐ•ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งค์šฐ ๊ธด ๋ฌธ๋งฅ์—์„œ๋Š” attention์˜ O(S^2) ์ž‘์—…๊ณผ HBM I/O๊ฐ€ ์ปค์ ธ, prefill๋„ ๋ฉ”๋ชจ๋ฆฌ์™€ ์ปค๋„ ํšจ์œจ์˜ ์˜ํ–ฅ์„ ํฌ๊ฒŒ ๋ฐ›์Šต๋‹ˆ๋‹ค. FlashAttention Analysis๋Š” ์ด ๋‹จ๊ณ„์˜ ์ค‘๊ฐ„ attention ํ–‰๋ ฌ์„ HBM์— ๋งŒ๋“ค์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Decode

Decode๋Š” ์ƒˆ ํ† ํฐ ํ•˜๋‚˜๋ฅผ ์ž…๋ ฅํ•ด ๋‹ค์Œ ํ† ํฐ ํ•˜๋‚˜์˜ ๋ถ„ํฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฃจํ”„์ž…๋‹ˆ๋‹ค. ์ƒˆ Q๋Š” ๊ธธ์ด 1์ด์ง€๋งŒ, attention์€ ๊ณผ๊ฑฐ ์ „์ฒด K/V๋ฅผ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋„ ๊ฐ ํ† ํฐ๋งˆ๋‹ค ๋‹ค์‹œ ์ฝ์œผ๋ฏ€๋กœ, ์ž‘์€ ๋ฐฐ์น˜์—์„œ๋Š” ํ–‰๋ ฌ-๋ฒกํ„ฐ ๊ณฑ(GEMV)์— ๊ฐ€๊นŒ์›Œ์ ธ ์—ฐ์‚ฐ ์žฅ์น˜๋ณด๋‹ค HBM ๋Œ€์—ญํญ์ด ๋จผ์ € ํฌํ™”๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

๋ฐฐ์น˜๋ฅผ ํฌ๊ฒŒ ํ•˜๋ฉด ์—ฌ๋Ÿฌ ์š”์ฒญ์˜ decode๋ฅผ ๋ฌถ์–ด ํ–‰๋ ฌ ์—ฐ์‚ฐ ํšจ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋„ˆ๋ฌด ํฐ ๋ฐฐ์น˜๋Š” ๊ฐœ๋ณ„ ์š”์ฒญ์˜ ํ† ํฐ ๊ฐ„ ์ง€์—ฐ์‹œ๊ฐ„(ITL)์„ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฒ˜๋ฆฌ๋Ÿ‰-์ง€์—ฐ์‹œ๊ฐ„ ์ ˆ์ถฉ ๋•Œ๋ฌธ์— ์„œ๋น™ ์—”์ง„์€ ํ† ํฐ ๋‹จ์œ„๋กœ ์š”์ฒญ์„ ์„ž๋Š” Continuous Batching Analysis๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Prefill decode and KV cache flow

๊ทธ๋ฆผ 4. prefill์€ ํ”„๋กฌํ”„ํŠธ ์ „์ฒด์˜ KV๋ฅผ ๋งŒ๋“ค๊ณ , decode forward๋Š” ๊ณผ๊ฑฐ KV๋ฅผ ์ฝ๋Š” ๋™์‹œ์— ์ƒˆ ํ† ํฐ์˜ K/V๋ฅผ cache์— ์ถ”๊ฐ€ํ•œ๋‹ค.

์‚ฌ์šฉ์ž์™€ ์šด์˜์ž๊ฐ€ ๋ณด๋Š” ์ง€ํ‘œ

์ง€ํ‘œ ์˜๋ฏธ ์ฃผ๋กœ ์˜ํ–ฅ์„ ์ฃผ๋Š” ์š”์†Œ
TTFT (Time To First Token) ์š”์ฒญ๋ถ€ํ„ฐ ์ฒซ ์ถœ๋ ฅ ํ† ํฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„ ๋Œ€๊ธฐ์—ด, ํ† ํฐํ™”, prefill, prefix cache ์ ์ค‘
TPOT (Time Per Output Token) ์ถœ๋ ฅ ํ† ํฐ ํ•˜๋‚˜๋‹น ํ‰๊ท  ์ƒ์„ฑ ์‹œ๊ฐ„ decode ๋Œ€์—ญํญ, ๋ฐฐ์น˜, ์Šค์ผ€์ค„๋ง
ITL (Inter-Token Latency) ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ์ธ์ ‘ ํ† ํฐ ์‚ฌ์ด ๊ฐ„๊ฒฉ iteration ์‹œ๊ฐ„, batch ๋ณ€๋™, ํ†ต์‹ 
Throughput ๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ์ฒ˜๋ฆฌํ•œ ์ž…๋ ฅ/์ถœ๋ ฅ ํ† ํฐ ์ˆ˜ GPU ํ™œ์šฉ๋ฅ , ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰, batch, cache ์žฌ์‚ฌ์šฉ
Goodput SLO๋ฅผ ๋งŒ์กฑํ•˜๋ฉด์„œ ์ฒ˜๋ฆฌํ•œ ์š”์ฒญ ๋˜๋Š” ํ† ํฐ ์ˆ˜ throughput๊ณผ tail latency์˜ ๊ท ํ˜•

TTFT๊ฐ€ ๋‚˜์˜๋ฉด ๊ธด ํ”„๋กฌํ”„ํŠธ, ๋Œ€๊ธฐ์—ด, prefill ์ž์› ๋ถ€์กฑ๋ถ€ํ„ฐ ํ™•์ธํ•˜๊ณ , TPOT/ITL์ด ๋‚˜์˜๋ฉด decode ๋ฐฐ์น˜, HBM ๋Œ€์—ญํญ, ๋ชจ๋ธ ๋ณ‘๋ ฌ ํ†ต์‹ , KV cache ๋ฐฐ์น˜๋ฅผ ๋จผ์ € ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ํ‰๊ท  throughput๋งŒ ๋ณด๋ฉด ๊ธด tail latency๋‚˜ ์‚ฌ์šฉ์ž ์ฒด๊ฐ ๋ฌธ์ œ๋ฅผ ๋†“์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

7. KV Cache์™€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฐ์ •

์™œ KV๋ฅผ ์ €์žฅํ•˜๋Š”๊ฐ€

์ƒˆ ํ† ํฐ์„ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ๊ณผ๊ฑฐ ๋ชจ๋“  ํ† ํฐ์˜ K/V๋ฅผ ๋งค๋ฒˆ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋ฉด, ์ƒ์„ฑ ๊ธธ์ด๊ฐ€ ๋Š˜์ˆ˜๋ก ๊ฐ™์€ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. KV cache๋Š” ๊ฐ ๋ ˆ์ด์–ด์—์„œ ๊ณผ๊ฑฐ ํ† ํฐ์˜ K/V๋ฅผ ํ•œ ๋ฒˆ ๊ณ„์‚ฐํ•ด ์ €์žฅํ•˜๊ณ  ์ดํ›„ decode์—์„œ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋•๋ถ„์— ์ƒˆ ํ† ํฐ์˜ projection๋งŒ ๊ณ„์‚ฐํ•˜๋ฉด ๋˜์ง€๋งŒ, ์ €์žฅ๋œ ์บ์‹œ๋ฅผ ์ฝ์–ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰๊ณผ ๋Œ€์—ญํญ์ด ํ•ต์‹ฌ ์ œ์•ฝ์ด ๋ฉ๋‹ˆ๋‹ค.

KV cache์˜ ๋Œ€๋žต์ ์ธ ํฌ๊ธฐ๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

KV_bytes = 2 * L * n_kv_heads * d_head * seq_len * batch * dtype_bytes
  • 2: Key์™€ Value๋ฅผ ๋ชจ๋‘ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • L: Transformer layer ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • n_kv_heads * d_head: ๋ ˆ์ด์–ด๋‹น KV ํ‘œํ˜„์˜ ํญ์ž…๋‹ˆ๋‹ค. MHA์—์„œ๋Š” ๋Œ€์ฒด๋กœ d_model๊ณผ ๊ฐ™๊ณ , GQA/MQA์—์„œ๋Š” ๋” ์ž‘์Šต๋‹ˆ๋‹ค.
  • seq_len๊ณผ batch: ๊ฐ๊ฐ ๋ฌธ๋งฅ ๊ธธ์ด์™€ ๋™์‹œ์— ์‚ด์•„ ์žˆ๋Š” ์š”์ฒญ ์ˆ˜์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด MHA ๋ชจ๋ธ์ด L=80, d_model=8192, seq_len=8192, batch=1, FP16(2 bytes)๋ผ๋ฉด KV cache๋Š” ์•ฝ 21.5 GB(์‹ญ์ง„ ๊ธฐ์ค€)์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ชจ๋ธ์—์„œ GQA๊ฐ€ KV head ์ˆ˜๋ฅผ query head ์ˆ˜์˜ 1/8๋กœ ์ค„์ด๋ฉด, ๋‹ค๋ฅธ ์กฐ๊ฑด์ด ๊ฐ™์„ ๋•Œ KV cache๋„ ๋Œ€๋žต 1/8 ์ˆ˜์ค€์œผ๋กœ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ์‹ค์ œ ์‚ฌ์šฉ๋Ÿ‰์—๋Š” block table, ์ •๋ ฌ, ์ž„์‹œ ๋ฒ„ํผ, ๋ชจ๋ธ ๊ตฌํ˜„์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋”ํ•ด์ง‘๋‹ˆ๋‹ค.

๊ฐ€์ค‘์น˜๋„ ๋ณ„๋„๋กœ ํฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. 70B ํŒŒ๋ผ๋ฏธํ„ฐ ๋ชจ๋ธ์€ ๊ฐ€์ค‘์น˜๋งŒ FP16/BF16์—์„œ ๋Œ€๋žต 140 GB๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹จ์ผ GPU์— ๋งž์ง€ ์•Š๋Š” ๋ชจ๋ธ์€ ์–‘์žํ™” ๋˜๋Š” tensor/pipeline parallelism์ด ํ•„์š”ํ•˜๊ณ , ๋‚จ์€ ๋ฉ”๋ชจ๋ฆฌ ์˜ˆ์‚ฐ์ด ๊ณง ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ KV cache์™€ ๋™์‹œ ์š”์ฒญ ์ˆ˜๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

KV cache ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ์ถ•

๋ฌธ์ œ ๋Œ€ํ‘œ ํ•ด๋ฒ• ์ค„์ด๋Š” ๋Œ€์ƒ ํ•ต์‹ฌ ์ ˆ์ถฉ
ํ• ๋‹น ๋‹จํŽธํ™” PagedAttention ์˜ˆ์•ฝ/๋‹จํŽธํ™” ๋‚ญ๋น„ ๋ธ”๋ก ๊ฐ„์ ‘ ์ฐธ์กฐ์™€ ์ปค๋„ ๋ณต์žก๋„
๊ณตํ†ต ํ”„๋กฌํ”„ํŠธ ๋ฐ˜๋ณต Prefix caching ์ค‘๋ณต prefill ์ •ํ™•ํ•œ prefix ์ผ์น˜์™€ ์บ์‹œ ์ •์ฑ…
์บ์‹œ ์šฉ๋Ÿ‰๊ณผ ์ฝ๊ธฐ๋Ÿ‰ GQA/MQA, MLA, KV quantization KV head ์ˆ˜ ๋˜๋Š” bit ์ˆ˜ ์ •ํ™•๋„์™€ ๋ชจ๋ธ/์ปค๋„ ํ˜ธํ™˜์„ฑ
๊ธด ๋ฌธ๋งฅ์˜ ๋ถˆํ•„์š”ํ•œ KV Sliding window, token eviction ๋ณด์กด ํ† ํฐ ์ˆ˜ ์žฅ๊ฑฐ๋ฆฌ ์ •๋ณด ์†์‹ค ์œ„ํ—˜
HBM ๋ถ€์กฑ CPU/CXL/NVMe offloading GPU ์ƒ์ฃผ KV ์ „์†ก ์ง€์—ฐ๊ณผ ์˜ˆ์ธก ์‹คํŒจ ๋น„์šฉ

PagedAttention Analysis, KV Cache Quantization Analysis, KV Cache Offloading Analysis, Prefix Caching Analysis๋Š” ์œ„ ์ถ•์„ ๊ฐ๊ฐ ๋” ๊นŠ๊ฒŒ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

8. ์„œ๋น™ ์‹œ์Šคํ…œ์˜ ์„ค๊ณ„ ํŒ๋‹จ

LLM ์„œ๋น™์€ ๋‹จ์ˆœํžˆ model.generate()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ผ์ด ์•„๋‹ˆ๋ผ, ์ œํ•œ๋œ ๊ฐ€์†๊ธฐ ๋ฉ”๋ชจ๋ฆฌ์™€ SLO ์•ˆ์—์„œ ์„œ๋กœ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅธ ์š”์ฒญ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์ตœ์ ํ™”๋“ค์€ ์„œ๋กœ ๋Œ€์ฒด์žฌ๋ผ๊ธฐ๋ณด๋‹ค ๋ณ‘๋ชฉ์ด ๋‹ค๋ฅด๋ฏ€๋กœ ๋Œ€๊ฐœ ํ•จ๊ป˜ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ตœ์ ํ™” ์ง์ ‘ ํ•ด๊ฒฐํ•˜๋Š” ๋ณ‘๋ชฉ ํŠนํžˆ ํšจ๊ณผ์ ์ธ ์ƒํ™ฉ
FlashAttention attention์˜ HBM ์ค‘๊ฐ„๊ฐ’ I/O ๊ธด prefill, ํ•™์Šต, attention-heavy workload
PagedAttention ๋™์  KV ํ• ๋‹น์˜ ๋‹จํŽธํ™” ๊ธธ์ด๊ฐ€ ๋‹ค์–‘ํ•œ ๋™์‹œ ์š”์ฒญ
Continuous batching ์™„๋ฃŒ ์š”์ฒญ ๋•Œ๋ฌธ์— ์ƒ๊ธฐ๋Š” GPU ๋นˆ์ž๋ฆฌ ๋‹ค์ค‘ ์‚ฌ์šฉ์ž ์˜จ๋ผ์ธ ์„œ๋น™
Prefix caching ๊ฐ™์€ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ/๋ฌธ์„œ์˜ ์žฌ๊ณ„์‚ฐ ๋ฉ€ํ‹ฐํ„ด ๋Œ€ํ™”, RAG, ์—์ด์ „ํŠธ
Speculative decoding ์ˆœ์ฐจ decode iteration ์ˆ˜ ๋†’์€ draft acceptance๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ƒ์„ฑ
Weight/KV quantization ๋ชจ๋ธ๊ณผ ์บ์‹œ์˜ ์šฉ๋Ÿ‰ยท๋Œ€์—ญํญ ๋ฉ”๋ชจ๋ฆฌ ์ œ์•ฝ, ๋†’์€ ๋™์‹œ์„ฑ
P/D disaggregation prefill๊ณผ decode์˜ ์ž์› ๊ฐ„์„ญ TTFT์™€ TPOT๋ฅผ ๋™์‹œ์— ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ

๋ชจ๋ธ ๋ณ‘๋ ฌํ™”๋„ ๋ชจ๋ธ ํฌ๊ธฐ์™€ ๋„คํŠธ์›Œํฌ์— ๋งž์ถฐ ๊ณจ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. Tensor parallelism์€ ๋ ˆ์ด์–ด ๋‚ด๋ถ€๋ฅผ ๋‚˜๋ˆ  ๋‹จ์ผ ์š”์ฒญ ์ง€์—ฐ์‹œ๊ฐ„์„ ๋‚ฎ์ถ”์ง€๋งŒ ๋งค ๋ ˆ์ด์–ด ํ†ต์‹ ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Pipeline parallelism์€ ๋ ˆ์ด์–ด ๋ฌถ์Œ์„ ๋‚˜๋ˆ„์ง€๋งŒ ์ž‘์€ ๋ฐฐ์น˜์—์„œ pipeline bubble์ด ์ƒ๊น๋‹ˆ๋‹ค. MoE๋Š” expert parallelism๊ณผ all-to-all ํ†ต์‹ ์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. LLM Inference Engine Analysis๋Š” vLLM, TensorRT-LLM, SGLang, llama.cpp ๊ฐ™์€ ๊ตฌํ˜„์ฒด์˜ ์„ ํƒ ๊ธฐ์ค€์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

9. ์žฅ์ , ํ•œ๊ณ„, ์˜คํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ 

์žฅ์  ํ•œ๊ณ„์™€ ์ฃผ์˜์ 
ํ•˜๋‚˜์˜ ์ƒ์„ฑ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์—ฌ๋Ÿฌ ์–ธ์–ด ์ž‘์—…์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค ๊ทธ๋Ÿด๋“ฏํ•œ ํ…์ŠคํŠธ ์ƒ์„ฑ์€ ์‚ฌ์‹ค์„ฑ์ด๋‚˜ ์ตœ์‹ ์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค
Transformer๋Š” ํ•™์Šต์—์„œ ๊ธด ์‹œํ€€์Šค์™€ ๋Œ€๊ทœ๋ชจ ๋ณ‘๋ ฌํ™”์— ์ž˜ ๋งž๋Š”๋‹ค ์ „์ฒด attention์€ ๊ธด ๋ฌธ๋งฅ์—์„œ O(S^2) ๋น„์šฉ์ด ๋“ ๋‹ค
prompt์™€ ์˜ˆ์‹œ๋งŒ์œผ๋กœ ์ƒˆ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” in-context learning์ด ๊ฐ€๋Šฅํ•˜๋‹ค ํ”„๋กฌํ”„ํŠธ ํ˜•์‹, ํ† ํฐํ™”, ์œ„์น˜์— ๋ฏผ๊ฐํ•˜๋ฉฐ ๊ฒฐ๊ณผ๊ฐ€ ํ™•๋ฅ ์ ์ด๋‹ค
post-training์œผ๋กœ ๋Œ€ํ™” ํ’ˆ์งˆ๊ณผ ์•ˆ์ „์„ฑ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค ์ •๋ ฌ์€ ์™„์ „ํ•œ ์•ˆ์ „์„ฑ ๋˜๋Š” ์˜๋„ ์ดํ•ด์˜ ๋ณด์žฅ์ด ์•„๋‹ˆ๋‹ค
PagedAttention, ์–‘์žํ™”, ์บ์‹ฑ ๋“ฑ ์‹œ์Šคํ…œ ์ตœ์ ํ™” ์—ฌ์ง€๊ฐ€ ํฌ๋‹ค ์ถ”๋ก  ์‹œ ๊ฐ€์ค‘์น˜์™€ KV cache๊ฐ€ ์šฉ๋Ÿ‰ยท๋Œ€์—ญํญยทtail latency๋ฅผ ์ œํ•œํ•œ๋‹ค

LLM์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์ถ”๋ก  ๊ทœ์น™ ์—”์ง„์„ ๊ทธ๋Œ€๋กœ ๋Œ€์ฒดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ๋งฅ์— ์žˆ๋Š” ํŒจํ„ด์„ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค์Œ ํ† ํฐ์˜ ๋ถ„ํฌ๋ฅผ ๋ชจ๋ธ๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ทผ๊ฑฐ๊ฐ€ ํ•„์š”ํ•œ ๋‹ต์€ ์ถœ์ฒ˜ ์ œ๊ณต๊ณผ ๊ฒ€์ฆ ๋„๊ตฌ๋ฅผ ๊ฒฐํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ "๋ฌธ๋งฅ ์ฐฝ์ด ํฌ๋‹ค"์™€ "์•„์ฃผ ๊ธด ์ž…๋ ฅ์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ •ํ™•ํžˆ ์ฐพ๋Š”๋‹ค"๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ฃผ์žฅ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์›Œํฌ๋กœ๋“œ ๊ธธ์ด, ๊ฒ€์ƒ‰ ์ •ํ™•๋„, ๋น„์šฉ, ์ง€์—ฐ์‹œ๊ฐ„์„ ํ•จ๊ป˜ ์ธก์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

10. ๊ด€๋ จ ๊ธฐ์ˆ ๊ณผ ์ฝ๋Š” ์ˆœ์„œ

๋‚ด๋ถ€ ๋ฌธ์„œ

์ฃผ์ œ ๋ฌธ์„œ ์ด ๋ฌธ์„œ์—์„œ ์ด์–ด์ง€๋Š” ์งˆ๋ฌธ
Attention I/O FlashAttention Analysis ๊ธด attention์„ ์™œ FLOPs๊ฐ€ ์•„๋‹ˆ๋ผ I/O ๊ด€์ ์—์„œ ๋ด์•ผ ํ•˜๋Š”๊ฐ€?
KV ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ PagedAttention Analysis ๋™์  ์š”์ฒญ์˜ KV๋ฅผ ์–ด๋–ป๊ฒŒ ๋‚ญ๋น„ ์—†์ด ํ• ๋‹นํ•˜๋Š”๊ฐ€?
KV ํฌ๊ธฐ ์ถ•์†Œ KV Cache Quantization Analysis KV๋ฅผ ๋‚ฎ์€ ๋น„ํŠธ๋กœ ์ €์žฅํ•ด๋„ ํ’ˆ์งˆ์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋Š”๊ฐ€?
์ €์ฐจ์› KV MLA Analysis ๋ชจ๋ธ ๊ตฌ์กฐ์—์„œ KV ์ƒ์„ฑ๋Ÿ‰์„ ์–ด๋–ป๊ฒŒ ์ค„์ด๋Š”๊ฐ€?
์บ์‹œ ์žฌ์‚ฌ์šฉ Prefix Caching Analysis ๊ณตํ†ต ํ”„๋กฌํ”„ํŠธ์˜ prefill์„ ์–ธ์ œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
๋ฐฐ์น˜์™€ ์Šค์ผ€์ค„๋ง Continuous Batching Analysis ์„œ๋กœ ๋‹ค๋ฅธ ์ƒ์„ฑ ๊ธธ์ด์˜ ์š”์ฒญ์„ ์–ด๋–ป๊ฒŒ ํ•จ๊ป˜ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€?
Decode ๊ฐ€์† Speculative Decoding Analysis ์ˆœ์ฐจ์ ์ธ ํ•œ ํ† ํฐ ๋ฃจํ”„๋ฅผ ์–ด๋–ป๊ฒŒ ์ค„์ด๋Š”๊ฐ€?
์‹œ์Šคํ…œ ๋ถ„๋ฆฌ Disaggregated LLM Serving Analysis prefill๊ณผ decode๋ฅผ ์™œ ๋‹ค๋ฅธ ์ž์›์— ๋ฐฐ์น˜ํ•˜๋Š”๊ฐ€?
๋ชจ๋ธ ๊ตฌ์กฐ ํ™•์žฅ MoE Analysis ํŒŒ๋ผ๋ฏธํ„ฐ ์šฉ๋Ÿ‰๊ณผ ํ† ํฐ๋‹น ๊ณ„์‚ฐ์„ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌํ•˜๋Š”๊ฐ€?

์ฃผ์š” ์›๋ฌธ

์ž๋ฃŒ ํ•ต์‹ฌ
Vaswani et al., 2017, Attention Is All You Need Transformer์™€ scaled dot-product attention์˜ ์ถœ๋ฐœ์ 
Brown et al., 2020, Language Models are Few-Shot Learners ๋Œ€๊ทœ๋ชจ decoder-only ์–ธ์–ด ๋ชจ๋ธ์˜ in-context learning ํ™•์žฅ
Kaplan et al., 2020, Scaling Laws for Neural Language Models ๋ชจ๋ธ, ๋ฐ์ดํ„ฐ, compute์™€ ์„ฑ๋Šฅ์˜ ์Šค์ผ€์ผ๋ง ๊ด€๊ณ„
Hoffmann et al., 2022, Training Compute-Optimal Large Language Models ๋ชจ๋ธ ํฌ๊ธฐ์™€ ํ•™์Šต ํ† ํฐ์„ ํ•จ๊ป˜ ๋Š˜๋ ค์•ผ ํ•œ๋‹ค๋Š” Chinchilla ๊ด€์ 
Ouyang et al., 2022, Training language models to follow instructions with human feedback SFT์™€ RLHF ๊ธฐ๋ฐ˜์˜ instruction-following ์ •๋ ฌ
Dao et al., 2022, FlashAttention IO-aware exact attention
Ainslie et al., 2023, GQA: Training Generalized Multi-Query Transformer Models KV head ๊ณต์œ ๋ฅผ ํ†ตํ•œ decode ํšจ์œจ ๊ฐœ์„ 
Kwon et al., 2023, Efficient Memory Management for Large Language Model Serving with PagedAttention KV cache๋ฅผ ๋ธ”๋ก ๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋น™ ์‹œ์Šคํ…œ

11. ํ•ต์‹ฌ ์ •๋ฆฌ

LLM์€ ํ† ํฐ์—ด์˜ ๋‹ค์Œ ์›์†Œ ํ™•๋ฅ ์„ ์˜ˆ์ธกํ•˜๋Š” decoder-only Transformer๊ฐ€ ์ฃผ๋ฅ˜์ž…๋‹ˆ๋‹ค. ํ† ํฐํ™”๋กœ ๋ฌธ์ž์—ด์„ ID์—ด๋กœ ๋ฐ”๊พธ๊ณ , ์ž„๋ฒ ๋”ฉ, ์œ„์น˜ ์ •๋ณด, attention, FFN์„ ๊ฑฐ์ณ logits๋ฅผ ๋งŒ๋“  ๋’ค ์ƒ˜ํ”Œ๋Ÿฌ๊ฐ€ ๋‹ค์Œ ํ† ํฐ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋Š” ์ž๊ธฐํšŒ๊ท€์„ฑ์ด ์ƒ์„ฑ ๋Šฅ๋ ฅ์˜ ๊ธฐ๋ฐ˜์ด์ž decode๊ฐ€ ์ˆœ์ฐจ์ ์ธ ์ด์œ ์ž…๋‹ˆ๋‹ค.

ํ•™์Šต์€ ๋Œ€๊ทœ๋ชจ next-token prediction์œผ๋กœ ์ผ๋ฐ˜์ ์ธ ์–ธ์–ด ๋Šฅ๋ ฅ์„ ๋งŒ๋“ค๊ณ , SFT์™€ ์„ ํ˜ธ ํ•™์Šต ๊ฐ™์€ post-training์œผ๋กœ assistant ํ–‰๋™์„ ๋‹ค๋“ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋ธ ์ถœ๋ ฅ์€ ํ™•๋ฅ ์  ์ƒ์„ฑ์ด์ง€ ์‚ฌ์‹ค ๊ฒ€์ฆ์ด ์•„๋‹ˆ๋ฏ€๋กœ, ์ตœ์‹ ์„ฑ์ด๋‚˜ ์ •ํ™•์„ฑ์ด ์ค‘์š”ํ•œ ์ž‘์—…์—๋Š” ๊ฒ€์ƒ‰, ๋„๊ตฌ, ์ธ์šฉ ๊ฒ€์ฆ์„ ๊ฒฐํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ถ”๋ก ์—์„œ๋Š” prefill๊ณผ decode๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. prefill์€ ๊ธด ํ”„๋กฌํ”„ํŠธ์˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์™€ TTFT์—, decode๋Š” ๊ฐ€์ค‘์น˜/KV cache ์ฝ๊ธฐ์™€ TPOT/ITL์— ์ง์ ‘ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ LLM ์‹œ์Šคํ…œ์€ ๋ชจ๋ธ ์ •ํ™•๋„๋งŒ์ด ์•„๋‹ˆ๋ผ ํ† ํฐ ์ˆ˜, KV cache ์˜ˆ์‚ฐ, ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ, ๋ฐฐ์น˜ ์ •์ฑ…, ์บ์‹œ ์žฌ์‚ฌ์šฉ, SLO๋ฅผ ํ•จ๊ป˜ ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.