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๋ก ๋ํด์ง๋๋ค.
๊ทธ๋ฆผ 1a. ๋์ผํ decoder ๊ฐ์ค์น๋ฅผ ์ฌ์ฌ์ฉํ๋ prefill๊ณผ ์๊ธฐํ๊ท decode ํ๋ฆ
๊ทธ๋ฆผ 1b. Vector๋ ์์ strip, matrix๋ ๋ฉด์ ์ด ์๋ block์ผ๋ก ๊ตฌ๋ถํ ๊ธฐ๋ณธ MHA์ 2-layer FFN์ ํ decode step
๊ทธ๋ฆผ 2. ์ ๋ ฅ -> ํ ํฐํ -> ์๋ฒ ๋ฉ -> Transformer -> ํ๋ฅ ๋ถํฌ -> ์ํ๋ง์ ๋ฐ๋ณตํ๋ ์๊ธฐํ๊ท ์์ฑ
1. ์ ์ฒด ๋์ ํ๋ฆ
์ฌ์ฉ์๊ฐ ํ ์คํธ๋ฅผ ๋ณด๋ด๊ณ ํ๋ฉด์ ์๋ต์ด ๋ํ๋ ๋๊น์ง์ ๊ฒฝ๋ก๋ฅผ ๋จผ์ ์ก์ผ๋ฉด ๊ฐ ๊ตฌ์ฑ ์์์ ์ญํ ์ ๊ตฌ๋ถํ๊ธฐ ์ฝ์ต๋๋ค.
- ํ ์คํธ ์ ๊ทํ์ ํ ํฐํ: ์ ๋ ฅ ๋ฌธ์์ด์ ๋ชจ๋ธ ์ดํ์ ์๋ ์ ์ ํ ํฐ ID๋ก ๋ฐ๊ฟ๋๋ค.
- ํ๋กฌํํธ ๊ตฌ์ฑ: system, user, assistant ์ญํ ํ๊ธฐ์ ๋ํ ์ด๋ ฅ์ ๋ชจ๋ธ๋ณ chat template์ ๋ง์ถฐ ํ๋์ ํ ํฐ์ด๋ก ๋ง๋ญ๋๋ค.
- Prefill: ํ๋กฌํํธ ์ ์ฒด๋ฅผ ๋ณ๋ ฌ ์ฒ๋ฆฌํด ๊ฐ ๋ ์ด์ด์ ๊ณผ๊ฑฐ Key/Value์ ์ฒซ ์ถ๋ ฅ ๋ถํฌ๋ฅผ ๋ง๋ญ๋๋ค.
- ์ํ๋ง: logits๋ฅผ ํ๋ฅ ๋ก ๋ฐ๊พธ๊ณ ์ ์ฑ ์ ๋ฐ๋ผ ๋ค์ ํ ํฐ ํ๋๋ฅผ ์ ํํฉ๋๋ค.
- Decode: ์ ํํ ํ ํฐ์ ์ ๋ ฅ ๋์ ๋ถ์ด๊ณ , ์ ํ ํฐ์ K/V๋ง ๊ณ์ฐํ ๋ค ์ ์ฅ๋ KV cache๋ฅผ ์ฐธ์กฐํด ๋ค์ ๋ถํฌ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ์ข ๋ฃ์ ํ์ฒ๋ฆฌ: 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, ํ๊ตญ์ด์ ์์ด๊ฐ ์์ธ ํ ์คํธ๋ ํนํ ํ ํฐํ ์ฐจ์ด๊ฐ ํฝ๋๋ค.
๊ทธ๋ฆผ 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๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฆผ 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๋ฅผ ํจ๊ป ์ค๊ณํด์ผ ํฉ๋๋ค.