#메모리
4편
- 역전파 — 기울기를 한 번에 다 구하는 법파라미터가 2만 2천 개인 망에서 수치미분으로 기울기를 구하면 12초가 걸리고, 역전파로 구하면 0.8밀리초가 걸린다. 값은 소수 열 번째 자리까지 같다. 역전파가 공짜는 아니다. 순전파의 중간값을 전부 기억해야 해서, 층을 하나 쌓을 때마다 학습 메모리가 그 층 출력 크기인 2.0MB씩 늘었다
- 플래시 어텐션 — IO를 아는 어텐션어텐션은 N×N 점수 행렬을 만들어 메모리를 O(N²) 먹고, 그 읽고 쓰기가 병목이다. 플래시 어텐션은 그 행렬을 통째로 만들지 않고 타일로 나눠 처리한다. 재 보니 N=4096에서 메모리가 129배 줄고 속도는 1.9배 빨랐다. 핵심은 온라인 softmax — 블록별 running max·sum만으로 전체 softmax와 오차 2e-8로 같은 값을 낸다
- 혼합정밀도와 그래디언트 체크포인팅 — 학습 메모리를 사는 두 방법학습은 메모리가 모자라 막힌다. 반정밀도로 담으면 메모리가 절반이고 행렬곱이 2.8배 빨랐다. 다만 fp16은 범위가 좁아 작은 그라디언트 2.4%가 0으로 사라졌고, 손실을 1024배 키웠다 되돌리니 0%가 됐다. 그리고 활성값을 저장하지 않고 다시 계산하니 메모리가 24.9배 줄고 시간은 1.78배만 늘었다
- KV 캐시와 추론 — 생성은 왜 메모리에 묶이나자기회귀 생성은 토큰을 하나씩 만든다. 캐시가 없으면 매 스텝 과거를 다시 계산해 L=512에서 260배나 더 일했다(L²). 과거의 K·V를 저장하면 새 토큰만 계산해 선형으로 준다. 대신 캐시는 문맥 길이에 선형으로 커져, 70B 모델에서 64K 토큰이면 캐시(168GB)가 모델 가중치(140GB)를 넘었다. GQA·MQA로 KV 헤드를 줄이면 캐시가 8배·64배 준다