Command Palette

Search for a command to run...

지금까지는 주로 추론을 봤다.

사용자가 prompt를 넣고, 모델이 prefill로 읽고, decode로 token을 쓰고, KV cache와 batch scheduling으로 serving 비용이 결정되는 흐름이었다.

이번 글에서는 추론에서 잠시 벗어나 학습으로 넘어간다.

추론은 parameter를 바꾸지 않는다. 이미 학습된 weight를 사용해 output token을 만든다. 학습은 다르다. loss를 계산하고, gradient를 만들고, optimizer가 parameter를 업데이트한다.

그래서 학습에서 batch는 전혀 다른 의미를 가진다.

추론 batch:
여러 요청을 묶어 token을 생성한다

학습 batch:
여러 sample/token으로 loss와 gradient를 계산해 parameter를 바꾼다

이 글의 목표는 학습 batch와 distillation을 연결하는 것이다. 특히 EP94 대화에서 나온 from scratch, continual pre-training, mid-training, knowledge distillation, temperature, on-policy/off-policy를 한 흐름으로 묶는다.

학습 batch는 parameter를 바꾸는 단위다

학습은 다음 과정을 반복한다.

batch를 가져온다
-> model forward
-> loss 계산
-> backward로 gradient 계산
-> optimizer step
-> parameter update

batch는 이 한 번의 update에 쓰이는 데이터 묶음이다.

LLM 학습에서는 sample 수보다 token 수가 중요해진다.

batch tokens
= batch size x sequence length

예를 들어 sequence length가 4,096이고 global batch size가 512라면 한 step에서 보는 token 수는 매우 커진다. 실제 시스템에서는 GPU memory 한계 때문에 micro-batch와 gradient accumulation을 쓴다.

micro-batch를 여러 번 처리
gradient를 누적
목표 global batch에 도달
optimizer step

추론 batch와 달리, 학습 batch의 끝에는 parameter update가 있다. 이 차이가 가장 중요하다.

From scratch는 처음부터 새 모델을 굽는 일이다

from scratch는 랜덤 초기화에서 시작해 모델을 처음부터 학습하는 방식이다.

random weights
-> 대규모 text corpus
-> next-token prediction
-> pretrained base model

이 방식은 비싸다. 데이터, GPU, 분산 학습 infrastructure, 학습 안정화, evaluation이 모두 필요하다.

Stanford CS336 같은 course가 "Language Modeling from Scratch"를 표방하는 이유는 이 전체 경로를 이해하기 위해서다. raw text를 token으로 바꾸고, Transformer를 만들고, 학습하고, 평가하고, deployment까지 보는 것이다.

하지만 프론티어 모델 회사가 매번 완전히 from scratch만 하는 것은 아니다. 기존 모델을 이어서 학습하거나, 특정 도메인 능력을 보강하거나, 큰 teacher 모델의 능력을 작은 모델에 옮길 수 있다.

여기서 continual pre-training, mid-training, distillation이 나온다.

Continual pre-training과 mid-training은 이어 굽는 방식이다

continual pre-training은 이미 학습된 모델을 더 학습하는 것이다.

pretrained model
-> 추가 data
-> 더 학습
-> updated model

목표는 최신 데이터 반영, 특정 도메인 강화, 품질 개선일 수 있다.

mid-training은 용어 사용이 맥락마다 다르지만, 보통 base pretraining과 instruction/post-training 사이에서 특정 도메인 지식이나 능력을 목적성 있게 주입하는 단계로 말하는 경우가 있다.

예를 들어 코딩, 수학, 법률, 의학, 과학 논문 같은 데이터로 모델의 특정 능력을 보강할 수 있다.

base model
-> domain-heavy training
-> instruction tuning / alignment
-> product model

이때 중요한 것은 학습 데이터 분포다. 모델은 학습 중 본 분포에 맞춰 parameter를 바꾼다. 그래서 어떤 데이터를 어느 단계에서 넣는지가 모델의 성격을 바꾼다.

Distillation은 큰 모델의 행동을 작은 모델에 옮기는 일이다

distillation은 teacher-student 구조로 이해하면 쉽다.

teacher model = 더 크거나 더 강한 모델
student model = 더 작거나 더 싸게 serving할 모델

teacher가 prompt에 대해 답을 만들고, student가 그 답이나 분포를 배운다.

왜 할까?

큰 모델은 비싸다. serving 비용도 크고 latency도 길 수 있다. 작은 모델이 teacher의 행동을 잘 흉내 내면 더 싸고 빠르게 배포할 수 있다.

distillation은 단순히 "정답 텍스트를 베껴 쓰기"에서 끝나지 않는다. 여러 단계가 있다.

Hard target distillation은 teacher 답안을 정답으로 삼는다

가장 단순한 방식은 teacher가 만든 답안을 정답처럼 두는 것이다.

