#추론최적화
3편
- 스펙큘러티브 디코딩 — 작은 모델이 먼저 쓰고 큰 모델이 검사한다큰 모델을 한 번 부를 때 토큰 하나만 얻는 것이 아깝다. 작은 모델에게 세 글자를 미리 쓰게 하고 큰 모델이 한 번에 검사하니 한 호출에 평균 3.56토큰이 확정돼 1.60배 빨라졌다. 놀라운 것은 결과가 근사가 아니라는 점이다 — 초안 모델의 분포가 0.657만큼 다른 자리에서도, 검사 규칙을 지킨 표본은 큰 모델이 직접 뽑은 것과 구별되지 않았다
- 산술 강도와 메모리 대역폭 — 왜 GPU가 놀고 있나KV 캐시·플래시 어텐션에서 '메모리에 묶인다'는 말의 뜻. 연산량 대비 메모리 접근량이 산술 강도이고, 이게 낮으면 GPU가 계산이 아니라 데이터 읽기를 기다린다. 같은 GPU에서 행렬곱은 40 TFLOP/s를 냈지만 원소별 덧셈은 70 GFLOP/s에 그쳤다 — 577배 차이가 대역폭 병목이다
- 양자화 — 비트를 줄여도 되는 이유KV 캐시 편에서 추론은 메모리에 묶인다고 했다. 가중치를 fp16 대신 정수 몇 비트로 저장하면 그 메모리가 준다. 학습된 모델을 비트 수를 줄여가며 재니 8비트는 손실 그대로, 4비트도 2.4배뿐이었고 그 아래서 무너졌다. 다만 큰 이상치가 한 채널에 있으면 텐서 하나로 스케일을 잡을 때 뭉개졌고, 출력 채널마다 스케일을 따로 잡자 4비트 오차가 3배 줄었다