brief.ing.gg

WIKI

GPU Split

GPU Split

모델 레이어나 텐서를 여러 GPU에 분산하는 방식은 Tensor Parallelism과 무엇이 다른가.

Scope

핵심 질문

LLM 추론에서 흔히 말하는 GPU Split은 무엇이며 Tensor Parallelism과 어떻게 다른가?

포함 범위

  • layer/model partition
  • 여러 GPU의 VRAM 활용
  • GPU 간 통신
  • pipeline형 분할과 tensor parallel 차이

제외 범위

  • 특정 런타임의 옵션 문법
  • 최신 GPU별 벤치마크

Research

핵심 근거

  • GPU Split은 엄밀한 단일 표준 용어라기보다 모델의 일부를 여러 GPU 메모리에 나누어 배치하는 실용적 표현으로 자주 사용된다.
  • 레이어 단위 분할은 한 토큰이 생성될 때 GPU 사이를 순차적으로 이동할 수 있어 통신과 synchronization 비용이 생긴다.
  • Tensor Parallelism은 하나의 레이어 연산 자체를 여러 GPU가 함께 계산한다.

참고 자료

  • Megatron-LM: https://arxiv.org/abs/1909.08053
  • Hugging Face Accelerate Big Model Inference documentation: https://huggingface.co/docs/accelerate/

Draft

GPU Split은 하나의 모델이 한 GPU의 VRAM에 들어가지 않을 때 모델 가중치나 레이어를 여러 GPU에 나누어 배치하는 방식을 넓게 가리키는 표현이다.

특정 논문이 정의한 하나의 표준 알고리즘이라기보다 llama.cpp 같은 런타임이나 사용자 커뮤니티에서 '모델을 여러 GPU 메모리에 나눠 싣는다'는 의미로 사용되는 경우가 많다.

왜 필요한가

예를 들어 40GB가 필요한 모델을 24GB GPU 하나에는 올릴 수 없지만 24GB GPU 두 장에는 분할해서 넣을 수 있다.

이 경우 GPU Split의 가장 직접적인 이점은 계산속도보다 총 VRAM 용량을 합쳐 더 큰 모델을 실행할 수 있다는 데 있다.

레이어 단위 분할

가장 이해하기 쉬운 방법은 Transformer 레이어를 GPU별로 나누는 것이다.

앞쪽 레이어는 GPU 0, 뒤쪽 레이어는 GPU 1이 담당하면 입력 activation이 앞쪽 GPU에서 계산된 뒤 다음 GPU로 전달된다.

이 방식은 구현이 비교적 단순하지만 한 토큰의 계산이 GPU를 순차적으로 지나가므로 GPU 사이 전송속도가 병목이 될 수 있다.

Tensor Parallelism과의 차이

Tensor Parallelism은 하나의 레이어 안에 있는 큰 행렬연산을 여러 GPU가 동시에 나눠 계산한다.

GPU Split이 '레이어 A는 GPU 0, 레이어 B는 GPU 1'에 가깝다면 Tensor Parallelism은 '같은 레이어 A의 행렬을 GPU 0과 1이 함께 계산'하는 방식이다.

Tensor Parallelism은 병렬성이 높지만 매 레이어마다 GPU 간 collective communication이 필요하므로 고속 interconnect의 영향을 크게 받는다.

VRAM은 정말 합쳐지는가

사용자 관점에서는 총 VRAM을 활용할 수 있지만 일반적인 단일 메모리 공간처럼 완전히 합쳐지는 것은 아니다.

각 GPU는 자신의 로컬 VRAM을 가지고 있으며 런타임이 모델의 어느 부분을 어느 GPU에 둘지 결정한다.

따라서 24GB 두 장을 연결했다고 해서 모든 애플리케이션이 자동으로 48GB GPU 하나처럼 보는 것은 아니다.

언제 유용한가

GPU Split은 다음 상황에서 특히 유용하다.

  • 한 GPU에 모델이 들어가지 않음
  • 여러 소비자 GPU의 VRAM을 활용하고 싶음
  • 최고 처리량보다 큰 모델을 실행하는 것이 우선임

반대로 높은 동시 처리량이나 낮은 latency가 목표라면 Tensor Parallelism이나 복제 방식이 더 유리할 수 있다.

핵심

GPU Split의 주된 목적은 여러 GPU의 메모리를 이용해 큰 모델을 적재하는 것이다. Tensor Parallelism은 연산 자체를 여러 GPU가 동시에 수행해 처리량을 높이는 데 더 초점이 있다. 두 방식 모두 GPU 간 통신비용을 고려해야 하지만 병렬화 방식과 병목 위치가 다르다.