인프라

텐서 병렬화

Tensor Parallelism

모델의 큰 가중치 행렬을 쪼개 한 층의 계산을 같은 서버 안 GPU 여러 장이 나눠 맡게 하는 분산 기법이다. GPU 한 장에 다 안 들어가는 큰 모델을 학습하거나 서빙할 때 쓰며, 층을 나누는 파이프라인 병렬화나 데이터를 나누는 데이터 병렬화와 섞어 쓴다.

방식무엇을 나누나이럴 때 쓴다
텐서 병렬화한 층 안의 행렬서버 한 대 안에서 큰 모델을 올릴 때
파이프라인 병렬화층을 순서대로서버 여러 대에 걸쳐 나눌 때
데이터 병렬화입력 데이터모델은 들어가고 처리량을 늘리고 싶을 때

예를 들어 70B 모델은 FP16 기준으로 가중치만 140GB라서 80GB GPU 한 장에 들어가지 않는다. 이럴 때 같은 서버 안의 GPU 여러 장에 모델을 나눠 올린다.

행렬을 쪼개고 층마다 결과를 합친다

큰 행렬 W를 열 방향으로 4등분해 GPU 4장에 하나씩 나눠 준다. 각 GPU는 자기 몫만 계산하고, 결과를 서로 주고받아 합친 뒤 다음 층으로 넘어간다. NVIDIA의 Megatron-LM이 트랜스포머에 맞게 이 방식을 정리했고, 지금 쓰이는 학습·서빙 도구 대부분이 이 아이디어를 따른다.

GPU마다 모델의 일부만 들고 있으니 메모리 부담이 GPU 수만큼 나뉜다. 계산도 동시에 하니까 답 하나를 만드는 시간(지연)도 줄어든다.

vLLM에서는 옵션 하나로 켠다

직접 모델을 서빙한다면 vLLM 실행 때 --tensor-parallel-size에 GPU 수를 넣으면 된다. 예를 들어 --tensor-parallel-size 4로 주면 GPU 4장에 모델이 나뉜다. 학습에서는 Megatron-LM 같은 프레임워크에서 텐서 병렬 크기를 설정해 쓴다.

상황설정 방향
모델이 GPU 한 장에 들어감쓰지 않는다 (1)
한 장엔 안 들어가고 서버 한 대엔 들어감서버 안 GPU 수만큼 (2, 4, 8)
서버 한 대로도 부족함서버 안은 텐서, 서버 사이는 파이프라인 병렬

통신이 많아서 서버 한 대 안에서만 쓴다

층마다 GPU끼리 결과를 주고받아야 하므로 GPU 사이 연결이 느리면 오히려 느려진다. 그래서 NVLink처럼 빠르게 연결된 같은 서버 안의 GPU끼리 묶는 게 일반적이다. 서버를 넘어가면 통신이 적은 파이프라인 병렬화를 섞는다.

작은 모델에 GPU를 많이 붙이면 통신 비용 때문에 이득이 거의 없다. 이때는 모델 복사본을 여러 개 띄우는 데이터 병렬이 처리량 면에서 낫다. 또 GPU 수는 보통 2, 4, 8처럼 모델의 어텐션 헤드 수를 나눌 수 있는 값이어야 한다.

큰 오픈 모델을 직접 띄울 때 가장 많이 쓴다

가장 흔한 건 GPU 한 장에 안 들어가는 모델을 직접 서빙하는 경우다. 서버 한 대의 GPU 여러 장에 모델 하나를 나눠 올리고, 요청이 늘면 이런 묶음을 여러 개 띄워 처리량을 늘린다.

어디서어떻게 쓰나
자체 LLM 서빙vLLM에서 --tensor-parallel-size를 서버 안 GPU 수로 두고 70B급 모델을 한 서버에 올린다
대형 모델 학습Megatron-LM 같은 프레임워크에서 서버 안은 텐서, 서버 사이는 파이프라인·데이터 병렬로 묶는다
응답 지연 줄이기모델이 한 장에 들어가더라도 답을 빨리 내야 하면 GPU 여러 장에 계산을 나눈다
#분산학습#Megatron#멀티GPU
참고 자료
← AI Wiki에서 더 보기
updated at 2026-10-20