AI 용어집 · 심화 · 효율·인프라
모델 병렬화 Tensor·Pipeline Parallelism
모델 병렬화는 GPU 한 장에 다 들어가지 않는 큰 모델을 여러 GPU에 쪼개 싣고 함께 계산하게 하는 방법이다. 층 안의 계산을 나누는 텐서 병렬화(TP)와 층을 순서대로 나누는 파이프라인 병렬화(PP)가 대표적이다.
어떻게 작동하나
텐서 병렬화는 한 층 안의 큰 행렬 계산을 여러 GPU가 조각씩 나눠 맡고 결과를 합친다. 층마다 GPU끼리 결과를 주고받아야 해서 통신이 아주 잦다. 파이프라인 병렬화는 앞쪽 층들은 GPU 하나, 뒤쪽 층들은 다른 GPU에 두고 데이터를 차례로 넘긴다. 앞 GPU가 일하는 동안 뒤 GPU가 놀지 않도록 입력을 작은 묶음(마이크로배치)으로 쪼개 흘려보낸다. MoE 모델에서는 전문가(expert)들을 GPU마다 나눠 두는 전문가 병렬화도 쓴다.
텐서 병렬화 vs 파이프라인 병렬화
텐서 병렬화(TP)층 안의 계산을 나눔
- 모든 GPU가 모든 층에 참여
- 통신이 아주 잦음
- 빠른 연결의 서버 한 대 안에 적합
파이프라인 병렬화(PP)층을 순서대로 나눔
- GPU마다 맡은 층 묶음만 계산
- 통신은 단계 경계에서만
- GPU가 노는 버블이 생김
공통 둘 다 한 GPU에 안 들어가는 모델을 여러 GPU에 나눠 싣는 방법이다
어디서 보게 되나
가장 자주 만나는 곳은 추론 엔진 설정이다. vLLM 같은 엔진의 tensor-parallel-size, pipeline-parallel-size 옵션이 GPU 몇 장에 어떻게 쪼갤지 정한다. 학습 쪽에서는 Megatron-LM, DeepSpeed 같은 프레임워크 설정에 TP·PP라는 약어로 나온다. 큰 오픈웨이트 모델의 모델 카드나 서빙 안내에 'GPU 몇 장, TP 몇' 같은 권장 구성이 적혀 있기도 하다.
감 잡는 법
먼저 '파라미터 수 × 숫자 하나의 바이트 수 ≈ 가중치 메모리'로 계산한다. 예시로 700억(70B) 파라미터 모델을 BF16(숫자 하나에 2바이트)으로 올리면 가중치만 약 140GB라서 GPU 한 장에는 들어가지 않는다. 여기에 KV 캐시 자리까지 더해 GPU가 몇 장 필요한지 정한다. 흔한 원칙은 텐서 병렬화는 NVLink로 빠르게 이어진 서버 한 대 안에서, 파이프라인 병렬화는 서버 여러 대에 걸칠 때 쓰는 것이다.
알아 둘 점
쪼갤수록 GPU끼리 통신하는 비용이 생기므로, 모델이 한 장에 들어간다면 쪼개지 않는 편이 대개 효율적이다. 텐서 병렬화를 느린 네트워크로 이어진 서버들 사이에 걸면 통신을 기다리느라 오히려 느려질 수 있다. 파이프라인 병렬화는 단계 사이에 GPU가 노는 시간(버블)이 생기기 쉽다. 양자화로 모델을 줄여 필요한 GPU 수 자체를 줄이는 것이 더 싼 해답일 때도 많다.
예시
사내에서 70B급 오픈웨이트 모델을 서빙하려는 팀이 있다고 하자. BF16 기준 가중치만 약 140GB라서, 메모리 80GB GPU 4장이 NVLink로 이어진 서버 한 대(예시)를 고르고 vLLM을 tensor-parallel-size 4로 띄운다. GPU 2장만 쓸 수 있다면 4비트 양자화 버전으로 바꿔 메모리를 줄이는 방법을 함께 검토한다.