0. 개요
최근 GPT·LLaMA 같은 대형 언어모델을 직접 다뤄보면서, 성능은 뛰어나지만 응답 속도·비용·배포 난이도라는 큰 벽을 실무에서 마주했다.
특히 서비스 환경에서는 “좋은 성능”보다 “빠르고 안정적인 운영”이 더 중요하다는 점을 절실히 느꼈다. 또한 단순히 모델을 잘 만드는 것보다 작지만 똑똑한 모델을 설계하는 것이 더 큰 가치가 있다는 생각이 들었다.
그러면서 모델 경량화, 지식 증류된 모델이 더욱 핫한 주제라는 것을 느끼고, 글을 작성하게 되었다.
1. 왜 지식 증류인가?
최근 몇 년 사이 거대 언어모델(LLM)이 엄청난 주목을 받았습니다. GPT-4나 LLaMA 같은 모델은 확실히 똑똑하지만, 막상 서비스에 적용하려고 하면 곤란한 점이 많습니다.
- 너무 크다 보니 GPU 메모리를 잔뜩 먹고,
- 응답 속도도 느려지고,
- 무엇보다 돈이 많이 듭니다.
이런 상황에서 주목받는 게 Knowledge Distillation(지식 증류)입니다. 쉽게 말해, 큰 모델(교사, Teacher)이 가지고 있는 지식을 작은 모델(학생, Student)에게 전수하는 과정이죠. 마치 대학 교수님이 복잡한 수학을 정리해서 학생에게 쉽게 알려주듯, 큰 모델이 가진 지식을 작은 모델이 소화할 수 있도록 압축하는 것입니다.
2. 장점
- 응답이 빠르다!
작은 모델은 가볍기 때문에 지연(latency)이 확 줄어듭니다. 실시간 챗봇이나 음성 비서 같은 서비스에서는 이게 치명적인 차이입니다. - 서버 비용은 곧 돈
모델이 작아지면 GPU를 덜 쓰기에 대규모 트래픽을 처리하는 연구일수록 절약 효과가 큽니다. - 온-디바이스
스마트폰이나 IoT 기기에도 올릴 수 있습니다. 덕분에 프라이버시 보호에도 유리합니다. 데이터가 클라우드로 안 나가는 장점을 가졌습니다. - 모델이 작으면 업데이트나 배포가 간단
수십 GB짜리 모델을 갈아끼우는 것보다 훨씬 부담이 적습니다.
대표적인 예가 Hugging Face에서 공개한 DistilBERT인데, 원래 BERT보다 40% 가볍지만 성능은 97% 이상 유지했습니다. "가볍고 똑똑한 모델"의 대표 사례죠.
3. Hugging Face - Distillation
from transformers import AutoModelForCausalLM, AutoTokenizer
teacher = AutoModelForCausalLM.from_pretrained("gpt2")
student = AutoModelForCausalLM.from_pretrained("distilgpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
데이터셋을 불러와서 교사 모델이 출력한 확률 분포를 학생이 학습하게 만들기.
핵심은 교사의 “부드러운” 확률 분포를 따라 배웁니다. 보통 KL Divergence 손실과 CrossEntropy를 섞어서 학습합니다.
import torch.nn.functional as F
# 교사 출력과 학생 출력을 KL-Divergence로 맞추는 부분
student_probs = F.log_softmax(student_logits / T, dim=-1)
teacher_probs = F.softmax(teacher_logits / T, dim=-1)
loss_kd = F.kl_div(student_probs, teacher_probs, reduction="batchmean") * (T**2)
여기서 T(temperature)를 높이면 확률 분포가 더 고르게 퍼져서 학생이 다양한 힌트를 얻습니다.
* 보통 2~5 정도
4. 주의할 점
- 교사 모델이 너무 크면 안 된다
학생이 따라가기 어려운 “격차(capacity gap)” 문제가 생깁니다. 차라리 단계적으로 증류하는 게 낫습니다. - 교사와 학생이 같은 도메인 데이터를 써야 효과가 큽니다.
- 교사의 편향도 따라간다
교사가 잘못된 지식을 주면 학생도 그대로 배웁니다. 따라서 증류 후엔 별도 검증이 필요합니다. - 리소스는 여전히 필요
교사 모델의 출력을 대량으로 뽑아야 하기 때문에 초기엔 큰 GPU 리소스가 필요합니다.
5. 최근 사례들
- DistilBERT / DistilGPT2
-> 작은 크기로도 원본 성능을 대부분 유지하는 Hugging Face의 대표적인 성공 사례 - TinyLLaMA
-> LLaMA 모델을 1억 파라미터대로 압축. 모바일에서도 쓸 수 있는 가능성 (경량화 가능..?) - MobileLLM (Meta)
-> 아예 작은 모델 구조를 설계해 대형 모델에 버금가는 성능을 달성했습니다. - DeepSeek-R1 Distillation
-> 6천억짜리 모델의 “추론 능력”을 70억 이하 모델로 옮겼는데, 오히려 성능이 더 좋아진 경우도 있었습니다.
6. Fine-tuning vs LoRA vs Distillation
Fine-tuning: 성능 극대화엔 좋지만, 모델이 그대로 크다는 한계가 있습니다.
LoRA: 학습 효율은 좋지만, 추론시 여전히 큰 모델이 필요합니다.
Distillation: 최종 산출물이 작아지므로 운영 효율에 가장 큰 영향을 줍니다.
물론 한계도 있습니다. 학생 모델은 원본만큼의 성능은 내기 어렵고, 교사 모델 의존성(특히 라이선스 이슈)도 고려해야 합니다. 하지만 잘 활용하면 작지만 똑똑한 모델을 확보할 수 있고, 이것이 바로 서비스 운영에서의 게임 체인저가 될 수 있습니다.
마무리
지식 증류는 단순히 모델을 줄이는 게 아니라, 성능·비용·속도의 균형점을 찾는 기술입니다. LLM이 가진 장점을 최대한 유지할 수 있다고 생각합니다.