prompt
-> teacher answer
-> student가 teacher answer token을 맞히도록 학습

이것은 hard target distillation이다.

일반적인 next-token 학습처럼 teacher answer의 다음 token을 맞히게 한다. 정답 token 하나가 one-hot target처럼 작동한다.

장점은 단순하다. teacher가 만든 좋은 답안 corpus를 만들고 student를 학습시키면 된다.

하지만 단점도 있다. teacher가 왜 그 token을 골랐는지, 다른 후보 token들과의 미묘한 차이는 전달되지 않는다. student는 "최종 답안"만 본다.

그래서 soft target distillation이 나온다.

Soft distillation은 teacher의 분포를 배운다

teacher model은 다음 token 하나만 알고 있는 것이 아니다.

LM head는 vocabulary 전체에 대한 logits를 만든다. softmax를 거치면 token 후보들의 확률 분포가 된다.

token A: 0.42
token B: 0.31
token C: 0.08
...

hard target은 token A만 정답으로 본다. soft distillation은 이 분포 자체를 학습 신호로 쓰려고 한다.

이때 temperature가 등장한다.

temperature를 높이면 확률 분포가 더 평평해진다. teacher가 최종적으로 고른 token 말고도 어느 후보들을 어느 정도 고려했는지 드러나기 쉽다.

중요한 보정이 있다.

temperature를 높인다는 것은 logits를 1에 맞춘다는 뜻이 아니다. logits 간 차이를 상대적으로 줄여 softmax 결과 분포를 덜 뾰족하게 만드는 것이다.

distillation 문맥에서는 창의적인 답변을 만들려는 것보다, teacher의 후보 분포 정보를 student에게 더 풍부하게 전달하는 의미가 크다.

실제로 vocabulary 전체 분포를 모두 저장하면 너무 크다. 그래서 top-k 후보만 쓰는 방식이 논의된다.

teacher logits
-> temperature 적용
-> top-k 후보 분포 저장
-> student가 분포를 맞히도록 학습

student는 teacher의 최종 답만이 아니라 "어떤 후보들이 얼마나 그럴듯했는지"도 배운다.

Off-policy distillation은 teacher가 만든 경로를 따라간다

teacher가 prompt에 대해 답을 만들고, student가 그 답을 학습하면 off-policy에 가깝다.

student는 teacher가 만든 깨끗한 경로 위에서 학습한다.

teacher-generated trajectory
-> student learns

문제는 실제 배포에서 student가 항상 teacher처럼 말하지 않는다는 점이다. student가 한 token을 잘못 생성하면 그 다음 context는 teacher answer와 달라진다.

이것이 exposure bias와 연결된다.

학습 때는 정답 token history를 보고 다음 token을 맞힌다. 추론 때는 자기 자신이 생성한 token history를 보고 다음 token을 만든다. 자기 실수가 context에 들어오면 학습 때 보지 못한 상태가 생긴다.

학습:
정답 prefix -> 다음 정답 token

추론:
student가 만든 prefix -> 다음 token

이 차이가 distribution mismatch를 만든다.

On-policy distillation은 student가 만든 길 위에서 교정한다

on-policy distillation은 student가 실제로 생성한 경로 위에서 teacher가 교정하는 방식에 가깝다.

student가 답을 생성한다
teacher가 그 경로를 따라가며 평가/분포 제공
student가 자기 실수 경로 위에서 배운다

이 방식은 더 복잡하지만 실제 배포 환경에 가깝다.

student가 자주 빠지는 실수, 이상한 prefix, 애매한 중간 상태에서 teacher signal을 받을 수 있기 때문이다.

EP94 대화에서 "off-policy로 teacher의 것을 증류한 뒤, 어느 단계에서는 on-policy로 돌린다"는 설명이 나온 이유가 여기에 있다. 작은 모델이 실제로 자기가 생성하는 환경에 적응하도록 만드는 것이다.

instruction fine-tuning이나 preference optimization과도 연결되는 감각이 있다. 모델이 단순히 text corpus를 따라 쓰는 것이 아니라, 사용자 prompt에 대해 자기 답변 경로를 만들고 그 경로에서 교정받는 단계가 중요해진다.

Training batch와 distillation은 같은 학습 loop 안에 있다

distillation도 결국 학습이다.

student model은 batch를 받아 forward를 하고 loss를 계산하고 gradient를 만들고 parameter를 업데이트한다.

다만 target이 다르다.

일반 next-token pretraining:
원본 text의 다음 token을 맞힌다

hard distillation:
teacher answer의 token을 맞힌다

soft distillation:
teacher의 token distribution을 맞힌다

on-policy distillation:
student 생성 경로 위에서 teacher signal을 따라간다

batch는 이 학습 신호들을 묶어 parameter를 바꾸는 단위다.

