인프라 쪽에서 GPU 클러스터를 다루다 보면 학습 잡의 로그와 설정에 같은 용어가 반복해서 나온다. 이 문서는 그 용어들이 실제로 어떤 계산을 가리키는지, 그리고 왜 자원 산정과 장애 진단에 영향을 주는지를 정리한다.
가중치(weight) 는 입력을 출력으로 바꾸는 곱셈 계수다. 신경망의 한 층은 출력 = 활성화함수(가중치 × 입력 + 편향) 형태이고, 학습이란 이 가중치를 데이터에 맞게 조정하는 일이다. 모델 크기가 "7B" · "70B" 라고 할 때의 숫자가 이 가중치의 개수다.
순전파(forward pass) 는 입력을 첫 층부터 마지막 층까지 통과시켜 예측값과 손실(loss) 을 구하는 과정이다.
역전파(backpropagation) 는 그 손실을 마지막 층부터 거꾸로 따라가며 각 가중치가 손실에 얼마나 기여했는지를 구하는 과정이다. 미분의 연쇄 법칙을 층 단위로 적용한 것이며, 그 결과로 가중치마다 그레디언트(gradient) 하나가 나온다.
자원 관점에서 중요한 점이 하나 있다. 역전파를 하려면 순전파에서 계산한 중간 활성값을 들고 있어야 한다. 그래서 학습은 추론보다 메모리를 훨씬 많이 쓴다. 배치 크기를 키웠을 때 OOM 이 나는 이유 대부분이 여기에 있다. 활성값을 버렸다가 필요할 때 다시 계산하는 기법(gradient checkpointing) 은 메모리를 줄이는 대신 계산을 늘린다.
그레디언트는 "이 가중치를 늘리면 손실이 어느 방향으로 얼마나 움직이는가" 를 나타내는 값이다. 방향만 알려 줄 뿐 얼마나 움직일지는 정하지 않는다. 그 폭을 정하는 것이 옵티마이저(optimizer) 다.
| 옵티마이저 | 하는 일 | 파라미터당 추가 상태 |
|---|---|---|
| SGD | 그레디언트 방향으로 학습률만큼 이동 | 없음 |
| SGD with Momentum | 이전 이동 방향을 관성으로 누적 | 1개 |
| Adam · AdamW | 그레디언트의 1차·2차 모멘트를 따로 추적해 파라미터마다 보폭을 조정 | 2개 |
여기서 GPU 메모리 산정의 핵심이 나온다. Adam 계열로 학습하면 가중치 자체 말고도 그레디언트 한 벌과 옵티마이저 상태 두 벌이 더 필요하다. 혼합 정밀도 학습에서는 fp32 마스터 가중치까지 얹힌다. 파라미터 하나에 16바이트 안팎이 드는 셈이라, 7B 모델을 그냥 학습하려면 100GB 이상이 필요해진다. 추론만 한다면 가중치만 있으면 되므로 요구량이 한 자릿수 배로 줄어든다.
AdamW 는 가중치 감쇠(weight decay) 를 그레디언트에 섞지 않고 따로 적용하는 변형이며, 트랜스포머 학습의 사실상 기본값이다.
모델이 GPU 한 장에 들어가지 않으면 쪼개야 한다. 쪼개는 방향이 둘이다.
층 단위로 가른다. 1~8층은 GPU0, 9~16층은 GPU1 하는 식이다. GPU 간 통신은 층 경계에서 활성값을 넘기는 것뿐이라 통신량이 적다. 노드를 넘어가는 구간에 두기 좋다.
문제는 버블이다. GPU0 이 1번 배치를 처리하는 동안 GPU1 은 할 일이 없다. 이를 줄이려고 배치를 마이크로배치로 잘게 나눠 흘려 보낸다. 그래도 파이프라인이 차오르고 비워지는 구간은 남는다.
한 층 안의 행렬 연산을 가른다. 어텐션의 헤드나 MLP 의 행렬을 열·행으로 쪼개 여러 GPU 가 각자 계산하고, 결과를 all-reduce 로 합친다.
버블이 없고 지연이 낮은 대신 매 층마다 집합 통신이 일어난다. 그래서 NVLink 처럼 대역폭이 큰 인터커넥트로 묶인 같은 노드 안에서만 쓰는 것이 보통이다. 노드를 넘겨 텐서 병렬을 하면 네트워크가 병목이 된다.
큰 모델은 세 가지를 섞는다. 데이터 병렬(같은 모델을 여러 벌 두고 배치를 나눔) 을 바깥에, 파이프라인 병렬을 노드 사이에, 텐서 병렬을 노드 안에 둔다. 인프라 쪽에서 볼 지점은 명확하다. 노드 안은 NVLink·NVSwitch, 노드 사이는 고대역 RDMA 가 확보돼 있어야 하고, 그렇지 않으면 GPU 를 아무리 늘려도 통신에서 잡아먹힌다.
트랜스포머의 각 토큰은 세 가지 벡터로 변환된다. 같은 입력에 서로 다른 가중치 행렬을 곱해 만든다.
| 이름 | 역할 |
|---|---|
| Query (Q) | 내가 무엇을 찾고 있는가 |
| Key (K) | 나는 무엇을 제공하는가 (검색될 때 쓰이는 표지) |
| Value (V) | 실제로 전달할 내용 |
계산은 이렇게 이어진다. 어떤 토큰의 Q 를 모든 토큰의 K 와 내적해 유사도를 구하고, 차원 수의 제곱근으로 나눈 뒤 softmax 로 가중치를 만든다. 그 가중치로 V 들을 가중 평균한 것이 그 토큰의 출력이다.
Attention(Q, K, V) = softmax(Q·Kᵀ / √d) · V
도서관에 비유하면 Q 는 검색어, K 는 책 제목, V 는 책 내용이다. 제목과 검색어가 잘 맞는 책의 내용을 더 많이 가져온다.
여기서 나오는 운영상의 성질이 두 개 있다.
Q·Kᵀ 가 (토큰 수 × 토큰 수) 행렬이므로, 컨텍스트를 두 배로 늘리면 이 부분의 연산과 메모리가 네 배가 된다. 긴 컨텍스트가 비싼 이유다.멀티 헤드 어텐션은 이 과정을 여러 벌 병렬로 돌려 서로 다른 관계를 잡게 한 것이다. 최근 모델이 쓰는 GQA(Grouped-Query Attention) 는 여러 Q 헤드가 K·V 를 공유하게 해 KV 캐시를 줄인다.
가중치를 fp16·bf16 대신 int8·int4 같은 낮은 정밀도로 표현하는 것이다. LLM 에서 특히 효과가 큰 이유는 추론이 대체로 메모리 대역폭에 묶여 있기 때문이다. 토큰 하나를 만들 때마다 모델 가중치 전체를 메모리에서 읽어 오므로, 가중치가 절반으로 줄면 읽을 양도 절반이 된다.
| 방식 | 성격 |
|---|---|
| PTQ (Post-Training Quantization) | 학습이 끝난 모델을 변환한다. 빠르고 간단하다. GPTQ · AWQ 계열 |
| QAT (Quantization-Aware Training) | 학습 중에 양자화를 흉내 내 정확도 손실을 줄인다. 비용이 크다 |
| 가중치만 / 가중치+활성값 | 활성값까지 낮추면 더 빠르지만 정확도 손실이 커진다 |
실무에서 보는 지점이다.