오늘 끝나면
Model Efficiency — 졸업편
- ✓Model Efficiency — 졸업편의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 Model이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
Quantization·Distillation·MoE — 모델을 가볍게 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
AI · Day 22 / 실무
작게, 빠르게,
싸게
22일의 마지막 퍼즐이다.
지금까지는 모델 만드는 법을 배웠다.
오늘은 그 모델을 실전에 돌리는 법이다.
양자화, 증류, 가지치기, MoE로 큰 모델을 손바닥 위로 끌어내린다.
시간당 3,000만 원짜리 청구서
직원 1만 명이 하루 100번씩 GPT-4를 호출하면 토큰 비용이 눈덩이처럼 불어난다.
실제로 어느 대기업은 OpenAI 월 사용료 3억 원을 청구받았다.
같은 작업을 H100 서버에 Llama 3 70B를 4bit로 올리고 vLLM으로 서빙하면
비용이 83% 줄었다.
핵심은 추론이 학습보다 비싸다는 점이다.
학습은 한 번이지만 추론은 매일이다.
그래서 AI 회사의 승부처는 모델 품질이 아니라 초당 토큰 수와 토큰당 전력이다.
Model Efficiency는 학문이 아니라 기업 생존 기술이다.
호출이 많아질수록 API는 선형으로 폭발한다. 일정 지점부터 자체 호스팅이 싸진다
정밀도는 사치다
2022년 Tim Dettmers는 "LLM은 INT8로 줄여도 성능 손실이 거의 0이다"라고 했다.
숫자 하나를 32비트로 저장하던 관행을 깬 발견이다.
가중치 분포는 대체로 정규분포라서 실제 쓰이는 범위가 좁다.
그 좁은 범위를 256칸(INT8)이나 16칸(INT4)으로 나눠도 충분히 복원된다.
공식은 x_q = round(x / s) + z 하나뿐이다.
70B 모델이 FP32에선 280GB지만 INT4로 내리면 35GB다.
8배 작아지고 속도는 2배, 성능 손실은 1~2%뿐이다.
Day 21에서 썼던 load_in_4bit=True가 바로 이 NF4 양자화다.
한 줄이 모델을 8배 가볍게 만든 셈이다.
격자 16칸 · 좁은 분포가 적은 칸에 들어간다
실용 구간. 작아지고 빨라지는데 손실은 작다
어두운 지식을 물려주다
2015년 Geoffrey Hinton이 말했다.
"softmax 출력의 확률 분포는 정답 라벨보다 훨씬 많은 정보를 담는다."
이게 Dark Knowledge의 시작이다.
개 사진을 넣으면 출력이 개 0.9, 고양이 0.08, 자동차 0.001로 나온다.
정답 라벨은 그저 [0,0,1,0] 원-핫이다.
그런데 저 0.08 안에 "개와 고양이는 닮았다"는 의미론적 지식이 숨어 있다.
큰 Teacher만 아는 미묘한 관계다.
이 부드러운 확률을 작은 Student가 흉내 내게 한다.
그러면 작은 모델도 큰 모델의 지혜를 물려받는다.
DistilBERT가 그 증거다.
BERT의 40%만 남기고도 성능을 97% 유지하고 속도는 60% 빨라졌다.
온도 T로 분포를 부드럽게 만드는 게 비결이다.
파이썬 코드 보기
def distill_loss(s_logits, t_logits, y, T=4.0, a=0.3):
hard = F.cross_entropy(s_logits, y) # 정답 라벨
soft = F.kl_div( # Teacher 분포 흉내
F.log_softmax(s_logits / T, dim=1),
F.softmax(t_logits / T, dim=1),
reduction="batchmean") * (T * T)
return a * hard + (1 - a) * soft
# 온도 T가 작은 확률까지 살려 어두운 지식을 전한다정답 한 칸이 아니라 부드러운 확률 분포를 흉내 낸다. 작은 모델이 큰 지혜를 물려받는다
신경망 속에 숨은 복권
2018년 MIT의 Frankle과 Carbin이 복권 가설(Lottery Ticket Hypothesis)을 냈다.
큰 신경망 안에 이미 이길 운명인 작은 서브네트워크가 숨어 있다는 주장이다.
가중치 절댓값이 작은 것부터 0으로 만드는 게 magnitude pruning이다.
90%를 잘라낸 뒤 남은 서브넷을 원래 초기값으로 되돌려 다시 학습시키면
원본과 같은 성능이 나온다.
신경망이 왜 그렇게 과하게 큰지 설명해 주는 결과다.
다만 현장엔 함정이 있다.
개별 weight만 0으로 만드는 unstructured 방식은 압축률만 높고 속도는 그대로다. 0을 곱하는 연산도 그대로 하기 때문이다.
채널이나 뉴런을 통째로 들어내는 structured 방식이라야 진짜 빨라진다.
자른 뒤엔 반드시 재학습으로 보정해야 한다.
복권 가설이다. 초기값으로 되돌려 재학습하면 원본과 동급 성능이 나온다
다 알지만, 한 번에 일부만
마지막 아이디어는 구조 자체를 바꾸는 것이다.
Mixture of Experts(MoE).
전문가를 여러 명 두되, 토큰마다 몇 명만 골라서 일을 시킨다.
2023년 Mistral의 Mixtral 8x7B가 이 구조를 증명했다.
전문가는 8명이고, 토큰마다 라우터가 Top-2만 깨운다.
총 47B 파라미터지만 한 번에 쓰는 건 12.9B뿐이다.
그래서 Llama 2 70B급 성능을 4배 빠르게 낸다.
여기에 BitNet 1.58bit, Speculative Decoding, Flash Attention, vLLM의 PagedAttention까지 더해진다.
핵심 교훈은 하나다. 효율화는 곱셈이다.
증류 × 양자화 × 가지치기 = 80배.
이걸 조합하면 iPhone에서 돌아가는 ChatGPT가 만들어진다.
22일의 여정이 여기서 끝난다.
이제 AI를 만들고, 튜닝하고, 배포할 수 있다.
Q. Mixtral 8x7B는 왜 8×7=56B가 아니라 47B인가?
Attention 레이어와 임베딩 같은 공유 부분은 expert마다 복제되지 않는다.각 expert는 FeedForward만 독립이라서 8개를 합쳐도 56B가 아니라 약 47B다.
게다가 한 번에 활성화되는 건 Top-2, 약 12.9B뿐이라 계산 효율은 7B 수준이다.
총 47B 파라미터지만 한 번에 쓰는 건 12.9B다. 크게 가지되 일부만 계산한다