그래서 학습 batch를 이해하면 distillation도 더 구체적으로 보인다.

무엇을 batch로 묶는가
어떤 sequence length로 자르는가
어떤 target을 주는가
loss를 어떻게 계산하는가
gradient를 얼마나 누적하는가

이 선택들이 모델을 바꾼다.

추론 비용과 학습 방식은 다시 만난다

왜 distillation을 할까?

품질도 이유지만 비용도 큰 이유다.

큰 teacher 모델은 똑똑하지만 비싸다. 작은 student 모델은 싸고 빠를 수 있다. teacher의 행동을 student에 옮기면 serving cost를 줄이면서 유용한 능력을 유지할 수 있다.

이것은 6편의 GPU serving 문제와 다시 연결된다.

큰 모델:
높은 품질
높은 serving cost
큰 KV cache와 GPU memory 부담

작은 distilled model:
낮은 serving cost
빠른 latency 가능성
teacher 능력 일부 이전

물론 distillation이 모든 것을 해결하지는 않는다. teacher의 한계, distillation data의 편향, student capacity 한계, on-policy 적응 부족이 모두 문제가 될 수 있다.

그래도 frontier lab들이 model family를 만들고, 큰 모델에서 작은 모델로 능력을 옮기는 흐름은 자연스럽다. 사용자에게는 "같은 이름의 제품군 안에서 빠른 모델, 싼 모델, 강한 모델"로 보인다.

정리

학습 batch는 parameter를 바꾸는 단위다. 추론 batch가 serving throughput과 latency를 위한 묶음이라면, 학습 batch는 loss, gradient, optimizer step을 위한 묶음이다.

LLM 학습에서는 sequence length와 batch size를 곱한 batch tokens 관점이 중요하다. micro-batch와 gradient accumulation은 GPU memory 한계를 넘지 않으면서 더 큰 global batch를 흉내 내는 장치다.

from scratch는 처음부터 새 모델을 학습하는 일이다. continual pre-training과 mid-training은 기존 모델을 이어서 더 학습하거나 특정 도메인 능력을 보강하는 일이다.

distillation은 teacher 모델의 행동을 student 모델로 옮기는 일이다. hard target은 teacher answer를 정답으로 삼고, soft distillation은 teacher의 logits/probability distribution을 학습한다. on-policy distillation은 student가 실제로 만든 경로 위에서 teacher signal을 받게 해 exposure bias와 distribution mismatch를 줄이려는 방향이다.

여기까지 오면 LLM 내부 계산, 추론 실행, serving 비용, 학습 방식이 한 번 묶인다.

text
-> token
-> embedding
-> Transformer block
-> prefill/decode
-> KV cache
-> batch/sequence length
-> MoE/GPU serving
-> reasoning effort
-> training batch/distillation

LLM은 하나의 "똑똑한 채팅창"이 아니다. token, vector, attention, memory, scheduling, training signal이 연결된 거대한 시스템이다. 이 시스템을 알면 모델을 더 잘 쓰고, 비용을 더 정확히 읽고, 새로운 모델 뉴스가 나와도 무엇이 바뀌었는지 판단할 수 있다.

다음 글에서는 모델 바깥의 검색 계층으로 나간다. RAG, Vector DB, Graph RAG는 LLM 내부 구조를 바꾸는 것이 아니라, LLM이 읽을 context를 어떻게 찾아오고 구성할지의 문제다.

이어 읽기

시리즈는 순서대로, 편집 추천은 맥락대로, 비슷한 주제는 태그 기준으로 정리합니다.

시리즈 전체

LLM 공부 시리즈8/9
  1. 1.LLM 공부 01 | LLM은 검색기가 아니라 다음 토큰 생성기다
  2. 2.LLM 공부 02 | 토큰이 비용을 만든다
  3. 3.LLM 공부 03 | Transformer 안에서 문맥이 섞이는 방식
  4. 4.LLM 공부 04 | Prefill과 Decode: LLM이 읽고 쓰는 두 단계
  5. 5.LLM 공부 05 | Batch와 Sequence Length가 속도와 비용을 정한다
  6. 6.LLM 공부 06 | MoE와 GPU 클러스터: 거대 모델은 어떻게 나뉘어 도는가
  7. 7.LLM 공부 07 | Reasoning Effort: 더 깊게 생각한다는 말의 실제 의미
  8. 8.LLM 공부 08 | 학습 Batch와 Distillation: 모델은 어떻게 바뀌는가
  9. 9.LLM 공부 09 | RAG와 Vector DB: LLM 밖에서 근거를 찾는 방식

함께 읽으면 좋은 글

편집 추천

비슷한 주제의 글

태그가 겹치는 글입니다. 시리즈와 편집 추천에 이미 나온 글은 제외합니다.